diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..c37cb92f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,33 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: "[BUG]"
+labels: bug
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots & Logs**
+If applicable, add screenshots or log dumps to help explain your problem.
+
+**System Information (please complete the following information):**
+
+ - OS: [e.g. `macOS Catalina Version: 10.15.4`]
+ - Go version: [e.g. `go version go1.14.1 darwin/amd64`]
+- libsv version: [e.g. `v0.0.1`]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000..1295b57c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: "[FEATURE]"
+labels: enhancement
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. libsv is missing support for "Merkle tree" manipulation.
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..32ae6ab4
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,18 @@
+# Basic dependabot.yml to update gomod
+
+version: 2
+updates:
+ - package-ecosystem: "gomod"
+ target-branch: "master"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ # Check for npm updates at 9am UTC (5am EST)
+ time: "10:00"
+ reviewers:
+ - "jadwahab"
+ assignees:
+ - "jadwahab"
+ # Labels must be created first
+ labels:
+ - "update"
\ No newline at end of file
diff --git a/.github/mergify.yml b/.github/mergify.yml
new file mode 100644
index 00000000..ee18abaa
--- /dev/null
+++ b/.github/mergify.yml
@@ -0,0 +1,232 @@
+pull_request_rules:
+
+ # ===============================================================================
+ # DEPENDABOT
+ # ===============================================================================
+
+ - name: Automatic Merge for Dependabot Minor Version Pull Requests
+ conditions:
+ - -draft
+ - author~=^dependabot(|-preview)\[bot\]$
+ - check-success='lint (1.15.x, ubuntu-latest)'
+ - check-success='lint (1.16.x, ubuntu-latest)'
+ - check-success='lint (1.15.x, macos-latest)'
+ - check-success='lint (1.16.x, macos-latest)'
+ - check-success='Analyze (go)'
+ - title~=^Bump [^\s]+ from ([\d]+)\..+ to \1\.
+ actions:
+ review:
+ type: APPROVE
+ message: Automatically approving dependabot pull request
+ merge:
+ method: merge
+ - name: Alert on major version detection
+ conditions:
+ - author~=^dependabot(|-preview)\[bot\]$
+ - check-success='lint (1.15.x, ubuntu-latest)'
+ - check-success='lint (1.16.x, ubuntu-latest)'
+ - check-success='lint (1.15.x, macos-latest)'
+ - check-success='lint (1.16.x, macos-latest)'
+ - check-success='Analyze (go)'
+ - -title~=^Bump [^\s]+ from ([\d]+)\..+ to \1\.
+ actions:
+ comment:
+ message: "⚠️ @theflyingcodr @jadwahab: this is a major version bump and requires your attention"
+
+
+ # ===============================================================================
+ # AUTOMATIC MERGE (APPROVALS)
+ # ===============================================================================
+
+ - name: Automatic Merge ⬇️ on Approval ✔
+ conditions:
+ - "#approved-reviews-by>=1"
+ - check-success='lint (1.15.x, ubuntu-latest)'
+ - check-success='lint (1.16.x, ubuntu-latest)'
+ - check-success='lint (1.15.x, macos-latest)'
+ - check-success='lint (1.16.x, macos-latest)'
+ - check-success='Analyze (go)'
+ - label!=work-in-progress
+ - -draft
+ actions:
+ merge:
+ method: merge
+
+ # ===============================================================================
+ # AUTHOR
+ # ===============================================================================
+
+ - name: Auto-Assign Author
+ conditions:
+ - "#assignee=0"
+ actions:
+ assign:
+ add_users:
+ - "{{author}}"
+
+ # ===============================================================================
+ # ALERTS
+ # ===============================================================================
+
+ - name: Notify on merge
+ conditions:
+ - merged
+ - label=automerge
+ actions:
+ comment:
+ message: "✅ @{{author}}: **{{title}}** has been merged successfully."
+ - name: Alert on merge conflict
+ conditions:
+ - conflict
+ - label=automerge
+ actions:
+ comment:
+ message: "🆘 @{{author}}: `{{head}}` has conflicts with `{{base}}` that must be resolved."
+ label:
+ add:
+ - conflict
+ - name: Alert on tests failure for automerge
+ conditions:
+ - label=automerge
+ - status-failure=commit
+ actions:
+ comment:
+ message: "🆘 @{{author}}: unable to merge due to CI failure."
+
+ - name: remove conflict label if not needed
+ conditions:
+ - -conflict
+ actions:
+ label:
+ remove:
+ - conflict
+
+ # ===============================================================================
+ # LABELS
+ # ===============================================================================
+ # Automatically add labels when PRs match certain patterns
+ #
+ # NOTE:
+ # - single quotes for regex to avoid accidental escapes
+ # - Mergify leverages Python regular expressions to match rules.
+ #
+ # Semantic commit messages
+ # - chore: updating grunt tasks etc.; no production code change
+ # - docs: changes to the documentation
+ # - feat: feature or story
+ # - enhancement: an improvement to an existing feature
+ # - feat: new feature for the user, not a new feature for build script
+ # - fix: bug fix for the user, not a fix to a build script
+ # - idea: general idea or suggestion
+ # - test: test related changes
+ # ===============================================================================
+
+ - name: Hotfix label
+ conditions:
+ - "head~=(?i)^hotfix" # if the PR branch starts with hotfix/
+ actions:
+ label:
+ add: ["hot-fix"]
+ - name: Bug / Fix label
+ conditions:
+ - "head~=(?i)^(bug)?fix" # if the PR branch starts with (bug)?fix/
+ actions:
+ label:
+ add: [ "bug-P3" ]
+ - name: Documentation label
+ conditions:
+ - "head~=(?i)^docs" # if the PR branch starts with docs/
+ actions:
+ label:
+ add: [ "documentation" ]
+ - name: Feature label
+ conditions:
+ - "head~=(?i)^feat(ure)?" # if the PR branch starts with feat(ure)?/
+ actions:
+ label:
+ add: ["feature"]
+ - name: Enhancement label
+ conditions:
+ - "head~=(?i)^enhancement?" # if the PR branch starts with enhancement/
+ actions:
+ label:
+ add: ["enhancement"]
+ - name: Chore label
+ conditions:
+ - "head~=(?i)^chore" # if the PR branch starts with chore/
+ actions:
+ label:
+ add: ["update"]
+ - name: Question label
+ conditions:
+ - "head~=(?i)^question" # if the PR branch starts with question/
+ actions:
+ label:
+ add: ["question"]
+ - name: Test label
+ conditions:
+ - "head~=(?i)^test" # if the PR branch starts with test/
+ actions:
+ label:
+ add: ["test"]
+ - name: Idea label
+ conditions:
+ - "head~=(?i)^idea" # if the PR branch starts with idea/
+ actions:
+ label:
+ add: ["idea"]
+
+ # ===============================================================================
+ # STALE BRANCHES
+ # ===============================================================================
+
+ - name: Close stale pull request
+ conditions:
+ - base=master
+ - -closed
+ - updated-at<21 days ago
+ actions:
+ close:
+ message: |
+ This pull request looks stale. Feel free to reopen it if you think it's a mistake.
+ label:
+ add: [ "stale" ]
+ # ===============================================================================
+ # BRANCHES
+ # ===============================================================================
+
+ - name: Delete head branch after merge
+ conditions:
+ - merged
+ actions:
+ delete_head_branch:
+
+ #- name: automatic update for PR marked as “Ready-to-Go“
+ # conditions:
+ # - -conflict # skip PRs with conflicts
+ # - -draft # filter-out GH draft PRs
+ # - label="Ready-to-Go"
+ # actions:
+ # update:
+
+ # ===============================================================================
+ # CONVENTION
+ # ===============================================================================
+ # https://www.conventionalcommits.org/en/v1.0.0/
+ # Premium feature only
+
+ #- name: Conventional Commit
+ # conditions:
+ # - "title~=^(fix|feat|docs|style|refactor|perf|test|build|ci|chore|revert)(?:\\(.+\\))?:"
+ # actions:
+ # post_check:
+ # title: |
+ # {% if check_succeed %}
+ # Title follows Conventional Commit
+ # {% else %}
+ # Title does not follow Conventional Commit
+ # {% endif %}
+ # summary: |
+ # {% if not check_succeed %}
+ # Your pull request title must follow [Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/).
+ # {% endif %}
\ No newline at end of file
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
new file mode 100644
index 00000000..bdbb1cdf
--- /dev/null
+++ b/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,71 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+name: "CodeQL"
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [master]
+ schedule:
+ - cron: '0 23 * * 0'
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+ matrix:
+ # Override automatic language detection by changing the below list
+ # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
+ language: ['go']
+ # Learn more...
+ # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+ with:
+ # We must fetch at least the immediate parents so that if this is
+ # a pull request then we can checkout the head.
+ fetch-depth: 2
+
+ # If this run was triggered by a pull request event, then checkout
+ # the head of the pull request instead of the merge commit.
+ - run: git checkout HEAD^2
+ if: ${{ github.event_name == 'pull_request' }}
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v1
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v1
+
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 https://git.io/JvXDl
+
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
+ # and modify them (or add more) to build your code if your project
+ # uses a compiled language
+
+ #- run: |
+ # make bootstrap
+ # make release
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v1
diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml
new file mode 100644
index 00000000..b4bf1a77
--- /dev/null
+++ b/.github/workflows/greetings.yml
@@ -0,0 +1,12 @@
+name: Greetings
+
+on: [pull_request, issues]
+
+jobs:
+ greeting:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/first-interaction@v1
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ pr-message: 'Congrats, you just opened your first pull request on libsv/go-bc! Thank you for contributing!'
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
new file mode 100644
index 00000000..e6fe87bc
--- /dev/null
+++ b/.github/workflows/run-tests.yml
@@ -0,0 +1,39 @@
+name: Go
+
+on:
+ push:
+ tags:
+ - '*'
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ golangci:
+ strategy:
+ matrix:
+ go-version: [1.15.x,1.16.x]
+ os: [macos-latest, ubuntu-latest]
+ name: lint
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v2
+ - name: golangci-lint
+ uses: golangci/golangci-lint-action@v2
+ with:
+ # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version.
+ version: latest
+
+ release:
+ needs: [golangci]
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: release
+ uses: goreleaser/goreleaser-action@v2
+ if: startsWith(github.ref, 'refs/tags/')
+ with:
+ version: latest
+ args: release --rm-dist
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 00000000..289f4aa6
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,466 @@
+# This file contains all available configuration options
+# with their default values.
+
+# options for analysis running
+run:
+ # default concurrency is a available CPU number
+ concurrency: 4
+
+ # timeout for analysis, e.g. 30s, 5m, default is 1m
+ timeout: 3m
+
+ # exit code when at least one issue was found, default is 1
+ issues-exit-code: 1
+
+ # include test files or not, default is true
+ tests: true
+
+ # list of build tags, all linters use it. Default is empty list.
+ build-tags:
+ - mytag
+
+ # which dirs to skip: issues from them won't be reported;
+ # can use regexp here: generated.*, regexp is applied on full path;
+ # default value is empty list, but default dirs are skipped independently
+ # from this option's value (see skip-dirs-use-default).
+ # "/" will be replaced by current OS file path separator to properly work
+ # on Windows.
+ skip-dirs:
+ - .github
+ - .make
+ - dist
+ - vendor
+
+ # default is true. Enables skipping of directories:
+ # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
+ skip-dirs-use-default: true
+
+ # which files to skip: they will be analyzed, but issues from them
+ # won't be reported. Default value is empty list, but there is
+ # no need to include all autogenerated files, we confidently recognize
+ # autogenerated files. If it's not please let us know.
+ # "/" will be replaced by current OS file path separator to properly work
+ # on Windows.
+ skip-files:
+ - ".*\\.my\\.go$"
+ - lib/bad.go
+
+ # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules":
+ # If invoked with -mod=readonly, the go command is disallowed from the implicit
+ # automatic updating of go.mod described above. Instead, it fails when any changes
+ # to go.mod are needed. This setting is most useful to check that go.mod does
+ # not need updates, such as in a continuous integration and testing system.
+ # If invoked with -mod=vendor, the go command assumes that the vendor
+ # directory holds the correct copies of dependencies and ignores
+ # the dependency descriptions in go.mod.
+ #modules-download-mode: readonly|release|vendor
+
+ # Allow multiple parallel golangci-lint instances running.
+ # If false (default) - golangci-lint acquires file lock on start.
+ allow-parallel-runners: false
+
+
+# output configuration options
+output:
+ # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
+ format: colored-line-number
+
+ # print lines of code with issue, default is true
+ print-issued-lines: true
+
+ # print linter name in the end of issue text, default is true
+ print-linter-name: true
+
+ # make issues output unique by line, default is true
+ uniq-by-line: true
+
+ # add a prefix to the output file references; default is no prefix
+ path-prefix: ""
+
+
+# all available settings of specific linters
+linters-settings:
+ dogsled:
+ # checks assignments with too many blank identifiers; default is 2
+ max-blank-identifiers: 2
+ dupl:
+ # tokens count to trigger issue, 150 by default
+ threshold: 100
+ errcheck:
+ # report about not checking of errors in type assertions: `a := b.(MyStruct)`;
+ # default is false: such cases aren't reported by default.
+ check-type-assertions: false
+
+ # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;
+ # default is false: such cases aren't reported by default.
+ check-blank: false
+
+ # [deprecated] comma-separated list of pairs of the form pkg:regex
+ # the regex is used to ignore names within pkg. (default "fmt:.*").
+ # see https://github.com/kisielk/errcheck#the-deprecated-method for details
+ ignore: fmt:.*,io/ioutil:^Read.*
+
+ # path to a file containing a list of functions to exclude from checking
+ # see https://github.com/kisielk/errcheck#excluding-functions for details
+ #exclude: /path/to/file.txt
+ exhaustive:
+ # indicates that switch statements are to be considered exhaustive if a
+ # 'default' case is present, even if all enum members aren't listed in the
+ # switch
+ default-signifies-exhaustive: false
+ funlen:
+ lines: 60
+ statements: 40
+ gci:
+ # put imports beginning with prefix after 3rd-party packages;
+ # only support one prefix
+ # if not set, use goimports.local-prefixes
+ gocognit:
+ # minimal code complexity to report, 30 by default (but we recommend 10-20)
+ min-complexity: 10
+ nestif:
+ # minimal complexity of if statements to report, 5 by default
+ min-complexity: 4
+ goconst:
+ # minimal length of string constant, 3 by default
+ min-len: 3
+ # minimal occurrences count to trigger, 3 by default
+ min-occurrences: 3
+ gocritic:
+ # Which checks should be enabled; can't be combined with 'disabled-checks';
+ # See https://go-critic.github.io/overview#checks-overview
+ # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`
+ # By default list of stable checks is used.
+ #enabled-checks:
+ # - rangeValCopy
+
+ # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty
+ disabled-checks:
+ - regexpMust
+
+ # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks.
+ # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".
+ enabled-tags:
+ - performance
+ disabled-tags:
+ - experimental
+
+ settings: # settings passed to gocritic
+ captLocal: # must be valid enabled check name
+ paramsOnly: true
+ rangeValCopy:
+ sizeThreshold: 32
+ gocyclo:
+ # minimal code complexity to report, 30 by default (but we recommend 10-20)
+ min-complexity: 10
+ godot:
+ # check all top-level comments, not only declarations
+ check-all: false
+ godox:
+ # report any comments starting with keywords, this is useful for TODO or FIXME comments that
+ # might be left in the code accidentally and should be resolved before merging
+ keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting
+ - NOTE
+ - OPTIMIZE # marks code that should be optimized before merging
+ - HACK # marks hack-arounds that should be removed before merging
+ gofmt:
+ # simplify code: gofmt with `-s` option, true by default
+ simplify: true
+ goheader:
+ values:
+ const:
+ # define here const type values in format k:v, for example:
+ # YEAR: 2020
+ # COMPANY: MY COMPANY
+ regexp:
+ # define here regexp type values, for example
+ # AUTHOR: .*@mycompany\.com
+ template:
+ # put here copyright header template for source code files, for example:
+ # {{ AUTHOR }} {{ COMPANY }} {{ YEAR }}
+ # SPDX-License-Identifier: Apache-2.0
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at:
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ template-path:
+ # also as alternative of directive 'template' you may put the path to file with the template source
+ goimports:
+ # put imports beginning with prefix after 3rd-party packages;
+ # it's a comma-separated list of prefixes
+ local-prefixes: github.com/org/project
+ golint:
+ # minimal confidence for issues, default is 0.8
+ min-confidence: 0.8
+ gomnd:
+ settings:
+ mnd:
+ # the list of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description.
+ checks: argument,case,condition,operation,return,assign
+ govet:
+ # report about shadowed variables
+ check-shadowing: true
+
+ # settings per analyzer
+ settings:
+ printf: # analyzer name, run `go tool vet help` to see all analyzers
+ funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
+
+ # enable or disable analyzers by name
+ enable:
+ - atomicalign
+ enable-all: false
+ disable:
+ #- shadow
+ disable-all: false
+ depguard:
+ list-type: blacklist
+ include-go-root: false
+ packages:
+ packages-with-error-message:
+ lll:
+ # max line length, lines longer will be reported. Default is 120.
+ # '\t' is counted as 1 character by default, and can be changed with the tab-width option
+ line-length: 120
+ # tab width in spaces. Default to 1.
+ tab-width: 1
+ misspell:
+ # Correct spellings using locale preferences for US or UK.
+ # Default is to use a neutral variety of English.
+ # Setting locale to US will correct the British spelling of 'colour' to 'color'.
+ locale: UK
+ ignore-words:
+ - bsv
+ - bitcoin
+ - paymail
+ nakedret:
+ # make an issue if func has more lines of code than this setting and it has naked returns; default is 30
+ max-func-lines: 30
+ prealloc:
+ # XXX: we don't recommend using this linter before doing performance profiling.
+ # For most programs usage of prealloc will be a premature optimization.
+
+ # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them.
+ # True by default.
+ simple: true
+ range-loops: true # Report preallocation suggestions on range loops, true by default
+ for-loops: false # Report preallocation suggestions on for loops, false by default
+ nolintlint:
+ # Enable to ensure that nolint directives are all used. Default is true.
+ allow-unused: false
+ # Disable to ensure that nolint directives don't have a leading space. Default is true.
+ allow-leading-space: true
+ # Exclude following linters from requiring an explanation. Default is [].
+ allow-no-explanation: ["errcheck"]
+ # Enable to require an explanation of nonzero length after each nolint directive. Default is false.
+ require-explanation: true
+ # Enable to require nolint directives to mention the specific linter being suppressed. Default is false.
+ require-specific: true
+ rowserrcheck:
+ packages:
+ - github.com/jmoiron/sqlx
+ testpackage:
+ # regexp pattern to skip files
+ skip-regexp: (export|internal)_test\.go
+ unparam:
+ # Inspect exported functions, default is false. Set to true if no external program/library imports your code.
+ # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors:
+ # if it's called for subdir of a project it can't find external interfaces. All text editor integrations
+ # with golangci-lint call it on a directory with the changed file.
+ check-exported: false
+ unused:
+ # treat code as a program (not a library) and report unused exported identifiers; default is false.
+ # XXX: if you enable this setting, unused will report a lot of false-positives in text editors:
+ # if it's called for subdir of a project it can't find funcs usages. All text editor integrations
+ # with golangci-lint call it on a directory with the changed file.
+ check-exported: false
+ whitespace:
+ multi-if: false # Enforces newlines (or comments) after every multi-line if statement
+ multi-func: false # Enforces newlines (or comments) after every multi-line function signature
+ wsl:
+ # If true append is only allowed to be cuddled if appending value is
+ # matching variables, fields or types on line above. Default is true.
+ strict-append: true
+ # Allow calls and assignments to be cuddled as long as the lines have any
+ # matching variables, fields or types. Default is true.
+ allow-assign-and-call: true
+ # Allow multiline assignments to be cuddled. Default is true.
+ allow-multiline-assign: true
+ # Allow declarations (var) to be cuddled.
+ allow-cuddle-declarations: true
+ # Allow trailing comments in ending of blocks
+ allow-trailing-comment: false
+ # Force newlines in end of case at this limit (0 = never).
+ force-case-trailing-whitespace: 0
+ # Force cuddling of err checks with err var assignment
+ force-err-cuddling: false
+ # Allow leading comments to be separated with empty liens
+ allow-separated-leading-comment: false
+ gofumpt:
+ # Choose whether or not to use the extra rules that are disabled
+ # by default
+ extra-rules: false
+
+ # The custom section can be used to define linter plugins to be loaded at runtime. See README doc
+ # for more info.
+ custom:
+ # Each custom linter should have a unique name.
+ #example:
+ # The path to the plugin *.so. Can be absolute or local. Required for each custom linter
+ #path: /path/to/example.so
+ # The description of the linter. Optional, just for documentation purposes.
+ #description: This is an example usage of a plugin linter.
+ # Intended to point to the repo location of the linter. Optional, just for documentation purposes.
+ #original-url: github.com/golangci/example-linter
+
+linters:
+ enable:
+ - megacheck
+ - govet
+ - gosec
+ - bodyclose
+ - golint
+ - unconvert
+ - dupl
+ - misspell
+ - dogsled
+ - prealloc
+ - exportloopref
+ - exhaustive
+ - sqlclosecheck
+ - goconst
+ - goimports
+ #- lll
+ disable:
+ - gci
+ - gocritic # use this for very opinionated linting
+ - gochecknoglobals
+ - whitespace
+ - wsl
+ - goerr113
+ - godot
+ - testpackage
+ - nestif
+ - nlreturn
+ - nolintlint
+ disable-all: false
+ presets:
+ - bugs
+ - unused
+ fast: false
+
+
+issues:
+ # List of regexps of issue texts to exclude, empty list by default.
+ # But independently from this option we use default exclude patterns,
+ # it can be disabled by `exclude-use-default: false`. To list all
+ # excluded by default patterns execute `golangci-lint run --help`
+ exclude:
+ - Using the variable on range scope .* in function literal
+
+ # Excluding configuration per-path, per-linter, per-text and per-source
+ exclude-rules:
+ - linters:
+ - gosec
+ text: "G402:"
+ - linters:
+ - golint
+ text: "exported func"
+
+ # Exclude some linters from running on tests files.
+ - path: _test\.go
+ linters:
+ - gocyclo
+ - errcheck
+ - dupl
+ - gosec
+ - goconst
+ - lll
+
+ # Exclude known linters from partially hard-vendored code,
+ # which is impossible to exclude via "nolint" comments.
+ - path: internal/hmac/
+ text: "weak cryptographic primitive"
+ linters:
+ - gosec
+
+ # Exclude some staticcheck messages
+ - linters:
+ - staticcheck
+ text: "SA1019:"
+
+ # Exclude lll issues for long lines with go:generate
+ - linters:
+ - lll
+ source: "^//go:generate "
+
+ # Independently from option `exclude` we use default exclude patterns,
+ # it can be disabled by this option. To list all
+ # excluded by default patterns execute `golangci-lint run --help`.
+ # Default value for this option is true.
+ exclude-use-default: false
+
+ # The default value is false. If set to true exclude and exclude-rules
+ # regular expressions become case sensitive.
+ exclude-case-sensitive: false
+
+ # The list of ids of default excludes to include or disable. By default it's empty.
+ include:
+ - EXC0002 # disable excluding of issues about comments from golint
+
+ # Maximum issues count per one linter. Set to 0 to disable. Default is 50.
+ max-issues-per-linter: 0
+
+ # Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
+ max-same-issues: 0
+
+ # Show only new issues: if there are unstaged changes or untracked files,
+ # only those changes are analyzed, else only changes in HEAD~ are analyzed.
+ # It's a super-useful option for integration of golangci-lint into existing
+ # large codebase. It's not practical to fix all existing issues at the moment
+ # of integration: much better don't allow issues in new code.
+ # Default is false.
+ new: false
+
+ # Show only new issues created after git revision `REV`
+ new-from-rev: ""
+
+ # Show only new issues created in git patch with set file path.
+ #new-from-patch: path/to/patch/file
+
+severity:
+ # Default value is empty string.
+ # Set the default severity for issues. If severity rules are defined and the issues
+ # do not match or no severity is provided to the rule this will be the default
+ # severity applied. Severities should match the supported severity names of the
+ # selected out format.
+ # - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity
+ # - Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity
+ # - Github: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message
+ default-severity: error
+
+ # The default value is false.
+ # If set to true severity-rules regular expressions become case sensitive.
+ case-sensitive: false
+
+ # Default value is empty list.
+ # When a list of severity rules are provided, severity information will be added to lint
+ # issues. Severity rules have the same filtering capability as exclude rules except you
+ # are allowed to specify one matcher per severity rule.
+ # Only affects out formats that support setting severity information.
+ rules:
+ - linters:
+ - dupl
+ severity: info
diff --git a/.goreleaser.yml b/.goreleaser.yml
new file mode 100644
index 00000000..7580a498
--- /dev/null
+++ b/.goreleaser.yml
@@ -0,0 +1,27 @@
+# Make sure to check the documentation at http://goreleaser.com
+# ---------------------------
+# GENERAL
+# ---------------------------
+before:
+ hooks:
+ - make all
+snapshot:
+ name_template: "{{ .Tag }}"
+changelog:
+ sort: asc
+ filters:
+ exclude:
+ - '^.github:'
+ - '^test:'
+
+# ---------------------------
+# BUILDER
+# ---------------------------
+build:
+ skip: true
+# ---------------------------
+# Github Release
+# ---------------------------
+release:
+ prerelease: true
+ name_template: "Release v{{.Version}}"
\ No newline at end of file
diff --git a/.make/common.mk b/.make/common.mk
new file mode 100644
index 00000000..9b24ae7b
--- /dev/null
+++ b/.make/common.mk
@@ -0,0 +1,72 @@
+## Default repository domain name
+ifndef GIT_DOMAIN
+ override GIT_DOMAIN=github.com
+endif
+
+## Set if defined (alias variable for ease of use)
+ifdef branch
+ override REPO_BRANCH=$(branch)
+ export REPO_BRANCH
+endif
+
+## Do we have git available?
+HAS_GIT := $(shell command -v git 2> /dev/null)
+
+ifdef HAS_GIT
+ ## Do we have a repo?
+ HAS_REPO := $(shell git rev-parse --is-inside-work-tree 2> /dev/null)
+ ifdef HAS_REPO
+ ## Automatically detect the repo owner and repo name (for local use with Git)
+ REPO_NAME=$(shell basename "$(shell git rev-parse --show-toplevel 2> /dev/null)")
+ OWNER=$(shell git config --get remote.origin.url | sed 's/git@$(GIT_DOMAIN)://g' | sed 's/\/$(REPO_NAME).git//g')
+ REPO_OWNER=$(shell echo $(OWNER) | tr A-Z a-z)
+ VERSION_SHORT=$(shell git describe --tags --always --abbrev=0)
+ export REPO_NAME, REPO_OWNER, VERSION_SHORT
+ endif
+endif
+
+## Set the distribution folder
+ifndef DISTRIBUTIONS_DIR
+ override DISTRIBUTIONS_DIR=./dist
+endif
+export DISTRIBUTIONS_DIR
+
+help: ## Show this help message
+ @egrep -h '^(.+)\:\ ##\ (.+)' ${MAKEFILE_LIST} | column -t -c 2 -s ':#'
+
+release:: ## Full production release (creates release in Github)
+ @test $(github_token)
+ @export GITHUB_TOKEN=$(github_token) && goreleaser --rm-dist
+
+release-test: ## Full production test release (everything except deploy)
+ @goreleaser --skip-publish --rm-dist
+
+release-snap: ## Test the full release (build binaries)
+ @goreleaser --snapshot --skip-publish --rm-dist
+
+replace-version: ## Replaces the version in HTML/JS (pre-deploy)
+ @test $(version)
+ @test "$(path)"
+ @find $(path) -name "*.html" -type f -exec sed -i '' -e "s/{{version}}/$(version)/g" {} \;
+ @find $(path) -name "*.js" -type f -exec sed -i '' -e "s/{{version}}/$(version)/g" {} \;
+
+tag: ## Generate a new tag and push (tag version=0.0.0)
+ @test $(version)
+ @git tag -a v$(version) -m "Pending full release..."
+ @git push origin v$(version)
+ @git fetch --tags -f
+
+tag-remove: ## Remove a tag if found (tag-remove version=0.0.0)
+ @test $(version)
+ @git tag -d v$(version)
+ @git push --delete origin v$(version)
+ @git fetch --tags
+
+tag-update: ## Update an existing tag to current commit (tag-update version=0.0.0)
+ @test $(version)
+ @git push --force origin HEAD:refs/tags/v$(version)
+ @git fetch --tags -f
+
+update-releaser: ## Update the goreleaser application
+ @brew update
+ @brew upgrade goreleaser
diff --git a/.make/go.mk b/.make/go.mk
new file mode 100644
index 00000000..3db3a5a3
--- /dev/null
+++ b/.make/go.mk
@@ -0,0 +1,94 @@
+## Default to the repo name if empty
+ifndef BINARY_NAME
+ override BINARY_NAME=app
+endif
+
+## Define the binary name
+ifdef CUSTOM_BINARY_NAME
+ override BINARY_NAME=$(CUSTOM_BINARY_NAME)
+endif
+
+## Set the binary release names
+DARWIN=$(BINARY_NAME)-darwin
+LINUX=$(BINARY_NAME)-linux
+WINDOWS=$(BINARY_NAME)-windows.exe
+
+.PHONY: test lint vet install
+
+bench: ## Run all benchmarks in the Go application
+ @go test -bench=. -benchmem
+
+build-go: ## Build the Go application (locally)
+ @go build -o bin/$(BINARY_NAME)
+
+clean-mods: ## Remove all the Go mod cache
+ @go clean -modcache
+
+coverage: ## Shows the test coverage
+ @go test -coverprofile=coverage.out ./... && go tool cover -func=coverage.out
+
+godocs: ## Sync the latest tag with GoDocs
+ @test $(GIT_DOMAIN)
+ @test $(REPO_OWNER)
+ @test $(REPO_NAME)
+ @test $(VERSION_SHORT)
+ @curl https://proxy.golang.org/$(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)/@v/$(VERSION_SHORT).info
+
+install: ## Install the application
+ @go build -o $$GOPATH/bin/$(BINARY_NAME)
+
+install-go: ## Install the application (Using Native Go)
+ @go install $(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)
+
+lint: ## Run the golangci-lint application (install if not found)
+ @echo "downloading golangci-lint..."
+ @curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- v1.42.0
+ @echo "running golangci-lint..."
+ @GOGC=20 ./bin/golangci-lint run
+
+test: ## Runs vet, lint and ALL tests
+ @$(MAKE) lint
+ @echo "running tests..."
+ @go test ./... -v
+
+test-unit:
+ @go test ./... -race -coverprofile=coverage.txt -covermode=atomic
+
+test-short: ## Runs vet, lint and tests (excludes integration tests)
+ @$(MAKE) lint
+ @echo "running tests (short)..."
+ @go test ./... -v -test.short
+
+test-ci: ## Runs all tests via CI (exports coverage)
+ @$(MAKE) lint
+ @echo "running tests (CI)..."
+ @go test ./... -race -coverprofile=coverage.txt -covermode=atomic
+
+test-ci-no-race: ## Runs all tests via CI (no race) (exports coverage)
+ @$(MAKE) lint
+ @echo "running tests (CI - no race)..."
+ @go test ./... -coverprofile=coverage.txt -covermode=atomic
+
+test-ci-short: ## Runs unit tests via CI (exports coverage)
+ @$(MAKE) lint
+ @echo "running tests (CI - unit tests only)..."
+ @go test ./... -test.short -race -coverprofile=coverage.txt -covermode=atomic
+
+uninstall: ## Uninstall the application (and remove files)
+ @test $(BINARY_NAME)
+ @test $(GIT_DOMAIN)
+ @test $(REPO_OWNER)
+ @test $(REPO_NAME)
+ @go clean -i $(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)
+ @rm -rf $$GOPATH/src/$(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)
+ @rm -rf $$GOPATH/bin/$(BINARY_NAME)
+
+update: ## Update all project dependencies
+ @go get -u ./... && go mod tidy
+
+update-linter: ## Update the golangci-lint package (macOS only)
+ @brew upgrade golangci-lint
+
+vet: ## Run the Go vet application
+ @echo "running go vet..."
+ @go vet -v ./...
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..3aec282a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,22 @@
+SHELL=/bin/bash
+
+run-all-tests: run-linter run-unit-tests
+
+pre-commit: vendor-deps run-all-tests
+
+run-unit-tests:
+ @go clean -testcache && go test ./... -race -v
+
+run-unit-tests-cover:
+ @go test ./... -race -v -coverprofile cover.out && \
+ go tool cover -html=cover.out -o cover.html && \
+ open file:///$(shell pwd)/cover.html
+
+run-linter:
+ @golangci-lint run --deadline=240s --skip-dirs=vendor --tests
+
+install-linter:
+ @curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.35.2
+
+vendor-deps:
+ @go mod tidy && go mod vendor
diff --git a/README.md b/README.md
index 77b91a48..bf791bb2 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,18 @@
-Common framework for bdd testing implemented using godogs
+# go-bdd-common
+
+[![Release](https://img.shields.io/github/release-pre/libsv/go-bdd-common.svg?logo=github&style=flat&v=1)](https://github.com/libsv/go-bdd-common/releases)
+[![Go](https://github.com/libsv/go-bt/actions/workflows/run-tests.yml/badge.svg?branch=master)](https://github.com/libsv/go-bt/actions/workflows/run-tests.yml)
+[![Go](https://github.com/libsv/go-bt/actions/workflows/run-tests.yml/badge.svg?event=pull_request)](https://github.com/libsv/go-bt/actions/workflows/run-tests.yml)
+
+[![Report](https://goreportcard.com/badge/github.com/libsv/go-bdd-common?style=flat&v=1)](https://goreportcard.com/report/github.com/libsv/go-bdd-common)
+[![codecov](https://codecov.io/gh/libsv/go-bdd-common/branch/master/graph/badge.svg?v=1)](https://codecov.io/gh/libsv/go-bdd-common)
+[![Go](https://img.shields.io/github/go-mod/go-version/libsv/go-bdd-common?v=1)](https://golang.org/)
+[![Sponsor](https://img.shields.io/badge/sponsor-libsv-181717.svg?logo=github&style=flat&v=3)](https://github.com/sponsors/libsv)
+[![Donate](https://img.shields.io/badge/donate-bitcoin-ff9900.svg?logo=bitcoin&style=flat&v=3)](https://gobitcoinsv.com/#sponsor)
+[![Mergify Status][mergify-status]][mergify]
+
+[mergify]: https://mergify.io
+[mergify-status]: https://img.shields.io/endpoint.svg?url=https://gh.mergify.io/badges/libsv/go-bdd-common&style=flat
+
+
+go-bdd-common is a generic [bdd](https://en.wikipedia.org/wiki/Behavior-driven_development) tool helping to write scalable tests for microservices applications. The framework is implemented in golang using godogs.
diff --git a/go.mod b/go.mod
new file mode 100644
index 00000000..24f0246f
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,28 @@
+module github.com/libsv/go-bdd-common
+
+go 1.16
+
+require (
+ bitbucket.stressedsharks.com/plat/common v1.2.3
+ bitbucket.stressedsharks.com/plat/proto v1.2.4
+ github.com/cucumber/gherkin-go/v19 v19.0.3 // indirect
+ github.com/cucumber/godog v0.11.0
+ github.com/cucumber/messages-go/v16 v16.0.1 // indirect
+ github.com/docker/docker v20.10.8+incompatible
+ github.com/docker/go-connections v0.4.0
+ github.com/golang/protobuf v1.5.2
+ github.com/google/uuid v1.2.0
+ github.com/jhump/protoreflect v1.9.0
+ github.com/lib/pq v1.10.3
+ github.com/libsv/go-bk v0.1.4
+ github.com/libsv/go-bt/v2 v2.1.0-beta
+ github.com/minio/minio-go/v7 v7.0.14
+ github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852
+ github.com/pkg/errors v0.9.1
+ github.com/segmentio/kafka-go v0.4.20
+ github.com/spf13/pflag v1.0.5
+ github.com/toorop/go-bitcoind v0.0.0-20201025081558-87ada228a807
+ github.com/yazgazan/jaydiff v0.3.1
+ google.golang.org/grpc v1.40.0
+ gopkg.in/yaml.v2 v2.4.0
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 00000000..390a6d8e
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,1416 @@
+bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
+bitbucket.stressedsharks.com/plat/common v1.2.3 h1:0/793BQRj3ofECkE31IyJ2dZ9WYbGV0mCZII/sBx0j8=
+bitbucket.stressedsharks.com/plat/common v1.2.3/go.mod h1:i2gzoChhVqLqRZAEU4Yo1A+AGHVcz78gJE3Kmho8i3g=
+bitbucket.stressedsharks.com/plat/proto v1.2.4 h1:F58i/P4bS8eQyO1VdQ9rN4z3mnGztRUbwPNtWxLPjg0=
+bitbucket.stressedsharks.com/plat/proto v1.2.4/go.mod h1:fJwg2V2OZh2CwO5wIz1DkFEDywQZ+BhvWghgr4o6MXA=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
+github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
+github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
+github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
+github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
+github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
+github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
+github.com/HdrHistogram/hdrhistogram-go v1.0.1/go.mod h1:BWJ+nMSHY3L41Zj7CA3uXnloDp7xxV0YvstAE7nKTaM=
+github.com/InVisionApp/go-health v2.1.0+incompatible/go.mod h1:/+Gv1o8JUsrjC6pi6MN6/CgKJo4OqZ6x77XAnImrzhg=
+github.com/InVisionApp/go-logger v1.0.1/go.mod h1:+cGTDSn+P8105aZkeOfIhdd7vFO5X1afUHcjvanY0L8=
+github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
+github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
+github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
+github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
+github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
+github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.4.17 h1:iT12IBVClFevaf8PuVyi3UmZOVh4OqnaLxDTW2O6j3w=
+github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
+github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
+github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
+github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
+github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
+github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
+github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
+github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
+github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
+github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
+github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
+github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
+github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
+github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
+github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
+github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
+github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
+github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/aslakhellesoy/gox v1.0.100/go.mod h1:AJl542QsKKG96COVsv0N74HHzVQgDIQPceVUh1aeU2M=
+github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
+github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
+github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
+github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
+github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bitcoinsv/bsvd v0.0.0-20190609155523-4c29707f7173/go.mod h1:BZ1UcC9+tmcDEcdVXgpt13hMczwJxWzpAn68wNs7zRA=
+github.com/bitcoinsv/bsvutil v0.0.0-20181216182056-1d77cf353ea9/go.mod h1:p44KuNKUH5BC8uX4ONEODaHUR4+ibC8todEAOGQEJAM=
+github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
+github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
+github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
+github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
+github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
+github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
+github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
+github.com/casbin/casbin/v2 v2.0.0/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
+github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
+github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
+github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc=
+github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
+github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
+github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
+github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
+github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
+github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
+github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU=
+github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
+github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
+github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E=
+github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
+github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
+github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI=
+github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
+github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
+github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
+github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
+github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
+github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
+github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE=
+github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
+github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
+github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ=
+github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU=
+github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI=
+github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s=
+github.com/containerd/containerd v1.5.2 h1:MG/Bg1pbmMb61j3wHCFWPxESXHieiKr2xG64px/k8zQ=
+github.com/containerd/containerd v1.5.2/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g=
+github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
+github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
+github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
+github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
+github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
+github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
+github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
+github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
+github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU=
+github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
+github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
+github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
+github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
+github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0=
+github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA=
+github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow=
+github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms=
+github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c=
+github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
+github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
+github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8=
+github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
+github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
+github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
+github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk=
+github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
+github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
+github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw=
+github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y=
+github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
+github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
+github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc=
+github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4=
+github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
+github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
+github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cucumber/gherkin-go/v11 v11.0.0 h1:cwVwN1Qn2VRSfHZNLEh5x00tPBmZcjATBWDpxsR5Xug=
+github.com/cucumber/gherkin-go/v11 v11.0.0/go.mod h1:CX33k2XU2qog4e+TFjOValoq6mIUq0DmVccZs238R9w=
+github.com/cucumber/gherkin-go/v19 v19.0.3 h1:mMSKu1077ffLbTJULUfM5HPokgeBcIGboyeNUof1MdE=
+github.com/cucumber/gherkin-go/v19 v19.0.3/go.mod h1:jY/NP6jUtRSArQQJ5h1FXOUgk5fZK24qtE7vKi776Vw=
+github.com/cucumber/godog v0.11.0 h1:xgaWyJuAD6A+aW4TfVGNDBhuMyKW0jjl0cvY3KNxEak=
+github.com/cucumber/godog v0.11.0/go.mod h1:GyxCIrsg1sgEgpL2GD/rMr3fIoNHpgkjm9nANw/89XY=
+github.com/cucumber/godog v0.12.1 h1:IhWVYFKDReM5WsuA9AuRLRPWOyvFNO9UBUKrNfLPais=
+github.com/cucumber/godog v0.12.1/go.mod h1:u6SD7IXC49dLpPN35kal0oYEjsXZWee4pW6Tm9t5pIc=
+github.com/cucumber/messages-go/v10 v10.0.1/go.mod h1:kA5T38CBlBbYLU12TIrJ4fk4wSkVVOgyh7Enyy8WnSg=
+github.com/cucumber/messages-go/v10 v10.0.3 h1:m/9SD/K/A15WP7i1aemIv7cwvUw+viS51Ui5HBw1cdE=
+github.com/cucumber/messages-go/v10 v10.0.3/go.mod h1:9jMZ2Y8ZxjLY6TG2+x344nt5rXstVVDYSdS5ySfI1WY=
+github.com/cucumber/messages-go/v16 v16.0.0/go.mod h1:EJcyR5Mm5ZuDsKJnT2N9KRnBK30BGjtYotDKpwQ0v6g=
+github.com/cucumber/messages-go/v16 v16.0.1 h1:fvkpwsLgnIm0qugftrw2YwNlio+ABe2Iu94Ap8GMYIY=
+github.com/cucumber/messages-go/v16 v16.0.1/go.mod h1:EJcyR5Mm5ZuDsKJnT2N9KRnBK30BGjtYotDKpwQ0v6g=
+github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
+github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
+github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
+github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
+github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
+github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4=
+github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
+github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
+github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
+github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v20.10.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v20.10.8+incompatible h1:RVqD337BgQicVCzYrrlhLDWhq6OAD2PJDUg2LsEUvKM=
+github.com/docker/docker v20.10.8+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
+github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
+github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
+github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
+github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
+github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
+github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw=
+github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
+github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
+github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
+github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
+github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
+github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
+github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
+github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY=
+github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
+github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
+github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
+github.com/getsentry/sentry-go v0.10.0/go.mod h1:kELm/9iCblqUYh+ZRML7PNdCvEuw24wBvJPYyi86cws=
+github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
+github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
+github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
+github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
+github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
+github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
+github.com/go-openapi/jsonreference v0.19.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
+github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
+github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
+github.com/go-openapi/spec v0.19.14/go.mod h1:gwrgJS15eCUgjLpMjBJmbZezCsw88LmgeEip0M63doA=
+github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU=
+github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.11/go.mod h1:Uc0gKkdR+ojzsEpjh39QChyu92vPgIr72POcgHMAgSY=
+github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M=
+github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
+github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
+github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
+github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
+github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
+github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
+github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
+github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU=
+github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw=
+github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
+github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU=
+github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
+github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
+github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
+github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
+github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
+github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
+github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
+github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
+github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
+github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE=
+github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-memdb v1.3.0 h1:xdXq34gBOMEloa9rlGStLxmfX/dyIK8htOv36dQUwHU=
+github.com/hashicorp/go-memdb v1.3.0/go.mod h1:Mluclgwib3R93Hk5fxEfiRhB+6Dar64wWh71LpNSe3g=
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
+github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
+github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
+github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
+github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
+github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
+github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
+github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
+github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
+github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk=
+github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g=
+github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw=
+github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
+github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
+github.com/jhump/protoreflect v1.8.2/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg=
+github.com/jhump/protoreflect v1.9.0 h1:npqHz788dryJiR/l6K/RUQAyh2SwV91+d1dnh4RjO9w=
+github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg=
+github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
+github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8=
+github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE=
+github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE=
+github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro=
+github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.11.13 h1:eSvu8Tmq6j2psUJqJrLcWH6K3w5Dwc+qipbaA6eVEN4=
+github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
+github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
+github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
+github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/labstack/echo-contrib v0.9.0/go.mod h1:TsFE5Vv0LRpZLoh4mMmaaAxzcTH+1CBFiUtVhwlegzU=
+github.com/labstack/echo/v4 v4.0.0/go.mod h1:tZv7nai5buKSg5h/8E6zz4LsD/Dqh9/91Mvs7Z5Zyno=
+github.com/labstack/echo/v4 v4.1.6/go.mod h1:kU/7PwzgNxZH4das4XNsSpBSOD09XIF5YEPzjpkGnGE=
+github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g=
+github.com/labstack/echo/v4 v4.2.0/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
+github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4=
+github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4=
+github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
+github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg=
+github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/libsv/go-bk v0.0.0-20210430094342-ff08e691962b/go.mod h1:xbDkeFFpP0uyFaPLnP6TwaLpAsHaslZ0LftTdWlB6HI=
+github.com/libsv/go-bk v0.1.3/go.mod h1:xbDkeFFpP0uyFaPLnP6TwaLpAsHaslZ0LftTdWlB6HI=
+github.com/libsv/go-bk v0.1.4 h1:bTxlerGeibh8RRmyhFK03wSAEp6EAJxGR4vXuRT0LCE=
+github.com/libsv/go-bk v0.1.4/go.mod h1:xbDkeFFpP0uyFaPLnP6TwaLpAsHaslZ0LftTdWlB6HI=
+github.com/libsv/go-bt/v2 v2.0.0-20210730150403-97fd3b293e05/go.mod h1:62PATaSIMQ3omXVr9D4S7uMKaQByCJjNkrNzFpYThco=
+github.com/libsv/go-bt/v2 v2.1.0-beta h1:Ai0tAjrUTv6iC1LR9jE4ffWzBD6te15qaPfwa5SQdew=
+github.com/libsv/go-bt/v2 v2.1.0-beta/go.mod h1:62PATaSIMQ3omXVr9D4S7uMKaQByCJjNkrNzFpYThco=
+github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
+github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
+github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
+github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
+github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
+github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
+github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
+github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/mb0/diff v0.0.0-20131118162322-d8d9a906c24d h1:eAS2t2Vy+6psf9LZ4T5WXWsbkBt3Tu5PWekJy5AGyEU=
+github.com/mb0/diff v0.0.0-20131118162322-d8d9a906c24d/go.mod h1:3YMHqrw2Qu3Liy82v4QdAG17e9k91HZ7w3hqlpWqhDo=
+github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
+github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
+github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
+github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
+github.com/minio/minio-go/v7 v7.0.12/go.mod h1:S23iSP5/gbMwtxeY5FM71R+TkAYyzEdoNEDDwpt8yWs=
+github.com/minio/minio-go/v7 v7.0.14 h1:T7cw8P586gVwEEd0y21kTYtloD576XZgP62N8pE130s=
+github.com/minio/minio-go/v7 v7.0.14/go.mod h1:S23iSP5/gbMwtxeY5FM71R+TkAYyzEdoNEDDwpt8yWs=
+github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
+github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
+github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
+github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
+github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
+github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
+github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
+github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
+github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
+github.com/moby/term v0.0.0-20200312100748-672ec06f55cd h1:aY7OQNf2XqY/JQ6qREWamhI/81os/agb2BAGpcx5yWI=
+github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
+github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
+github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
+github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
+github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
+github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
+github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
+github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
+github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso=
+github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
+github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
+github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 h1:Yl0tPBa8QPjGmesFh1D0rDy+q1Twx6FyU7VWHi8wZbI=
+github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4=
+github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA=
+github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
+github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
+github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
+github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
+github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
+github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
+github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
+github.com/opentracing-contrib/go-grpc v0.0.0-20200813121455-4a6760c71486/go.mod h1:DYR5Eij8rJl8h7gblRrOZ8g0kW1umSpKqYIBTgeDtLo=
+github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
+github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
+github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
+github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
+github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
+github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
+github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
+github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
+github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
+github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
+github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
+github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A=
+github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
+github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
+github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
+github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
+github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
+github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
+github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
+github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
+github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
+github.com/segmentio/kafka-go v0.4.10/go.mod h1:BVDwBTF24avtlj4l8/xsWNb4papVeg16+jO6/0qjvhA=
+github.com/segmentio/kafka-go v0.4.20 h1:bcsboEoRXydZQL1cbd5ziPSwek2vOpR6PniYurFjOdg=
+github.com/segmentio/kafka-go v0.4.20/go.mod h1:19+Eg7KwrNKy/PFhiIthEPkO8k+ac7/ZYXwYM9Df10w=
+github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
+github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
+github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
+github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
+github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8=
+github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
+github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
+github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
+github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/swaggo/echo-swagger v1.1.0/go.mod h1:JaipWDPqOBMwM40W6qz0o07lnPOxrhDkpjA2OaqfzL8=
+github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E=
+github.com/swaggo/swag v1.7.0/go.mod h1:BdPIL73gvS9NBsdi7M1JOxLvlbfvNRaBP8m6WT6Aajo=
+github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
+github.com/theflyingcodr/govalidator v0.0.2/go.mod h1:E6v0mkRcAVMTa7pC8VkUOtoE8WQ9zQ4/fOwrvtwhOM0=
+github.com/theflyingcodr/lathos v0.0.1/go.mod h1:F1eTwqX1gWC85yNJO0KR5OITkTTjhKMH6P2ozCAgRNc=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/toorop/go-bitcoind v0.0.0-20201025081558-87ada228a807 h1:+EH7z9AvJbrMACe89VqROP2SBZ5Am7D0ZB+z6JMD2s0=
+github.com/toorop/go-bitcoind v0.0.0-20201025081558-87ada228a807/go.mod h1:3vYb50n7boJohZyGl68cQ9aslKyiUvFlNed3+nosxIA=
+github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
+github.com/uber/jaeger-client-go v2.19.1-0.20191002155754-0be28c34dabf+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
+github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
+github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
+github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
+github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
+github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w=
+github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4/go.mod h1:50wTf68f99/Zt14pr046Tgt3Lp2vLyFZKzbFXTOabXw=
+github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
+github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
+github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
+github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
+github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
+github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
+github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
+github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
+github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
+github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
+github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
+github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk=
+github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
+github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0=
+github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
+github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
+github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY=
+github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI=
+github.com/yazgazan/jaydiff v0.3.1 h1:5vUlbCCRm8LNckEZhMkU3GjZk1RQZxA/+XuOYrqkhvI=
+github.com/yazgazan/jaydiff v0.3.1/go.mod h1:9AvhZxcMJX51L4eQdw7Wi2mhC8i3HQo0HRvftL0VROw=
+github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg=
+github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM=
+github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
+github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
+github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
+go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
+go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
+go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
+go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
+go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
+go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
+go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
+golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190607181551-461777fb6f67/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 h1:4CSI6oo7cOjJKajidEljs9h+uP0rRZBPPPhcCbj5mw8=
+golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190609082536-301114b31cce/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
+golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190608022120-eacb66d2a7c3/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20201120155355-20be4ac4bd6e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201207182000-5679438983bd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
+google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
+google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b h1:4xoALQmXxqVdDdLimpPyPeDdsJzo+nFTJw9euAMpqgM=
+google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
+google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
+google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
+google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=
+google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
+google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
+gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
+gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
+gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww=
+gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
+gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
+gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
+honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
+k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
+k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
+k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
+k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
+k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
+k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
+k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
+k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
+k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
+k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
+k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
+k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
+k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
+k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
+k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
+k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
+k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
+k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
+k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
+k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
+k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
+sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/godog/context.go b/godog/context.go
new file mode 100644
index 00000000..fea7a706
--- /dev/null
+++ b/godog/context.go
@@ -0,0 +1,180 @@
+package cgodog
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+ "text/template"
+
+ "github.com/libsv/go-bk/wif"
+ "github.com/libsv/go-bt/v2"
+ "github.com/minio/minio-go/v7"
+ "github.com/toorop/go-bitcoind"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/status"
+)
+
+// NewContext created a new *Context
+func NewContext() *Context {
+ return &Context{
+ Headers: make(map[string]string),
+ TemplateVars: make(map[string]interface{}),
+ RequestData: make([]byte, 0),
+ BTC: NewBitcoinContext(),
+ }
+}
+
+// AttachTemplater attaches a template engine to the test ctx
+func (c *Context) AttachTemplater(name string) {
+ c.Template = template.New(
+ fmt.Sprintf("%s_templater", name),
+ ).Funcs(template.FuncMap{
+ "base64Encode": base64Encode,
+ "sub": subtract,
+ "workingTxHex": workingTxHex(c),
+ "workingTxBytes": workingTxBytes(c),
+ })
+}
+
+// NewGRPCContext created a new *GRPCCon
+func NewGRPCContext(proto string, gc *grpc.ClientConn) *GRPCContext {
+ svc, mthd := splitProto(proto)
+ return &GRPCContext{
+ Service: svc,
+ Method: mthd,
+ Proto: proto,
+ Conn: gc,
+ }
+}
+
+// NewHTTPContext created a new *HTTPContext
+func NewHTTPContext(method, endpoint string) *HTTPContext {
+ return &HTTPContext{
+ Method: method,
+ Endpoint: endpoint,
+ client: &http.Client{},
+ }
+}
+
+// NewBitcoinContext created a new *BitcoinContext
+func NewBitcoinContext() *BitcoinContext {
+ return &BitcoinContext{
+ client: btcClientConn,
+ CompletedTransactions: make([]*bt.Tx, 0),
+ Accounts: make([]BitcoinAccount, 0),
+ }
+}
+
+func NewS3Context(client *minio.Client) *S3Context {
+ return &S3Context{
+ client: client,
+ }
+}
+
+// Context holds all variables and response data for a given scenario
+type Context struct {
+ // ScenarioID the id of the current godog scenario
+ ScenarioID string
+ // TemplateVars a map of variables which are placed into every call to the templater
+ TemplateVars map[string]interface{}
+ // Template the templater for the scenario
+ Template *template.Template
+
+ // HTTP the *HTTPContext used for making HTTP calls
+ HTTP *HTTPContext
+ // GRPC the *GRPCContext used for making GRPC calls
+ GRPC *GRPCContext
+ // BTC the *BitcoinContext used for making BTC requests
+ BTC *BitcoinContext
+ // S3 the *S3Context use for making S3 requests
+ S3 *S3Context
+
+ // Headers a map of key value pairs which are used as headers for every HTTP/GRPC call
+ Headers map[string]string
+ // RequestData the raw data which will be used for the next HTTP/GRPC call
+ RequestData []byte
+ // ResponseData is the raw response data returned from the previous HTTP/GRPC call
+ ResponseData []byte
+}
+
+// HTTPContext stores HTTP specific information for making a HTTP call
+type HTTPContext struct {
+ // Endpoint the endpoint to be hit
+ Endpoint string
+ // Method the HTTP method to use
+ Method string
+ // ResponseCode the response code of the HTTP request
+ ResponseCode int
+
+ client *http.Client
+}
+
+// GRPCContext stores the GRPC specific information for making a GRPC call
+type GRPCContext struct {
+ // Service the service name to be accessed
+ Service string
+ // Method the method name to be called
+ Method string
+ // Proto
+ Proto string
+ // Conn the GRPC connection
+ Conn *grpc.ClientConn
+ // Status the status of the response
+ Status *status.Status
+}
+
+// BitcoinContext stores bitcoin node information used when interfacing
+type BitcoinContext struct {
+ client *bitcoind.Bitcoind
+ // Accounts the list of accounts created during the scenario. Any new accounts are
+ // appended, so it is up to the user to know which account is stored at which index
+ Accounts []BitcoinAccount
+ // CompletedTransactions the list of transactions which have been completed. Any new
+ // transactions are appeneded, so it is up to the user to know which tx is stored at
+ // which index
+ CompletedTransactions []*bt.Tx
+ // WorkingTX the current working transaction. Any tx building steps write to this.
+ // Any tx broadcasting steps send this.
+ WorkingTX WorkingTransaction
+}
+
+// S3Context stores the minio information
+type S3Context struct {
+ client *minio.Client
+}
+
+// WorkingTransaction stores information needed for TX building
+type WorkingTransaction struct {
+ // From the sending BitcoinAcccount
+ From BitcoinAccount
+ // To the sending BitcoinAccount
+ To BitcoinAccount
+ // TX the raw *bt.TX
+ TX *bt.Tx
+}
+
+// BitcoinAccount information regarding a Bitcoin account on the node
+type BitcoinAccount struct {
+ // Alias the internal alias of the account (if exists)
+ Alias string
+ // LockingScript the accounts locking script
+ LockingScript []byte
+ // WIF the accounts *bsvutil.WIF
+ WIF *wif.WIF
+ // Address the accounts address
+ Address string
+}
+
+func splitProto(proto string) (string, string) {
+ pos := strings.LastIndex(proto, "/")
+ if pos > 0 {
+ return proto[:pos], proto[pos+1:]
+ }
+
+ pos = strings.LastIndex(proto, ".")
+ if pos > 0 {
+ return proto[:pos], proto[pos+1:]
+ }
+
+ return "", ""
+}
diff --git a/godog/docker.go b/godog/docker.go
new file mode 100644
index 00000000..8b63f8d4
--- /dev/null
+++ b/godog/docker.go
@@ -0,0 +1,262 @@
+package cgodog
+
+import (
+ "bufio"
+ "bytes"
+ "context"
+ "fmt"
+ "log"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+
+ "bitbucket.stressedsharks.com/plat/common/retry"
+ "github.com/docker/docker/api/types"
+ "github.com/docker/docker/api/types/container"
+ "github.com/docker/docker/api/types/mount"
+ "github.com/docker/docker/api/types/network"
+ "github.com/docker/go-connections/nat"
+ "github.com/pkg/errors"
+ "github.com/segmentio/kafka-go"
+ "gopkg.in/yaml.v2"
+)
+
+var dockerSnapshot = make(map[string]bool)
+
+// Env the environment declaration
+type Env struct {
+ // Real a list of services to be brought up via docker compose [eg, s3]
+ Real []string
+ // Mocks a list of services to be mocked
+ Mocks []string
+}
+
+func (s *Suite) initEnv() {
+ s.takeSnapshot()
+
+ env := s.initDeps()
+
+ // Init test container
+ cont, err := s.dc.ContainerCreate(
+ context.Background(),
+ &container.Config{
+ Image: fmt.Sprintf("local.%s", s.serviceName),
+ Healthcheck: &container.HealthConfig{
+ Test: []string{"NONE"},
+ },
+ ExposedPorts: nat.PortSet{
+ nat.Port(s.servicePort[1:]): {},
+ },
+ Env: append(env, "S3_ENDPOINT=http://s3:9000", "ENV_ENVIRONMENT=local"),
+ },
+ &container.HostConfig{
+ AutoRemove: true,
+ NetworkMode: DockerNetwork,
+ PortBindings: nat.PortMap{
+ nat.Port(s.servicePort[1:]): []nat.PortBinding{{
+ HostPort: fmt.Sprintf("3%s", s.servicePort[1:]),
+ }},
+ },
+ },
+ &network.NetworkingConfig{},
+ nil,
+ fmt.Sprintf("%s-test", s.serviceName),
+ )
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ if err = s.dc.ContainerStart(context.Background(), cont.ID, types.ContainerStartOptions{}); err != nil {
+ log.Fatal(err)
+ }
+}
+
+func (s *Suite) initDeps() []string {
+ f, err := os.Open("env.yml")
+ if err != nil {
+ if os.IsNotExist(err) {
+ return []string{}
+ }
+ log.Fatal(err)
+ }
+
+ if err = yaml.NewDecoder(bufio.NewReader(f)).Decode(&s.env); err != nil {
+ log.Fatal(err)
+ }
+
+ _, err = s.dc.NetworkCreate( // nolint:gosec,errcheck
+ context.Background(),
+ DockerNetwork,
+ types.NetworkCreate{
+ CheckDuplicate: true,
+ },
+ )
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ }
+
+ s.initReal()
+ return s.initMocks()
+}
+
+func (s *Suite) teardownEnv() {
+ cc, err := s.dc.ContainerList(context.Background(), types.ContainerListOptions{})
+ if err != nil {
+ fmt.Println(err)
+ }
+ for _, c := range cc {
+ if _, ok := dockerSnapshot[c.ID]; !ok {
+ if err := s.dc.ContainerKill(context.Background(), c.ID, "SIGKILL"); err != nil {
+ fmt.Println(err)
+ }
+ }
+ }
+}
+
+func (s *Suite) initReal() {
+ if s.env.Real == nil || len(s.env.Real) == 0 {
+ return
+ }
+
+ args := []string{
+ "-f", "../../../bowstave_local_dev/docker-compose.yml",
+ "-f", "../../../bowstave_local_dev/docker-compose.dev.yml",
+ "-f", "../../../bowstave_local_dev/docker-compose.rt.yml",
+ "-f", "../../../bowstave_local_dev/docker-compose.rt.override.yml",
+ }
+
+ if _, err := os.Stat("../../../bowstave_local_dev/docker-compose.dev.override.yml"); err == nil {
+ args = append(args, "-f", "../../../bowstave_local_dev/docker-compose.dev.override.yml")
+ }
+
+ args = append(args, "up", "-d")
+ args = append(args, s.env.Real...)
+
+ var cmd *exec.Cmd
+
+ // Check if "docker compose" is valid, then use it over "docker-compose"
+ if err := exec.Command("docker", "compose").Run(); err != nil {
+ cmd = exec.Command("docker-compose", args...)
+ } else {
+ args = append([]string{"compose"}, args...)
+ cmd = exec.Command("docker", args...)
+ }
+
+ var b bytes.Buffer
+ cmd.Stderr = &b
+ if err := cmd.Run(); err != nil {
+ fmt.Println(b.String())
+ log.Fatal(err)
+ }
+
+ var waitKafka bool
+ for _, svc := range s.env.Real {
+ waitKafka = svc == "kafka"
+ if waitKafka {
+ break
+ }
+ }
+
+ if !waitKafka {
+ return
+ }
+
+ if err := retry.Run(context.Background(), kakfaReady, retry.WithAttempts(5)); err != nil {
+ log.Fatal(errors.Wrap(err, "waiting for kafka timed out"))
+ }
+}
+
+func (s *Suite) initMocks() []string {
+ if s.env.Mocks == nil || len(s.env.Mocks) == 0 {
+ return []string{}
+ }
+
+ protoSource, _ := filepath.Abs("../../../proto")
+ stubSoruce, _ := filepath.Abs("mock")
+
+ svcs := make([]string, 0)
+ protos := make([]string, 0)
+ for _, mock := range s.env.Mocks {
+ svcName := strings.TrimSuffix(strings.ToUpper(mock), "_SERVICE")
+ svcs = append(svcs, fmt.Sprintf("%s_SERVICE_ADDRESS=%s:%s", svcName, "mock-server", "22222"))
+ protos = append(protos, fmt.Sprintf("%s.proto", mock))
+ }
+ cont, err := s.dc.ContainerCreate(
+ context.Background(),
+ &container.Config{
+ Image: "tigh/grpc-mock:latest",
+ ExposedPorts: nat.PortSet{
+ nat.Port("22222"): {},
+ },
+ Entrypoint: []string{
+ "grpc-mock",
+ "-mock-addr=:22222",
+ "-import-path=/proto",
+ "-stub-dir=/stubs",
+ fmt.Sprintf("-proto=%s", strings.Join(protos, ",")),
+ },
+ },
+ &container.HostConfig{
+ AutoRemove: true,
+ NetworkMode: DockerNetwork,
+ PortBindings: nat.PortMap{
+ nat.Port("22222"): []nat.PortBinding{{
+ HostPort: "22222",
+ }},
+ },
+ Mounts: []mount.Mount{{
+ ReadOnly: true,
+ Source: protoSource,
+ Target: "/proto",
+ Type: "bind",
+ }, {
+ ReadOnly: true,
+ Source: stubSoruce,
+ Target: "/stubs",
+ Type: "bind",
+ }},
+ },
+ &network.NetworkingConfig{},
+ nil,
+ "mock-server",
+ )
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ if err := s.dc.ContainerStart(context.Background(), cont.ID, types.ContainerStartOptions{}); err != nil {
+ log.Fatal(err)
+ }
+
+ return svcs
+}
+
+func (s *Suite) takeSnapshot() {
+ cc, err := s.dc.ContainerList(context.Background(), types.ContainerListOptions{})
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ for _, c := range cc {
+ dockerSnapshot[c.ID] = true
+ }
+}
+
+func kakfaReady(context.Context) error {
+ conn, err := kafka.Dial("tcp", "0.0.0.0:9092")
+ if err != nil {
+ return err
+ }
+ defer conn.Close() //nolint:errcheck
+
+ brokers, err := conn.Brokers()
+ if err != nil {
+ return err
+ }
+ if len(brokers) == 0 {
+ return errors.New("kafka not ready")
+ }
+
+ return nil
+}
diff --git a/godog/functions.go b/godog/functions.go
new file mode 100644
index 00000000..3dec090d
--- /dev/null
+++ b/godog/functions.go
@@ -0,0 +1,948 @@
+package cgodog
+
+import (
+ "bytes"
+ "context"
+ "encoding/base64"
+ "encoding/json"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "path"
+ "path/filepath"
+ "reflect"
+ "strconv"
+ "strings"
+ "time"
+
+ "bitbucket.stressedsharks.com/plat/proto"
+ "github.com/cucumber/godog"
+ "github.com/golang/protobuf/jsonpb"
+ "github.com/google/uuid"
+ "github.com/jhump/protoreflect/desc"
+ "github.com/jhump/protoreflect/dynamic"
+ "github.com/jhump/protoreflect/grpcreflect"
+ "github.com/libsv/go-bk/crypto"
+ "github.com/libsv/go-bk/wif"
+ "github.com/libsv/go-bt/v2"
+ "github.com/libsv/go-bt/v2/bscript"
+ "github.com/minio/minio-go/v7"
+ "github.com/oliveagle/jsonpath"
+ "github.com/pkg/errors"
+ "github.com/toorop/go-bitcoind"
+ "github.com/yazgazan/jaydiff/diff"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/keepalive"
+ "google.golang.org/grpc/metadata"
+ reflectpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
+ "google.golang.org/grpc/status"
+)
+
+func IMakeAGRPCRequestTo(ctx *Context) func(string) error {
+ return func(proto string) error {
+ ctx.GRPC = NewGRPCContext(proto, grpcClientConn)
+ return makeGRPCRequest(ctx, "")
+ }
+}
+
+func IMakeAGRPCRequestToWithData(ctx *Context) func(string, string) error {
+ return func(proto, fileName string) error {
+ ctx.GRPC = NewGRPCContext(proto, grpcClientConn)
+ return makeGRPCRequest(ctx, fileName)
+ }
+}
+
+func IMakeAGRPCRequestToOnPortWithData(ctx *Context) func(string, int, string) error {
+ return func(proto string, port int, fileName string) error {
+ conn, err := grpc.Dial(
+ fmt.Sprintf(":%d", port),
+ grpc.WithInsecure(),
+ grpc.WithBlock(),
+ grpc.WithKeepaliveParams(keepalive.ClientParameters{
+ Time: 10 * time.Second,
+ Timeout: 10 * time.Second,
+ }),
+ )
+ if err != nil {
+ return err
+ }
+
+ ctx.GRPC = NewGRPCContext(proto, conn)
+ return makeGRPCRequest(ctx, fileName)
+ }
+}
+
+func IMakeAHTTPRequestTo(ctx *Context, port string) func(string, string) error {
+ return func(method, endpoint string) error {
+ ctx.HTTP = NewHTTPContext(method, endpoint)
+
+ tmpl, err := ctx.Template.Parse(endpoint)
+ if err != nil {
+ return err
+ }
+
+ var out bytes.Buffer
+ if err = tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return err
+ }
+
+ req, err := http.NewRequest(method, fmt.Sprintf("http://0.0.0.0%s%s", port, out.String()), nil) // nolint:noctx
+ if err != nil {
+ return err
+ }
+
+ for k, v := range ctx.Headers {
+ req.Header.Add(k, v)
+ }
+
+ resp, err := ctx.HTTP.client.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close() //nolint:errcheck
+
+ if ctx.ResponseData, err = ioutil.ReadAll(resp.Body); err != nil {
+ return err
+ }
+
+ ctx.HTTP.ResponseCode = resp.StatusCode
+
+ return nil
+ }
+}
+
+func IMakeAHTTPRequestToWithData(ctx *Context, port string) func(string, string, string) error {
+ return func(method, endpoint, fileName string) error {
+ ctx.HTTP = NewHTTPContext(method, endpoint)
+
+ b, err := readFile(ctx, "data", fileName+".json")
+ if err != nil {
+ return err
+ }
+
+ ctx.RequestData = b
+
+ req, err := http.NewRequest(method, fmt.Sprintf("http://0.0.0.0%s%s", port, endpoint), bytes.NewReader(ctx.RequestData)) //nolint:noctx
+ if err != nil {
+ return err
+ }
+
+ req.Header.Add("Content-Type", "application/json")
+ for k, v := range ctx.Headers {
+ req.Header.Add(k, v)
+ }
+
+ resp, err := ctx.HTTP.client.Do(req)
+ if err != nil {
+ return errors.Wrap(err, "error performing request")
+ }
+ defer resp.Body.Close() //nolint:errcheck
+
+ if ctx.ResponseData, err = ioutil.ReadAll(resp.Body); err != nil {
+ if !errors.Is(err, io.EOF) {
+ return errors.Wrap(err, "error decoding response")
+ }
+ }
+
+ ctx.HTTP.ResponseCode = resp.StatusCode
+
+ return nil
+ }
+}
+
+func IUseTheAliases(ctx *Context) func(*godog.Table) error {
+ return func(table *godog.Table) error {
+ conn, err := grpc.Dial(
+ ":9008",
+ grpc.WithInsecure(),
+ grpc.WithBlock(),
+ grpc.WithKeepaliveParams(keepalive.ClientParameters{
+ Time: 10 * time.Second,
+ Timeout: 10 * time.Second,
+ }),
+ )
+ if err != nil {
+ return err
+ }
+
+ for _, row := range table.Rows[1:] {
+ alias := row.Cells[0].Value
+ if err := createAlias(ctx, conn, alias); err != nil {
+ return err
+ }
+ }
+ return nil
+ }
+}
+
+func IUseRandomAliases(ctx *Context) func(int) error {
+ return func(n int) error {
+ conn, err := grpc.Dial(
+ ":9008",
+ grpc.WithInsecure(),
+ grpc.WithBlock(),
+ grpc.WithKeepaliveParams(keepalive.ClientParameters{
+ Time: 10 * time.Second,
+ Timeout: 10 * time.Second,
+ }),
+ )
+ if err != nil {
+ return err
+ }
+
+ for i := 0; i < n; i++ {
+ alias := uuid.NewString()
+ if err := createAlias(ctx, conn, alias); err != nil {
+ return err
+ }
+ }
+ return nil
+ }
+}
+
+func IFundSatoshis(ctx *Context) func(int) error {
+ return func(amount int) error {
+ if err := ISendBtcToWallet(ctx)(0.1, 0); err != nil {
+ return err
+ }
+
+ if err := IStoreTheOfTXForTemplating(ctx)("TxID", len(ctx.BTC.CompletedTransactions)-1, "txid"); err != nil {
+ return err
+ }
+
+ ctx.TemplateVars["amount"] = amount
+
+ if err := IMakeAGRPCRequestToWithData(ctx)("proto.FundingService/AddFund", "add_fund"); err != nil {
+ return err
+ }
+
+ if err := TheGRPCCodeShouldBe(ctx)("OK"); err != nil {
+ return err
+ }
+
+ if err := TheDataShouldMatchJSON(ctx)("add_fund"); err != nil {
+ return err
+ }
+
+ return nil
+ }
+}
+
+func IFundAndSplitBySatoshis(ctx *Context) func(int) error {
+ return func(denomination int) error {
+ if err := ISendBtcToWallet(ctx)(0.5, 0); err != nil {
+ return err
+ }
+
+ if err := IStoreTheOfTXForTemplating(ctx)("TxID", len(ctx.BTC.CompletedTransactions)-1, "txid"); err != nil {
+ return err
+ }
+
+ if err := IStoreTheHexOfTXAsForTemplating(ctx)(len(ctx.BTC.CompletedTransactions)-1, "tx_hex"); err != nil {
+ return err
+ }
+
+ ctx.TemplateVars["denomination"] = denomination
+
+ if err := IMakeAGRPCRequestToWithData(ctx)("proto.FundingService/AddAndSplitFund", "add_and_split_fund_by"); err != nil {
+ return err
+ }
+
+ if err := TheGRPCCodeShouldBe(ctx)("OK"); err != nil {
+ return err
+ }
+
+ return nil
+ }
+}
+
+func createAlias(ctx *Context, conn *grpc.ClientConn, alias string) error {
+ var err error
+
+ tmpl, err := ctx.Template.Parse(alias)
+ if err != nil {
+ return err
+ }
+
+ var out bytes.Buffer
+ if err = tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return err
+ }
+
+ alias = out.String()
+
+ ctx.RequestData, err = json.Marshal(proto.CreateAliasRequest{
+ Alias: alias,
+ })
+ if err != nil {
+ return err
+ }
+
+ ctx.GRPC = NewGRPCContext("proto.CryptoService/CreateAlias", conn)
+ if err = makeGRPCRequest(ctx, ""); err != nil {
+ return err
+ }
+
+ fn := TheGRPCCodeShouldBe(ctx)
+ if err = fn("OK"); err != nil {
+ if err = fn("ALREADY_EXISTS"); err != nil {
+ return err
+ }
+ }
+
+ ctx.RequestData, err = json.Marshal(proto.GetPublicKeyRequest{
+ KeyContext: &proto.KeyContext{
+ Alias: alias,
+ Path: "0",
+ },
+ })
+ if err != nil {
+ return err
+ }
+
+ ctx.GRPC = NewGRPCContext("proto.CryptoService/GetPublicKey", conn)
+ if err = makeGRPCRequest(ctx, ""); err != nil {
+ return err
+ }
+
+ createAliasResp := make(map[string]interface{})
+ if err = json.NewDecoder(bytes.NewBuffer(ctx.ResponseData)).Decode(&createAliasResp); err != nil {
+ return err
+ }
+ pk, err := base64.StdEncoding.DecodeString(createAliasResp["public_key"].(string))
+ if err != nil {
+ return err
+ }
+
+ s, err := bscript.NewP2PKHFromPubKeyBytes(pk)
+ if err != nil {
+ return err
+ }
+
+ ctx.BTC.Accounts = append(ctx.BTC.Accounts, BitcoinAccount{
+ Alias: alias,
+ LockingScript: *s,
+ Address: createAliasResp["address"].(string),
+ })
+
+ return nil
+}
+
+func TheHeaders(ctx *Context) func(*godog.Table) error {
+ return func(table *godog.Table) error {
+ ctx.Headers = make(map[string]string)
+ for _, row := range table.Rows[1:] {
+ val := row.Cells[1].Value
+ tmpl, err := ctx.Template.Parse(val)
+ if err != nil {
+ return err
+ }
+
+ var out bytes.Buffer
+ if err = tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return err
+ }
+ ctx.Headers[strings.ToLower(row.Cells[0].Value)] = out.String()
+ }
+ return nil
+ }
+}
+
+func IDeleteTheHeaders(ctx *Context) func(*godog.Table) error {
+ return func(table *godog.Table) error {
+ for _, row := range table.Rows[1:] {
+ raw := row.Cells[0].Value
+ tmpl, err := ctx.Template.Parse(raw)
+ if err != nil {
+ return err
+ }
+
+ var out bytes.Buffer
+ if err = tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return err
+ }
+
+ delete(ctx.Headers, out.String())
+ }
+ return nil
+ }
+}
+
+func TheTemplateValues(ctx *Context) func(*godog.Table) error {
+ return func(table *godog.Table) error {
+ for _, row := range table.Rows[1:] {
+ ctx.TemplateVars[row.Cells[0].Value] = row.Cells[1].Value
+ }
+ return nil
+ }
+}
+
+func TheGRPCCodeShouldBe(ctx *Context) func(string) error {
+ return func(respCode string) error {
+ var exp codes.Code
+ if err := exp.UnmarshalJSON([]byte(fmt.Sprintf(`"%s"`, respCode))); err != nil {
+ return err
+ }
+
+ if exp != ctx.GRPC.Status.Code() {
+ return fmt.Errorf("expected %s, got %s: %s", exp, ctx.GRPC.Status.Code(), string(ctx.ResponseData))
+ }
+ return nil
+ }
+}
+
+func TheHTTPResponseCodeShouldBe(ctx *Context) func(int) error {
+ return func(respCode int) error {
+ if respCode != ctx.HTTP.ResponseCode {
+ return fmt.Errorf("expected %d, got %d", respCode, ctx.HTTP.ResponseCode)
+ }
+
+ return nil
+ }
+}
+
+func TheDataShouldMatchJSON(ctx *Context) func(string) error {
+ return func(fileName string) error {
+ var actual, exp interface{}
+
+ b, err := readFile(ctx, "responses", fileName+".json")
+ if err != nil {
+ return errors.Wrapf(err, "failed to read file %s.json", fileName)
+ }
+ if err := json.Unmarshal(b, &exp); err != nil {
+ return errors.Wrap(err, "failed to unmarhsal expected data")
+ }
+
+ if len(ctx.ResponseData) == 0 {
+ ctx.ResponseData = []byte("{}")
+ }
+ if err := json.Unmarshal(ctx.ResponseData, &actual); err != nil {
+ return errors.Wrap(err, "failed to unmarshal response data")
+ }
+
+ return checkDiff(actual, exp)
+ }
+}
+
+func IStoreFromTheResponseForTemplating(ctx *Context) func(*godog.Table) error {
+ return func(table *godog.Table) error {
+ for _, v := range table.Rows[1:] {
+ key := v.Cells[0].Value
+ var jsonData interface{}
+ if err := json.Unmarshal(ctx.ResponseData, &jsonData); err != nil {
+ return err
+ }
+ val, err := jsonpath.JsonPathLookup(jsonData, "$"+key)
+ if err != nil {
+ return errors.Wrapf(err, "couldn't find key %s in response %s", key, string(ctx.ResponseData))
+ }
+
+ ctx.TemplateVars[v.Cells[1].Value] = val
+ }
+ return nil
+ }
+}
+
+func ThereAreBitcoinWallets(ctx *Context) func(string, int) error {
+ return func(_ string, n int) error {
+ for i := 0; i < n; i++ {
+ addr, err := ctx.BTC.client.GetNewAddress()
+ if err != nil {
+ return err
+ }
+
+ privkey, err := ctx.BTC.client.DumpPrivKey(addr)
+ if err != nil {
+ return err
+ }
+
+ wif, err := wif.DecodeWIF(privkey)
+ if err != nil {
+ return err
+ }
+
+ ctx.BTC.Accounts = append(ctx.BTC.Accounts, BitcoinAccount{
+ Address: addr,
+ WIF: wif,
+ })
+ }
+ return nil
+ }
+}
+
+func ISendBtcToAccounts(ctx *Context) func(*godog.Table) error {
+ return func(table *godog.Table) error {
+ bsvMap := make(map[string]float64)
+ accountMap := make(map[string]BitcoinAccount)
+ for _, account := range ctx.BTC.Accounts {
+ if account.Alias != "" {
+ accountMap[account.Alias] = account
+ }
+ accountMap[account.Address] = account
+ }
+
+ for _, row := range table.Rows[1:] {
+ v, err := strconv.ParseFloat(row.Cells[1].Value, 64)
+ if err != nil {
+ return err
+ }
+ account := accountMap[row.Cells[0].Value]
+ bsvMap[account.Address] = v
+ }
+ txID, err := ctx.BTC.client.SendMany("", bsvMap, 0, "")
+ if err != nil {
+ return err
+ }
+
+ rawTx, err := ctx.BTC.client.GetRawTransaction(txID, false)
+ if err != nil {
+ return err
+ }
+
+ tx, err := bt.NewTxFromString(rawTx.(string))
+ if err != nil {
+ return err
+ }
+
+ ctx.BTC.CompletedTransactions = append(ctx.BTC.CompletedTransactions, tx)
+ return nil
+ }
+}
+
+func ISendBtcToWallet(ctx *Context) func(float64, int) error {
+ return func(amount float64, to int) error {
+ txID, err := ctx.BTC.client.SendToAddress(
+ ctx.BTC.Accounts[to].Address, amount, "", "",
+ )
+ if err != nil {
+ return err
+ }
+
+ rawTx, err := ctx.BTC.client.GetRawTransaction(txID, false)
+ if err != nil {
+ return err
+ }
+
+ tx, err := bt.NewTxFromString(rawTx.(string))
+ if err != nil {
+ return err
+ }
+
+ ctx.BTC.CompletedTransactions = append(ctx.BTC.CompletedTransactions, tx)
+ return nil
+ }
+}
+
+func WalletSendsBtcToWallet(ctx *Context) func(int, float64, int) error {
+ return func(from int, amount float64, to int) error {
+ txID, err := ctx.BTC.client.SendFrom(
+ ctx.BTC.Accounts[from].Address,
+ ctx.BTC.Accounts[to].Address,
+ amount,
+ 0,
+ "",
+ "",
+ )
+ if err != nil {
+ return err
+ }
+
+ rawTx, err := ctx.BTC.client.GetRawTransaction(txID, false)
+ if err != nil {
+ return err
+ }
+
+ tx, err := bt.NewTxFromString(rawTx.(bitcoind.RawTransaction).Hex)
+ if err != nil {
+ return err
+ }
+
+ ctx.BTC.CompletedTransactions = append(ctx.BTC.CompletedTransactions, tx)
+ return nil
+ }
+}
+
+func IStoreTheOfWalletForTemplating(ctx *Context) func(string, int, string) error {
+ return func(f string, i int, k string) error {
+ acc := ctx.BTC.Accounts[i]
+ ctx.TemplateVars[k] = reflect.ValueOf(acc).FieldByName(f).Interface()
+ return nil
+ }
+}
+
+func IStoreTheHexOfTXAsForTemplating(ctx *Context) func(int, string) error {
+ return func(i int, k string) error {
+ ctx.TemplateVars[k] = ctx.BTC.CompletedTransactions[i].String()
+ return nil
+ }
+}
+
+func IStoreTheOfTXForTemplating(ctx *Context) func(string, int, string) error {
+ return func(f string, i int, k string) error {
+ trans := ctx.BTC.CompletedTransactions[i]
+ fn := reflect.ValueOf(trans).MethodByName(f)
+ ctx.TemplateVars[k] = fn.Call([]reflect.Value{})[0].Interface()
+ return nil
+ }
+}
+
+func IStoreTheOfTheWorkingTXForTemplating(ctx *Context) func(string, string) error {
+ return func(f string, k string) error {
+ trans := ctx.BTC.WorkingTX.TX
+ fn := reflect.ValueOf(trans).MethodByName(f)
+ ctx.TemplateVars[k] = fn.Call([]reflect.Value{})[0].Interface()
+ return nil
+ }
+}
+
+func IUseTheOutputsOfTransactionAsInputs(ctx *Context) func(int) error {
+ return func(n int) error {
+ baseTx := ctx.BTC.CompletedTransactions[n]
+ fromPKHash160 := crypto.Hash160(ctx.BTC.WorkingTX.From.WIF.SerialisePubKey())
+
+ var totalSatoshis uint64
+
+ for i, utxo := range baseTx.Outputs {
+ b, err := utxo.LockingScript.PublicKeyHash()
+ if err != nil {
+ return err
+ }
+
+ if !bytes.Equal(b, fromPKHash160) {
+ continue
+ }
+
+ if err := ctx.BTC.WorkingTX.TX.From(baseTx.TxID(),
+ uint32(i), utxo.LockingScript.String(), utxo.Satoshis); err != nil {
+ return err
+ }
+
+ totalSatoshis = totalSatoshis + utxo.Satoshis
+ }
+
+ txAmount := totalSatoshis - uint64(10000)
+ if err := ctx.BTC.WorkingTX.TX.PayToAddress(ctx.BTC.WorkingTX.To.Address, txAmount); err != nil {
+ return err
+ }
+
+ return nil
+ }
+}
+
+func TheTransactionIsSignedByAccount(ctx *Context) func(int) error {
+ return func(n int) error {
+ if _, err := ctx.BTC.WorkingTX.TX.SignAuto(context.Background(), &bt.LocalSigner{
+ PrivateKey: ctx.BTC.Accounts[n].WIF.PrivKey,
+ }); err != nil {
+ return err
+ }
+
+ ctx.TemplateVars["transaction"] = ctx.BTC.WorkingTX.TX.Bytes()
+ return nil
+ }
+}
+
+func IPrepareATranscationFromWalletToWallet(ctx *Context) func(int, int) error {
+ return func(from, to int) error {
+ ctx.BTC.WorkingTX = WorkingTransaction{
+ From: ctx.BTC.Accounts[from],
+ To: ctx.BTC.Accounts[to],
+ TX: bt.NewTx(),
+ }
+ return nil
+ }
+}
+
+func IPrepareATransaction(ctx *Context) func() error {
+ return func() error {
+ ctx.BTC.WorkingTX = WorkingTransaction{
+ TX: bt.NewTx(),
+ }
+ return nil
+ }
+}
+
+func IAddRandomDataToTheTransaction(ctx *Context) func() error {
+ return func() error {
+ var data [][]byte
+ for i := 0; i < 10; i++ {
+ data = append(data, []byte(uuid.NewString()))
+ }
+ return ctx.BTC.WorkingTX.TX.AddOpReturnPartsOutput(data)
+ }
+}
+
+func TheDatabaseIsSeededWith(ctx *Context) func(string) error {
+ return func(fileName string) error {
+ b, err := readFile(ctx, "sql", fileName+".sql")
+ if err != nil {
+ return err
+ }
+
+ _, err = dbClientConn.Exec(string(b))
+ return err
+ }
+}
+
+func ACleanAccountDirectoryInS3(ctx *Context) func() error {
+ return func() error {
+ path := path.Join("accounts", ctx.ScenarioID)
+
+ ch := ctx.S3.client.ListObjects(context.Background(), "ps-bucket", minio.ListObjectsOptions{
+ Prefix: path,
+ Recursive: true,
+ })
+
+ errChan := ctx.S3.client.RemoveObjects(context.Background(), "ps-bucket", ch, minio.RemoveObjectsOptions{})
+
+ for err := range errChan {
+ if err.Err != nil {
+ return err.Err
+ }
+ }
+
+ return nil
+ }
+}
+
+func IDeleteFromS3(ctx *Context) func(*godog.Table) error {
+ return func(table *godog.Table) error {
+ for _, row := range table.Rows[1:] {
+ file := row.Cells[0].Value
+ tmpl, err := ctx.Template.Parse(file)
+ if err != nil {
+ return err
+ }
+
+ var out bytes.Buffer
+ if err = tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return err
+ }
+
+ ch := ctx.S3.client.ListObjects(context.Background(), "ps-bucket", minio.ListObjectsOptions{
+ Prefix: out.String(),
+ Recursive: true,
+ })
+
+ errChan := ctx.S3.client.RemoveObjects(
+ context.Background(),
+ "ps-bucket",
+ ch,
+ minio.RemoveObjectsOptions{},
+ )
+
+ for err := range errChan {
+ if err.Err != nil {
+ return err.Err
+ }
+ }
+ }
+
+ return nil
+ }
+}
+
+func TheFileExistsInS3(ctx *Context) func(string) error {
+ return func(file string) error {
+ tmpl, err := ctx.Template.Parse(file)
+ if err != nil {
+ return err
+ }
+
+ var out bytes.Buffer
+ if err = tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return err
+ }
+
+ _, err = ctx.S3.client.StatObject(
+ context.Background(),
+ "ps-bucket",
+ out.String(),
+ minio.StatObjectOptions{},
+ )
+ if err != nil {
+ return err
+ }
+
+ return nil
+ }
+}
+
+func TheFileInS3ContainsTheContent(ctx *Context) func(string, string) error {
+ return func(s3Path string, contentPath string) error {
+ tmpl, err := ctx.Template.Parse(s3Path)
+ if err != nil {
+ return err
+ }
+
+ var out bytes.Buffer
+ if err = tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return err
+ }
+
+ obj, err := ctx.S3.client.GetObject(context.Background(), "ps-bucket", out.String(), minio.GetObjectOptions{})
+ if err != nil {
+ return err
+ }
+
+ stat, err := obj.Stat()
+ if err != nil {
+ return err
+ }
+
+ var content []byte = make([]byte, int(stat.Size))
+ if _, err = obj.Read(content); err != nil {
+ if !errors.Is(err, io.EOF) {
+ return err
+ }
+ }
+
+ exp, err := readFile(ctx, "s3", contentPath)
+ if err != nil {
+ return err
+ }
+
+ // Strip ending newline
+ if exp[len(exp)-1] == 10 {
+ exp = exp[:len(exp)-1]
+ }
+
+ return checkDiff(content, exp)
+ }
+}
+
+func IWaitForSeconds(ctx *Context) func(int) error {
+ return func(n int) error {
+ time.Sleep(time.Duration(n) * time.Second)
+ return nil
+ }
+}
+
+func readFile(ctx *Context, dir, fileName string) ([]byte, error) {
+ if dir == "" || fileName == "" {
+ return []byte{}, nil
+ }
+
+ b, err := ioutil.ReadFile(filepath.Clean(path.Join(dir, fileName)))
+ if err != nil {
+ return nil, err
+ }
+
+ tmpl, err := ctx.Template.Parse(string(b))
+ if err != nil {
+ return nil, err
+ }
+
+ var out bytes.Buffer
+ if err := tmpl.Execute(&out, ctx.TemplateVars); err != nil {
+ return nil, err
+ }
+
+ return out.Bytes(), nil
+}
+
+func makeGRPCRequest(ctx *Context, fileName string) error {
+ ctx.ResponseData = make([]byte, 0)
+ if fileName != "" {
+ b, err := readFile(ctx, "data", fileName+".json")
+ if err != nil {
+ return err
+ }
+ ctx.RequestData = b
+ }
+
+ f, err := grpcreflect.NewClient(
+ context.Background(),
+ reflectpb.NewServerReflectionClient(ctx.GRPC.Conn),
+ ).FileContainingSymbol(ctx.GRPC.Service)
+ if err != nil {
+ return err
+ }
+
+ md := make(metadata.MD)
+ for k, v := range ctx.Headers {
+ md[k] = []string{v}
+ }
+
+ sd := f.FindSymbol(ctx.GRPC.Service).(*desc.ServiceDescriptor)
+ mthd := sd.FindMethodByName(ctx.GRPC.Method)
+
+ ext := dynamic.NewExtensionRegistryWithDefaults()
+ ext.AddExtensionsFromFileRecursively(f)
+
+ messageFactory := dynamic.NewMessageFactoryWithExtensionRegistry(ext)
+ req := messageFactory.NewMessage(mthd.GetInputType())
+ resp := messageFactory.NewMessage(mthd.GetOutputType())
+
+ var rawJSON json.RawMessage
+ if err = json.NewDecoder(bytes.NewBuffer(ctx.RequestData)).Decode(&rawJSON); err != nil {
+ return err
+ }
+ if err = jsonpb.Unmarshal(bytes.NewBuffer(rawJSON), req); err != nil {
+ return err
+ }
+
+ var respHeaders, respTrailers metadata.MD
+ err = ctx.GRPC.Conn.Invoke(metadata.NewOutgoingContext(context.Background(), md),
+ ctx.GRPC.Proto,
+ req,
+ resp,
+ grpc.Trailer(&respTrailers),
+ grpc.Header(&respHeaders),
+ )
+ if err != nil {
+ st, ok := status.FromError(err)
+ if !ok {
+ return err
+ }
+ ctx.GRPC.Status = st
+ } else {
+ ctx.GRPC.Status = status.New(codes.OK, "")
+ }
+
+ if ctx.GRPC.Status.Code() != codes.OK {
+ errorResponse := map[string]interface{}{
+ "error": ctx.GRPC.Status.Message(),
+ }
+ if ctx.ResponseData, err = json.Marshal(errorResponse); err != nil {
+ return err
+ }
+ return nil
+ }
+
+ m := jsonpb.Marshaler{
+ OrigName: true,
+ }
+ respStr, err := m.MarshalToString(resp)
+ if err != nil {
+ return err
+ }
+
+ if ctx.ResponseData, err = ioutil.ReadAll(bytes.NewBufferString(respStr)); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func checkDiff(l, r interface{}) error {
+ d, err := diff.Diff(l, r)
+ if err != nil {
+ return err
+ }
+
+ if d.Diff() == diff.Identical {
+ return nil
+ }
+
+ report := d.StringIndent("", "", diff.Output{
+ Indent: " ",
+ ShowTypes: true,
+ JSON: true,
+ JSONValues: true,
+ })
+
+ return fmt.Errorf(report)
+}
diff --git a/godog/godog.go b/godog/godog.go
new file mode 100644
index 00000000..ed4b7629
--- /dev/null
+++ b/godog/godog.go
@@ -0,0 +1,340 @@
+package cgodog
+
+import (
+ "bytes"
+ "database/sql"
+ "fmt"
+ "log"
+ "net/http"
+ "os"
+ "time"
+
+ "github.com/cucumber/godog"
+ "github.com/cucumber/godog/colors" //nolint:misspell
+ "github.com/docker/docker/client"
+ "github.com/minio/minio-go/v7"
+ "github.com/minio/minio-go/v7/pkg/credentials"
+ flag "github.com/spf13/pflag"
+ "github.com/toorop/go-bitcoind"
+
+ _ "github.com/lib/pq" // database driver
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/keepalive"
+)
+
+// GodogOption a flag for determining if an option has been set
+type GodogOption int
+
+const (
+ // DockerNetwork the name of the docker network
+ DockerNetwork = "platform-services-network"
+
+ // RandomEnabled forces the test to to run in random order, ignoring the --godog.random flag
+ RandomEnabled GodogOption = 1
+ // RandomDisabled forces the test to to run in senquential order, ignoring the --godog.random flag
+ RandomDisabled GodogOption = 2
+)
+
+var godogOpts = godog.Options{
+ Output: colors.Colored(os.Stdout),
+ Format: "progress",
+ Paths: []string{"features"},
+ Strict: true,
+}
+
+func init() {
+ godog.BindCommandLineFlags("godog.", &godogOpts)
+}
+
+var (
+ grpcClientConn *grpc.ClientConn
+ btcClientConn *bitcoind.Bitcoind
+ dbClientConn *sql.DB
+)
+
+// Suite the test suite to be ran
+type Suite struct {
+ serviceName string
+ servicePort string
+ btcInit bool
+ s3Init bool
+
+ dbCfg *DatabaseConfig
+ DB *sql.DB
+
+ ts godog.TestSuite
+ tsInit func(*godog.TestSuiteContext)
+ scInit func(*godog.ScenarioContext, *Context)
+
+ dc *client.Client
+
+ env Env
+}
+
+// Options config options for the test suite
+type Options struct {
+ // ServiceName the name of the service being tested
+ ServiceName string
+ // ServicePort the port for the service to be ran on
+ ServicePort string
+ // InitBitcoinBackend if true a bitcoin client will be created
+ InitBitcoinBackend bool
+ // InitS3 if true a minio client will be created
+ InitS3 bool
+
+ // ConcurrencyOverride if supplied, overrides the --godog.concurrency command line flag
+ ConcurrencyOverride int
+
+ // RandomOverride if supplied, overrides the --godog.random command line flag
+ RandomOverride GodogOption
+
+ // DatabaseConfig the config for the database. If provided a psql client will
+ // be created
+ DatabaseConfig *DatabaseConfig
+
+ // TestSuiteInitializer an optional handler func for adding performing service specific
+ // prep work.
+ //
+ // Any BeforeSuite calls defined here are performed after services have been initialised
+ // Any AfterSuite calls defined here are performed before services have been destroyed
+ TestSuiteInitializer func(*godog.TestSuiteContext)
+
+ // ScenarioInitializer an optional handler func for adding performing service specific
+ // prep work for scenarios.
+ ScenarioInitializer func(*godog.ScenarioContext, *Context)
+}
+
+// DatabaseConfig the config for the local database
+type DatabaseConfig struct {
+ // Host the host name
+ Host string
+ // Port the port
+ Port string
+ // Username the authenticating username
+ Username string
+ // Password the authenticating password
+ Password string
+ // DatabaseName the name of the database
+ DatabaseName string
+}
+
+// NewSuite created and returns a new *Suite based on the options provided
+func NewSuite(opts Options) *Suite {
+ flag.Parse()
+ godogOpts.Paths = flag.Args()
+
+ s := &Suite{
+ serviceName: opts.ServiceName,
+ servicePort: opts.ServicePort,
+ btcInit: opts.InitBitcoinBackend,
+ s3Init: opts.InitS3,
+
+ dbCfg: opts.DatabaseConfig,
+
+ tsInit: opts.TestSuiteInitializer,
+ scInit: opts.ScenarioInitializer,
+ }
+
+ if opts.ConcurrencyOverride > 0 {
+ godogOpts.Concurrency = opts.ConcurrencyOverride
+ }
+ if opts.RandomOverride > 0 {
+ godogOpts.Randomize = int64(opts.RandomOverride) - 2
+ }
+
+ ts := godog.TestSuite{
+ Name: opts.ServiceName,
+ TestSuiteInitializer: s.initTestSuite,
+ ScenarioInitializer: s.initScenario,
+ Options: &godogOpts,
+ }
+
+ s.ts = ts
+
+ cli, err := client.NewClientWithOpts(client.WithAPIVersionNegotiation())
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ s.dc = cli
+ return s
+}
+
+// Run runs the test suite
+func (s *Suite) Run() int {
+ return s.ts.Run()
+}
+
+func (s *Suite) initTestSuite(ctx *godog.TestSuiteContext) {
+ ctx.BeforeSuite(func() {
+ s.initEnv()
+ var err error
+ if s.serviceName != "sars" {
+ grpcClientConn, err = grpc.Dial(
+ fmt.Sprintf(":3%s", s.servicePort[1:]),
+ grpc.WithInsecure(),
+ grpc.WithBlock(),
+ grpc.WithKeepaliveParams(keepalive.ClientParameters{
+ Time: 10 * time.Second,
+ Timeout: 10 * time.Second,
+ }),
+ )
+ if err != nil {
+ log.Fatal(err)
+ }
+ }
+
+ if s.btcInit {
+ btcClientConn, err = bitcoind.New(
+ "localhost", 18332, "bitcoin", "bitcoin", false,
+ )
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ var req *http.Request
+ req, err = http.NewRequest( //nolint:noctx
+ "POST",
+ "http://127.0.0.1:18332/",
+ bytes.NewBuffer(
+ []byte(`{"id": "godog-testsuite", "jsonrpc": "1.0", "method": "generate", "params":[101]}`),
+ ),
+ )
+ if err != nil {
+ log.Fatal(err)
+ }
+ req.SetBasicAuth("bitcoin", "bitcoin")
+ req.Header.Add("Content-Type", "text/plain")
+
+ var resp *http.Response
+ resp, err = http.DefaultClient.Do(req)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer resp.Body.Close() //nolint:errcheck
+ }
+
+ if s.dbCfg != nil {
+ if dbClientConn, err = sql.Open(
+ "postgres",
+ fmt.Sprintf(
+ "user=%s password=%s dbname=%s sslmode=disable host=%s port=%s",
+ s.dbCfg.Username, s.dbCfg.Password, s.dbCfg.DatabaseName, s.dbCfg.Host, s.dbCfg.Port,
+ ),
+ ); err != nil {
+ log.Fatal(err)
+ }
+
+ s.DB = dbClientConn
+ }
+ })
+
+ if s.tsInit != nil {
+ s.tsInit(ctx)
+ }
+
+ // Allow any user `AfterSuite` to be loaded in before tearing down the environment
+ // incase the user wants to do perform some cleanup operations.
+ ctx.AfterSuite(func() {
+ if grpcClientConn != nil {
+ if err := grpcClientConn.Close(); err != nil {
+ fmt.Println(err)
+ }
+ }
+ if dbClientConn != nil {
+ if err := dbClientConn.Close(); err != nil {
+ fmt.Println(err)
+ }
+ }
+ s.teardownEnv()
+ })
+}
+
+func (s *Suite) initScenario(ctx *godog.ScenarioContext) {
+ testCtx := NewContext()
+ ctx.BeforeScenario(func(sn *godog.Scenario) {
+
+ testCtx.ScenarioID = sn.GetId()
+ testCtx.TemplateVars["godog_scenario_id"] = sn.GetId()
+
+ testCtx.AttachTemplater(sn.GetId())
+
+ if s.s3Init {
+ minioClient, err := minio.New("0.0.0.0:9000", &minio.Options{
+ Creds: credentials.NewStaticV4("admin", "bsvisking", ""),
+ Secure: false,
+ })
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ testCtx.S3 = NewS3Context(minioClient)
+ }
+
+ })
+ ctx.BeforeStep(func(st *godog.Step) {
+ // Our stuff
+ })
+
+ if s.scInit != nil {
+ s.scInit(ctx, testCtx)
+ }
+
+ ctx.AfterStep(func(st *godog.Step, err error) {
+ // Our stuff
+ })
+ ctx.AfterScenario(func(sc *godog.Scenario, err error) {
+ // Our stuff
+ })
+
+ // GRPC
+ ctx.Step(`^I make a GRPC request to "([^"]*)"$`, IMakeAGRPCRequestTo(testCtx))
+ ctx.Step(`^I make a GRPC request to "([^"]*)" with JSON "([^"]*)"$`, IMakeAGRPCRequestToWithData(testCtx))
+ ctx.Step(`^I make a GRPC request to "([^"]*)" on port ([0-9]+) with JSON "([^"]*)"$`, IMakeAGRPCRequestToOnPortWithData(testCtx))
+ ctx.Step(`^the GRPC code should be (\w*)$`, TheGRPCCodeShouldBe(testCtx))
+
+ // HTTP
+ ctx.Step(`^I make a (GET|POST|PATCH|DELETE) request to "([^"]*)"$`, IMakeAHTTPRequestTo(testCtx, fmt.Sprintf(":3%s", s.servicePort[1:])))
+ ctx.Step(`^I make a (GET|POST|PATCH|DELETE) request to "([^"]*)" with JSON "([^"]*)"$`, IMakeAHTTPRequestToWithData(testCtx, fmt.Sprintf(":3%s", s.servicePort[1:])))
+ ctx.Step(`^the HTTP response code should be (\d*)$`, TheHTTPResponseCodeShouldBe(testCtx))
+
+ // Platform
+ ctx.Step(`^I use the aliases:$`, IUseTheAliases(testCtx))
+ ctx.Step(`^I use ([0-9]+) random alias(es)?$`, IUseRandomAliases(testCtx))
+ ctx.Step(`^I fund (\d+) satoshis$`, IFundSatoshis(testCtx))
+ ctx.Step(`^I fund and split by (\d+) satoshis$`, IFundAndSplitBySatoshis(testCtx))
+
+ // Bitcoin
+ ctx.Step(`^there (are|is) ([0-9]+) bitcoin account(s)?$`, ThereAreBitcoinWallets(testCtx))
+ ctx.Step(`^I send ([0-9.]+) BTC to account ([0-9]+)$`, ISendBtcToWallet(testCtx))
+ ctx.Step(`^I send BTC to accounts:$`, ISendBtcToAccounts(testCtx))
+ ctx.Step(`^account ([0-9]+) sends ([0-9.]+) BTC to account ([0-9]+)$`, WalletSendsBtcToWallet(testCtx))
+ ctx.Step(`^I store the "([^"]*)" of account (\d+) as "([^"]+)" for templating$`, IStoreTheOfWalletForTemplating(testCtx))
+
+ // Tx
+ ctx.Step(`^I prepare a transaction$`, IPrepareATransaction(testCtx))
+ ctx.Step(`^I prepare a transaction from account ([0-9]+) to account ([0-9]+) for templating$`, IPrepareATranscationFromWalletToWallet(testCtx))
+ ctx.Step(`^I add random data to the transaction$`, IAddRandomDataToTheTransaction(testCtx))
+ ctx.Step(`^I use the outputs of transaction ([0-9]+) as inputs$`, IUseTheOutputsOfTransactionAsInputs(testCtx))
+ ctx.Step(`^the transaction is signed by account ([0-9]+)$`, TheTransactionIsSignedByAccount(testCtx))
+ ctx.Step(`^I store the hex of tx ([0-9]+) as "([^"]+)" for templating$`, IStoreTheHexOfTXAsForTemplating(testCtx))
+ ctx.Step(`^I store the "([^"]+)" of tx ([0-9]+) as "([^"]+)" for templating$`, IStoreTheOfTXForTemplating(testCtx))
+ ctx.Step(`^I store the "([^"]+)" of the working tx as "([^"]+)" for templating$`, IStoreTheOfTheWorkingTXForTemplating(testCtx))
+
+ // Postgresql
+ ctx.Step(`^the database is seeded with "([^"]*)"$`, TheDatabaseIsSeededWith(testCtx))
+
+ // Minio
+ ctx.Step(`^I delete from s3:$`, IDeleteFromS3(testCtx))
+ ctx.Step(`^a clean account directory in s3$`, ACleanAccountDirectoryInS3(testCtx))
+ ctx.Step(`^the file "([^"]+)" should exist in s3$`, TheFileExistsInS3(testCtx))
+ ctx.Step(`^the file "([^"]+)" in s3 contains the content of "([^"]+)"$`, TheFileInS3ContainsTheContent(testCtx))
+
+ // General
+ ctx.Step(`^the headers:$`, TheHeaders(testCtx))
+ ctx.Step(`^I delete the headers:$`, IDeleteTheHeaders(testCtx))
+ ctx.Step(`^the template values:$`, TheTemplateValues(testCtx))
+ ctx.Step(`^I store from the response for templating:$`, IStoreFromTheResponseForTemplating(testCtx))
+ ctx.Step(`^the data should match JSON "([^"]*)"$`, TheDataShouldMatchJSON(testCtx))
+ ctx.Step(`^I wait for (\d+) second(s)?$`, IWaitForSeconds(testCtx))
+}
diff --git a/godog/template.go b/godog/template.go
new file mode 100644
index 00000000..a7182d82
--- /dev/null
+++ b/godog/template.go
@@ -0,0 +1,38 @@
+package cgodog
+
+import (
+ "encoding/base64"
+ "fmt"
+ "strconv"
+)
+
+func base64Encode(i interface{}) (string, error) {
+ s := fmt.Sprintf("%s", i)
+ return base64.StdEncoding.EncodeToString([]byte(s)), nil
+}
+
+func subtract(a, b interface{}) (string, error) {
+ l, err := strconv.ParseInt(fmt.Sprintf("%v", a), 10, 64)
+ if err != nil {
+ return "", err
+ }
+
+ r, err := strconv.ParseInt(fmt.Sprintf("%v", b), 10, 64)
+ if err != nil {
+ return "", err
+ }
+
+ return fmt.Sprintf("%d", l-r), nil
+}
+
+func workingTxHex(ctx *Context) func() (string, error) {
+ return func() (string, error) {
+ return ctx.BTC.WorkingTX.TX.String(), nil
+ }
+}
+
+func workingTxBytes(ctx *Context) func() (string, error) {
+ return func() (string, error) {
+ return string(ctx.BTC.WorkingTX.TX.Bytes()), nil
+ }
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/common/retry/retry.go b/vendor/bitbucket.stressedsharks.com/plat/common/retry/retry.go
new file mode 100644
index 00000000..6184cbea
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/common/retry/retry.go
@@ -0,0 +1,108 @@
+// Package retry defines a Run method in which you can execute a function n number of times until it either
+// successfully completes, or hits max attempts and returns an error.
+//
+// It supports RetryOpts in which you can override default behaviours by supplying them at run time as shown
+// Run(ctx, myFunc, WithBackOff(time.Minute * 2), WithAttempts(2), WithoutExponentialBackoff())
+//
+// To implement a RetryFunc is very simple, just create a function that either natches the signature or returns a RetryFunc:
+// setupFunc := func(ctx context.Context) error {
+// logger.Info("attempting to setup thing")
+// t, err := thing.Setup()
+// if err != nil {
+// logger.Error("failed to setup thing, retrying")
+// return err
+// }
+// logger.Info("thing setup successfully")
+// return nil
+// }
+//
+// This can then be passed to the Run func as shown,using default args and in a go routine so it isn't blocking:
+// go func() {
+// if err := Retry(context.Background(), setupFunc); err != nil {
+// logger.Error("failed to start thing")
+// }
+// }()
+package retry
+
+import (
+ "context"
+ "time"
+)
+
+// RetryerFunc defines a function that can be retried n number of times.
+// The retryer will run the RetryFunc iteratively until it hits the max attempts or
+// it completes without error.
+type RetryerFunc func(ctx context.Context) error
+
+// RetryerOptFunc can be implemented to override default retry options.
+type RetryerOptFunc func(opt *retryOptions)
+
+// WithBackOff can be supplied when running the retry function to change
+// the default wait time of 10 seconds between retries.
+func WithBackOff(backoff time.Duration) RetryerOptFunc {
+ return func(opt *retryOptions) {
+ opt.backoff = backoff
+ }
+}
+
+// WithExponentialBackoff will run the retry function by
+// exponentially increasing the backoff.
+//
+// If this method is not supplied the retryer will run in default mode where
+// it waits for the backoff time to elapse before retrying.
+// Given a backoff of 10 seconds, in exponential backoff mode, the first time will be 10 seconds,
+// 2nd time will be 20 seconds, 3rd will be 60 seconds etc. It will run with
+// backoff = backoff * attemptNumber.
+func WithExponentialBackoff() RetryerOptFunc {
+ return func(opt *retryOptions) {
+ opt.exponentialBackoff = true
+ }
+}
+
+// WithAttempts will override the default attempts of 3 with the
+// value of attempts supplied.
+func WithAttempts(attempts int) RetryerOptFunc {
+ return func(opt *retryOptions) {
+ opt.maxAttempts = attempts
+ }
+}
+
+type retryOptions struct {
+ backoff time.Duration
+ exponentialBackoff bool
+ maxAttempts int
+}
+
+// Run will execute the function fn with a default of 3 attempts using an exponential backoff
+// with a default backoff time of 10 seconds between attempts. the 2nd and 3rd attempts will
+// wait backoff time * attempt number.
+// These defaults can be overridden by passing one or more RetryOptFuncs such as WithAttempts.
+// If the result of the run has been a success, no error will be returned.
+// If after n attempts the RetryFunc still returns an error, it will be returned.
+// Its recommended to run this in a go routine, though not essential as it depends on use case.
+func Run(ctx context.Context, fn RetryerFunc, opts ...RetryerOptFunc) error {
+ retryOpts := &retryOptions{
+ backoff: time.Second * 10,
+ maxAttempts: 3,
+ exponentialBackoff: false,
+ }
+ // apply any override options
+ for _, opt := range opts {
+ opt(retryOpts)
+ }
+ var err error
+ backoff := retryOpts.backoff
+ for i := 0; i < retryOpts.maxAttempts; i++ {
+ if e := fn(ctx); e != nil {
+ err = e
+ // exponential backoff
+ if retryOpts.exponentialBackoff {
+ backoff = backoff * time.Duration(i+1)
+ }
+ time.Sleep(backoff)
+ continue
+ }
+ return nil
+ }
+ return err
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/.gitignore b/vendor/bitbucket.stressedsharks.com/plat/proto/.gitignore
new file mode 100644
index 00000000..e01c4b75
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/.gitignore
@@ -0,0 +1,7 @@
+.history
+docs/
+.idea
+node_modules/
+.DS_Store
+cover.out
+cover.html
\ No newline at end of file
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/Makefile b/vendor/bitbucket.stressedsharks.com/plat/proto/Makefile
new file mode 100644
index 00000000..40e76fdc
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/Makefile
@@ -0,0 +1,45 @@
+SHELL=/bin/bash
+
+gen:
+ @./gen.sh
+
+proto:
+ @./proto_go.sh
+
+run-all-tests: run-linter run-unit-tests
+
+pre-commit: vendor-deps run-all-tests
+
+run-unit-tests:
+ @go clean -testcache && go test ./... -race -v --cover
+
+run-pipeline-unit-tests:
+ @go clean -testcache && go test -v ./... -race -tags pipeline
+
+run-unit-tests-cover:
+ @go test ./... -race -v -coverprofile cover.out && \
+ go tool cover -html=cover.out -o cover.html && \
+ open file:///$(shell pwd)/cover.html
+
+run-linter:
+ @golangci-lint run --deadline=240s --skip-dirs=vendor --tests
+
+install-linter:
+ @curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.35.2
+
+go-doc-mac:
+ @open http://localhost:6060 && \
+ godoc -http=:6060
+
+go-doc-linux:
+ @xdg-open http://localhost:6060 && \
+ godoc -http=:6060
+
+run-compose:
+ @docker-compose up
+
+stop-compose:
+ @docker-compose down
+
+vendor-deps:
+ @go mod tidy && go mod vendor
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/README.md b/vendor/bitbucket.stressedsharks.com/plat/proto/README.md
new file mode 100644
index 00000000..bb99edfb
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/README.md
@@ -0,0 +1,11 @@
+# Protocol Documentation
+
+To generate the go files locally on your machine, run `./proto_go.sh`, or `make proto`. See more detail inside `proto_go.sh` file documentation.
+
+To securely generate the go files using docker, run
+
+```terminal
+docker container run --rm --name proto_gen --mount type=bind,source=/your/local/path/to/platformservices/proto,target=/development/ps/proto -it chainkins/ps_gobuilder:1.16.6 /bin/bash -c "cd /development/ps/proto; ./proto_go.sh"
+```
+
+To generate the documentation for these protobuf definitions, run `make gen` command in this project. This will output documentation to the docs folder
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/about.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/about.pb.go
new file mode 100644
index 00000000..b8907930
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/about.pb.go
@@ -0,0 +1,213 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: about.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ structpb "google.golang.org/protobuf/types/known/structpb"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type GetInfoRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetInfoRequest) Reset() {
+ *x = GetInfoRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_about_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetInfoRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetInfoRequest) ProtoMessage() {}
+
+func (x *GetInfoRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_about_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetInfoRequest.ProtoReflect.Descriptor instead.
+func (*GetInfoRequest) Descriptor() ([]byte, []int) {
+ return file_about_proto_rawDescGZIP(), []int{0}
+}
+
+type GetInfoResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ About *structpb.Struct `protobuf:"bytes,1,opt,name=about,proto3" json:"about,omitempty"` // The json object that represent all info about the launched service
+}
+
+func (x *GetInfoResponse) Reset() {
+ *x = GetInfoResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_about_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetInfoResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetInfoResponse) ProtoMessage() {}
+
+func (x *GetInfoResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_about_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetInfoResponse.ProtoReflect.Descriptor instead.
+func (*GetInfoResponse) Descriptor() ([]byte, []int) {
+ return file_about_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GetInfoResponse) GetAbout() *structpb.Struct {
+ if x != nil {
+ return x.About
+ }
+ return nil
+}
+
+var File_about_proto protoreflect.FileDescriptor
+
+var file_about_proto_rawDesc = []byte{
+ 0x0a, 0x0b, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x22, 0x10, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x22, 0x40, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52,
+ 0x05, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x32, 0x45, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66,
+ 0x6f, 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x15, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x49,
+ 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a,
+ 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73,
+ 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c,
+ 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_about_proto_rawDescOnce sync.Once
+ file_about_proto_rawDescData = file_about_proto_rawDesc
+)
+
+func file_about_proto_rawDescGZIP() []byte {
+ file_about_proto_rawDescOnce.Do(func() {
+ file_about_proto_rawDescData = protoimpl.X.CompressGZIP(file_about_proto_rawDescData)
+ })
+ return file_about_proto_rawDescData
+}
+
+var file_about_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_about_proto_goTypes = []interface{}{
+ (*GetInfoRequest)(nil), // 0: proto.GetInfoRequest
+ (*GetInfoResponse)(nil), // 1: proto.GetInfoResponse
+ (*structpb.Struct)(nil), // 2: google.protobuf.Struct
+}
+var file_about_proto_depIdxs = []int32{
+ 2, // 0: proto.GetInfoResponse.about:type_name -> google.protobuf.Struct
+ 0, // 1: proto.GetInfo.GetInfo:input_type -> proto.GetInfoRequest
+ 1, // 2: proto.GetInfo.GetInfo:output_type -> proto.GetInfoResponse
+ 2, // [2:3] is the sub-list for method output_type
+ 1, // [1:2] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_about_proto_init() }
+func file_about_proto_init() {
+ if File_about_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_about_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetInfoRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_about_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetInfoResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_about_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_about_proto_goTypes,
+ DependencyIndexes: file_about_proto_depIdxs,
+ MessageInfos: file_about_proto_msgTypes,
+ }.Build()
+ File_about_proto = out.File
+ file_about_proto_rawDesc = nil
+ file_about_proto_goTypes = nil
+ file_about_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/about.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/about.proto
new file mode 100644
index 00000000..7544b8b0
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/about.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+package proto;
+import "google/protobuf/struct.proto";
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+message GetInfoRequest {
+}
+
+message GetInfoResponse {
+ google.protobuf.Struct about = 1; // The json object that represent all info about the launched service
+}
+
+/**
+The GetInfo endpoint returns full info of the launched app, includings
+ - Build Time info : version, commit hash, build date time
+ - Launch Time info : app settings
+ - if debug mode, return full settings info
+ - if prod mode, return settings info filtered out sensitive information
+*/
+service GetInfo {
+ // Returns full info of the running app
+ rpc GetInfo (GetInfoRequest) returns (GetInfoResponse) {}
+}
\ No newline at end of file
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/about_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/about_grpc.pb.go
new file mode 100644
index 00000000..350f4427
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/about_grpc.pb.go
@@ -0,0 +1,103 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// GetInfoClient is the client API for GetInfo service.
+//
+// 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.
+type GetInfoClient interface {
+ // Returns full info of the running app
+ GetInfo(ctx context.Context, in *GetInfoRequest, opts ...grpc.CallOption) (*GetInfoResponse, error)
+}
+
+type getInfoClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewGetInfoClient(cc grpc.ClientConnInterface) GetInfoClient {
+ return &getInfoClient{cc}
+}
+
+func (c *getInfoClient) GetInfo(ctx context.Context, in *GetInfoRequest, opts ...grpc.CallOption) (*GetInfoResponse, error) {
+ out := new(GetInfoResponse)
+ err := c.cc.Invoke(ctx, "/proto.GetInfo/GetInfo", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// GetInfoServer is the server API for GetInfo service.
+// All implementations must embed UnimplementedGetInfoServer
+// for forward compatibility
+type GetInfoServer interface {
+ // Returns full info of the running app
+ GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error)
+ mustEmbedUnimplementedGetInfoServer()
+}
+
+// UnimplementedGetInfoServer must be embedded to have forward compatible implementations.
+type UnimplementedGetInfoServer struct {
+}
+
+func (UnimplementedGetInfoServer) GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetInfo not implemented")
+}
+func (UnimplementedGetInfoServer) mustEmbedUnimplementedGetInfoServer() {}
+
+// UnsafeGetInfoServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to GetInfoServer will
+// result in compilation errors.
+type UnsafeGetInfoServer interface {
+ mustEmbedUnimplementedGetInfoServer()
+}
+
+func RegisterGetInfoServer(s grpc.ServiceRegistrar, srv GetInfoServer) {
+ s.RegisterService(&GetInfo_ServiceDesc, srv)
+}
+
+func _GetInfo_GetInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetInfoRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(GetInfoServer).GetInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.GetInfo/GetInfo",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(GetInfoServer).GetInfo(ctx, req.(*GetInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// GetInfo_ServiceDesc is the grpc.ServiceDesc for GetInfo service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var GetInfo_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.GetInfo",
+ HandlerType: (*GetInfoServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetInfo",
+ Handler: _GetInfo_GetInfo_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "about.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/bitbucket-pipelines.yml b/vendor/bitbucket.stressedsharks.com/plat/proto/bitbucket-pipelines.yml
new file mode 100644
index 00000000..2aa8df2d
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/bitbucket-pipelines.yml
@@ -0,0 +1,50 @@
+pipelines:
+ branches:
+ master:
+ - step:
+ name: Generate docs
+ image: jwahab/go-protoc:latest
+ script:
+ - make gen
+ artifacts:
+ - docs/**
+ - parallel:
+ - step:
+ name: Deploy to ehr_ps1
+ deployment: ehr_ps1
+ image: kroniak/ssh-client:latest
+ clone:
+ enabled: false
+ script:
+ - pipe: atlassian/scp-deploy:0.3.3
+ variables:
+ USER: $USER
+ SERVER: $SERVER
+ REMOTE_PATH: '/home/$USER/docs'
+ LOCAL_PATH: 'docs/internal/*'
+ - step:
+ name: Deploy to ehr_cust1
+ deployment: ehr_cust1
+ image: kroniak/ssh-client:latest
+ clone:
+ enabled: false
+ script:
+ - pipe: atlassian/scp-deploy:0.3.3
+ variables:
+ USER: $USER
+ SERVER: $SERVER
+ REMOTE_PATH: '/home/$USER/docs'
+ LOCAL_PATH: 'docs/external/*'
+ - step:
+ name: Deploy to bowstave-docs
+ deployment: bowstave-docs
+ image: kroniak/ssh-client:latest
+ clone:
+ enabled: false
+ script:
+ - pipe: atlassian/scp-deploy:0.3.3
+ variables:
+ USER: $USER
+ SERVER: $SERVER
+ REMOTE_PATH: '/home/$USER/docs'
+ LOCAL_PATH: 'docs/internal/*'
\ No newline at end of file
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/bowstave.template.html b/vendor/bitbucket.stressedsharks.com/plat/proto/bowstave.template.html
new file mode 100644
index 00000000..6e32abdb
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/bowstave.template.html
@@ -0,0 +1,434 @@
+
+
+
+
+ Protocol Documentation
+
+
+
+
+
+
+
+
+
+
+ Platform Services Protocol Documentation
+
+ Table of Contents
+
+
+
+ {{range .Files}}
+ {{$file_name := .Name}}
+
+ {{p .Description}}
+
+ {{range .Services}}
+ {{.Name}}
+ {{p .Description}}
+
+
+ Method Name | Request Type | Response Type | Description |
+
+
+ {{range .Methods}}
+
+ {{.Name}} |
+ {{.RequestLongType}}{{if .RequestStreaming}} stream{{end}} |
+ {{.ResponseLongType}}{{if .ResponseStreaming}} stream{{end}} |
+ {{.Description}} |
+
+ {{end}}
+
+
+
+ {{$service := .}}
+ {{- range .MethodOptions}}
+ {{$option := .}}
+ {{if eq . "google.api.http"}}
+ Methods with HTTP bindings
+
+
+
+ Method Name |
+ Method |
+ Pattern |
+ Body |
+
+
+
+ {{range $service.MethodsWithOption .}}
+ {{$name := .Name}}
+ {{range (.Option $option).Rules}}
+
+ {{$name}} |
+ {{.Method}} |
+ {{.Pattern}} |
+ {{.Body}} |
+
+ {{end}}
+ {{end}}
+
+
+ {{else}}
+ Methods with {{.}} option
+
+
+
+ Method Name |
+ Option |
+
+
+
+ {{range $service.MethodsWithOption .}}
+
+ {{.Name}} |
+ {{ printf "%+v" (.Option $option)}} |
+
+ {{end}}
+
+
+ {{end}}
+ {{end -}}
+ {{end}}
+
+ {{range .Messages}}
+ {{.LongName}}
+ {{p .Description}}
+
+ {{if .HasFields}}
+
+
+ Field | Type | Description |
+
+
+ {{range .Fields}}
+
+ {{.Name}} |
+ {{.Label}} {{.LongType}} |
+ {{.Description}} {{if .DefaultValue}}Default: {{.DefaultValue}}{{end}} |
+
+ {{end}}
+
+
+
+ {{$message := .}}
+ {{- range .FieldOptions}}
+ {{$option := .}}
+ {{if eq . "validator.field" "validate.rules" }}
+ Validated Fields
+
+
+
+ Field |
+ Validations |
+
+
+
+ {{range $message.FieldsWithOption .}}
+
+ {{.Name}} |
+
+
+ {{range (.Option $option).Rules}}
+ - {{.Name}}: {{.Value}}
+ {{end}}
+
+ |
+
+ {{end}}
+
+
+ {{else}}
+ Fields with {{.}} option
+
+
+
+ Name |
+ Option |
+
+
+
+ {{range $message.FieldsWithOption .}}
+
+ {{.Name}} |
+ {{ printf "%+v" (.Option $option)}} |
+
+ {{end}}
+
+
+ {{end}}
+ {{end -}}
+ {{end}}
+
+ {{if .HasExtensions}}
+
+
+
+ Extension | Type | Base | Number | Description |
+
+
+ {{range .Extensions}}
+
+ {{.Name}} |
+ {{.LongType}} |
+ {{.ContainingLongType}} |
+ {{.Number}} |
+ {{.Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} |
+
+ {{end}}
+
+
+ {{end}}
+ {{end}}
+
+ {{range .Enums}}
+ {{.LongName}}
+ {{p .Description}}
+
+
+ Name | Number | Description |
+
+
+ {{range .Values}}
+
+ {{.Name}} |
+ {{.Number}} |
+ {{.Description}} |
+
+ {{end}}
+
+
+ {{end}}
+
+ {{if .HasExtensions}}
+ File-level Extensions
+
+
+ Extension | Type | Base | Number | Description |
+
+
+ {{range .Extensions}}
+
+ {{.Name}} |
+ {{.LongType}} |
+ {{.ContainingLongType}} |
+ {{.Number}} |
+ {{.Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}} |
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+ Scalar Value Types
+
+
+ .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
+
+
+ {{range .Scalars}}
+
+ {{.ProtoType}} |
+ {{.Notes}} |
+ {{.CppType}} |
+ {{.JavaType}} |
+ {{.PythonType}} |
+ {{.GoType}} |
+ {{.CSharp}} |
+ {{.PhpType}} |
+ {{.RubyType}} |
+
+ {{end}}
+
+
+
+
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster.pb.go
new file mode 100644
index 00000000..28b32de6
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster.pb.go
@@ -0,0 +1,289 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: broadcaster.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type TransactionStatus int32
+
+const (
+ TransactionStatus_FAILURE TransactionStatus = 0 // the transaction failed to submit
+ TransactionStatus_EXISTS TransactionStatus = 1 // the transaction has previously been submitted
+ TransactionStatus_SUCCESS TransactionStatus = 2 // the transaction submission has succeded
+)
+
+// Enum value maps for TransactionStatus.
+var (
+ TransactionStatus_name = map[int32]string{
+ 0: "FAILURE",
+ 1: "EXISTS",
+ 2: "SUCCESS",
+ }
+ TransactionStatus_value = map[string]int32{
+ "FAILURE": 0,
+ "EXISTS": 1,
+ "SUCCESS": 2,
+ }
+)
+
+func (x TransactionStatus) Enum() *TransactionStatus {
+ p := new(TransactionStatus)
+ *p = x
+ return p
+}
+
+func (x TransactionStatus) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (TransactionStatus) Descriptor() protoreflect.EnumDescriptor {
+ return file_broadcaster_proto_enumTypes[0].Descriptor()
+}
+
+func (TransactionStatus) Type() protoreflect.EnumType {
+ return &file_broadcaster_proto_enumTypes[0]
+}
+
+func (x TransactionStatus) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use TransactionStatus.Descriptor instead.
+func (TransactionStatus) EnumDescriptor() ([]byte, []int) {
+ return file_broadcaster_proto_rawDescGZIP(), []int{0}
+}
+
+type BroadcastTransactionRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"` // This is an array of bytes containing the bitcoin transaction itself.
+}
+
+func (x *BroadcastTransactionRequest) Reset() {
+ *x = BroadcastTransactionRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_broadcaster_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BroadcastTransactionRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BroadcastTransactionRequest) ProtoMessage() {}
+
+func (x *BroadcastTransactionRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_broadcaster_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BroadcastTransactionRequest.ProtoReflect.Descriptor instead.
+func (*BroadcastTransactionRequest) Descriptor() ([]byte, []int) {
+ return file_broadcaster_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *BroadcastTransactionRequest) GetTx() []byte {
+ if x != nil {
+ return x.Tx
+ }
+ return nil
+}
+
+type BroadcastTransactionResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` // The transaction ID of the transaction that was successfully written to the bitcoin node.
+ Status TransactionStatus `protobuf:"varint,2,opt,name=status,proto3,enum=proto.TransactionStatus" json:"status,omitempty"` // The status of the tx submitted in the broadcast request
+}
+
+func (x *BroadcastTransactionResponse) Reset() {
+ *x = BroadcastTransactionResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_broadcaster_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BroadcastTransactionResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BroadcastTransactionResponse) ProtoMessage() {}
+
+func (x *BroadcastTransactionResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_broadcaster_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BroadcastTransactionResponse.ProtoReflect.Descriptor instead.
+func (*BroadcastTransactionResponse) Descriptor() ([]byte, []int) {
+ return file_broadcaster_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *BroadcastTransactionResponse) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+func (x *BroadcastTransactionResponse) GetStatus() TransactionStatus {
+ if x != nil {
+ return x.Status
+ }
+ return TransactionStatus_FAILURE
+}
+
+var File_broadcaster_proto protoreflect.FileDescriptor
+
+var file_broadcaster_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2d, 0x0a, 0x1b, 0x42, 0x72,
+ 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x74, 0x78, 0x22, 0x64, 0x0a, 0x1c, 0x42, 0x72, 0x6f,
+ 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x30, 0x0a,
+ 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a,
+ 0x39, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10,
+ 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a,
+ 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x32, 0x70, 0x0a, 0x0b, 0x42, 0x72,
+ 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x12, 0x61, 0x0a, 0x14, 0x42, 0x72, 0x6f,
+ 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63,
+ 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x72,
+ 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x27,
+ 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73,
+ 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61,
+ 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_broadcaster_proto_rawDescOnce sync.Once
+ file_broadcaster_proto_rawDescData = file_broadcaster_proto_rawDesc
+)
+
+func file_broadcaster_proto_rawDescGZIP() []byte {
+ file_broadcaster_proto_rawDescOnce.Do(func() {
+ file_broadcaster_proto_rawDescData = protoimpl.X.CompressGZIP(file_broadcaster_proto_rawDescData)
+ })
+ return file_broadcaster_proto_rawDescData
+}
+
+var file_broadcaster_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_broadcaster_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_broadcaster_proto_goTypes = []interface{}{
+ (TransactionStatus)(0), // 0: proto.TransactionStatus
+ (*BroadcastTransactionRequest)(nil), // 1: proto.BroadcastTransactionRequest
+ (*BroadcastTransactionResponse)(nil), // 2: proto.BroadcastTransactionResponse
+}
+var file_broadcaster_proto_depIdxs = []int32{
+ 0, // 0: proto.BroadcastTransactionResponse.status:type_name -> proto.TransactionStatus
+ 1, // 1: proto.Broadcaster.BroadcastTransaction:input_type -> proto.BroadcastTransactionRequest
+ 2, // 2: proto.Broadcaster.BroadcastTransaction:output_type -> proto.BroadcastTransactionResponse
+ 2, // [2:3] is the sub-list for method output_type
+ 1, // [1:2] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_broadcaster_proto_init() }
+func file_broadcaster_proto_init() {
+ if File_broadcaster_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_broadcaster_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BroadcastTransactionRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_broadcaster_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BroadcastTransactionResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_broadcaster_proto_rawDesc,
+ NumEnums: 1,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_broadcaster_proto_goTypes,
+ DependencyIndexes: file_broadcaster_proto_depIdxs,
+ EnumInfos: file_broadcaster_proto_enumTypes,
+ MessageInfos: file_broadcaster_proto_msgTypes,
+ }.Build()
+ File_broadcaster_proto = out.File
+ file_broadcaster_proto_rawDesc = nil
+ file_broadcaster_proto_goTypes = nil
+ file_broadcaster_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster.proto
new file mode 100644
index 00000000..5da032e0
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster.proto
@@ -0,0 +1,31 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+/**
+The Broadcaster Service is responsible for sending raw bitcoin transactions to the bitcoin network.
+Upon success, it calls the FundingService.SetSpent() service to notify that the input(s) in this transaction have now been spent.
+*/
+service Broadcaster {
+ // Broadcasts a bitcoin transaction to the bitcoin network.
+ rpc BroadcastTransaction (BroadcastTransactionRequest) returns (BroadcastTransactionResponse) {}
+
+}
+
+message BroadcastTransactionRequest {
+ bytes tx = 1; // This is an array of bytes containing the bitcoin transaction itself.
+}
+
+message BroadcastTransactionResponse {
+ string txid = 1; // The transaction ID of the transaction that was successfully written to the bitcoin node.
+ TransactionStatus status = 2; // The status of the tx submitted in the broadcast request
+}
+
+
+enum TransactionStatus {
+ FAILURE = 0; // the transaction failed to submit
+ EXISTS = 1; // the transaction has previously been submitted
+ SUCCESS = 2; // the transaction submission has succeded
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster_grpc.pb.go
new file mode 100644
index 00000000..5b2699bd
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/broadcaster_grpc.pb.go
@@ -0,0 +1,103 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// BroadcasterClient is the client API for Broadcaster service.
+//
+// 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.
+type BroadcasterClient interface {
+ // Broadcasts a bitcoin transaction to the bitcoin network.
+ BroadcastTransaction(ctx context.Context, in *BroadcastTransactionRequest, opts ...grpc.CallOption) (*BroadcastTransactionResponse, error)
+}
+
+type broadcasterClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewBroadcasterClient(cc grpc.ClientConnInterface) BroadcasterClient {
+ return &broadcasterClient{cc}
+}
+
+func (c *broadcasterClient) BroadcastTransaction(ctx context.Context, in *BroadcastTransactionRequest, opts ...grpc.CallOption) (*BroadcastTransactionResponse, error) {
+ out := new(BroadcastTransactionResponse)
+ err := c.cc.Invoke(ctx, "/proto.Broadcaster/BroadcastTransaction", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// BroadcasterServer is the server API for Broadcaster service.
+// All implementations must embed UnimplementedBroadcasterServer
+// for forward compatibility
+type BroadcasterServer interface {
+ // Broadcasts a bitcoin transaction to the bitcoin network.
+ BroadcastTransaction(context.Context, *BroadcastTransactionRequest) (*BroadcastTransactionResponse, error)
+ mustEmbedUnimplementedBroadcasterServer()
+}
+
+// UnimplementedBroadcasterServer must be embedded to have forward compatible implementations.
+type UnimplementedBroadcasterServer struct {
+}
+
+func (UnimplementedBroadcasterServer) BroadcastTransaction(context.Context, *BroadcastTransactionRequest) (*BroadcastTransactionResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method BroadcastTransaction not implemented")
+}
+func (UnimplementedBroadcasterServer) mustEmbedUnimplementedBroadcasterServer() {}
+
+// UnsafeBroadcasterServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to BroadcasterServer will
+// result in compilation errors.
+type UnsafeBroadcasterServer interface {
+ mustEmbedUnimplementedBroadcasterServer()
+}
+
+func RegisterBroadcasterServer(s grpc.ServiceRegistrar, srv BroadcasterServer) {
+ s.RegisterService(&Broadcaster_ServiceDesc, srv)
+}
+
+func _Broadcaster_BroadcastTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(BroadcastTransactionRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(BroadcasterServer).BroadcastTransaction(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Broadcaster/BroadcastTransaction",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(BroadcasterServer).BroadcastTransaction(ctx, req.(*BroadcastTransactionRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// Broadcaster_ServiceDesc is the grpc.ServiceDesc for Broadcaster service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Broadcaster_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.Broadcaster",
+ HandlerType: (*BroadcasterServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "BroadcastTransaction",
+ Handler: _Broadcaster_BroadcastTransaction_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "broadcaster.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service.pb.go
new file mode 100644
index 00000000..b42a5a07
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service.pb.go
@@ -0,0 +1,1210 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: crypto_service.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type EncryptRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+ Data [][]byte `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` // One or more arrays of byte arrays containing the data you wish to encrypt ([][]byte).
+}
+
+func (x *EncryptRequest) Reset() {
+ *x = EncryptRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *EncryptRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EncryptRequest) ProtoMessage() {}
+
+func (x *EncryptRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EncryptRequest.ProtoReflect.Descriptor instead.
+func (*EncryptRequest) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *EncryptRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+func (x *EncryptRequest) GetData() [][]byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+type EncryptResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // The resulting ciphertext.
+}
+
+func (x *EncryptResponse) Reset() {
+ *x = EncryptResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *EncryptResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EncryptResponse) ProtoMessage() {}
+
+func (x *EncryptResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EncryptResponse.ProtoReflect.Descriptor instead.
+func (*EncryptResponse) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *EncryptResponse) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+type DecryptRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // The ciphertext to decrypt ([]byte).
+}
+
+func (x *DecryptRequest) Reset() {
+ *x = DecryptRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DecryptRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DecryptRequest) ProtoMessage() {}
+
+func (x *DecryptRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DecryptRequest.ProtoReflect.Descriptor instead.
+func (*DecryptRequest) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *DecryptRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+func (x *DecryptRequest) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+type DecryptResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Data [][]byte `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` // An array of one or more byte arrays ([][]byte).
+}
+
+func (x *DecryptResponse) Reset() {
+ *x = DecryptResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DecryptResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DecryptResponse) ProtoMessage() {}
+
+func (x *DecryptResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DecryptResponse.ProtoReflect.Descriptor instead.
+func (*DecryptResponse) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *DecryptResponse) GetData() [][]byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+type GetPublicKeyRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+}
+
+func (x *GetPublicKeyRequest) Reset() {
+ *x = GetPublicKeyRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetPublicKeyRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPublicKeyRequest) ProtoMessage() {}
+
+func (x *GetPublicKeyRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetPublicKeyRequest.ProtoReflect.Descriptor instead.
+func (*GetPublicKeyRequest) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GetPublicKeyRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+type GetPublicKeyResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // array of bytes containing the public key
+ Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+}
+
+func (x *GetPublicKeyResponse) Reset() {
+ *x = GetPublicKeyResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetPublicKeyResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPublicKeyResponse) ProtoMessage() {}
+
+func (x *GetPublicKeyResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetPublicKeyResponse.ProtoReflect.Descriptor instead.
+func (*GetPublicKeyResponse) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GetPublicKeyResponse) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+func (x *GetPublicKeyResponse) GetAddress() string {
+ if x != nil {
+ return x.Address
+ }
+ return ""
+}
+
+type DerivePublicKeysRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"`
+ Counter int64 `protobuf:"varint,2,opt,name=counter,proto3" json:"counter,omitempty"`
+ Offset int64 `protobuf:"varint,3,opt,name=offset,proto3" json:"offset,omitempty"`
+}
+
+func (x *DerivePublicKeysRequest) Reset() {
+ *x = DerivePublicKeysRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DerivePublicKeysRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DerivePublicKeysRequest) ProtoMessage() {}
+
+func (x *DerivePublicKeysRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DerivePublicKeysRequest.ProtoReflect.Descriptor instead.
+func (*DerivePublicKeysRequest) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *DerivePublicKeysRequest) GetAlias() string {
+ if x != nil {
+ return x.Alias
+ }
+ return ""
+}
+
+func (x *DerivePublicKeysRequest) GetCounter() int64 {
+ if x != nil {
+ return x.Counter
+ }
+ return 0
+}
+
+func (x *DerivePublicKeysRequest) GetOffset() int64 {
+ if x != nil {
+ return x.Offset
+ }
+ return 0
+}
+
+type DerivePublicKeysResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ PublicKeys []*DerivedPublicKey `protobuf:"bytes,1,rep,name=public_keys,json=publicKeys,proto3" json:"public_keys,omitempty"` // array of multiple public keys
+}
+
+func (x *DerivePublicKeysResponse) Reset() {
+ *x = DerivePublicKeysResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DerivePublicKeysResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DerivePublicKeysResponse) ProtoMessage() {}
+
+func (x *DerivePublicKeysResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DerivePublicKeysResponse.ProtoReflect.Descriptor instead.
+func (*DerivePublicKeysResponse) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *DerivePublicKeysResponse) GetPublicKeys() []*DerivedPublicKey {
+ if x != nil {
+ return x.PublicKeys
+ }
+ return nil
+}
+
+type DerivedPublicKey struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
+ KeyContext *KeyContext `protobuf:"bytes,2,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+}
+
+func (x *DerivedPublicKey) Reset() {
+ *x = DerivedPublicKey{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DerivedPublicKey) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DerivedPublicKey) ProtoMessage() {}
+
+func (x *DerivedPublicKey) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DerivedPublicKey.ProtoReflect.Descriptor instead.
+func (*DerivedPublicKey) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *DerivedPublicKey) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+func (x *DerivedPublicKey) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+type SignHashRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+ Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` // array of bytes containing the hash you wish to sign
+}
+
+func (x *SignHashRequest) Reset() {
+ *x = SignHashRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SignHashRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SignHashRequest) ProtoMessage() {}
+
+func (x *SignHashRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SignHashRequest.ProtoReflect.Descriptor instead.
+func (*SignHashRequest) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *SignHashRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+func (x *SignHashRequest) GetHash() []byte {
+ if x != nil {
+ return x.Hash
+ }
+ return nil
+}
+
+type SignHashResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Signature []byte `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` // array of bytes containing signature of the hash
+ PublicKey []byte `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // array of bytes containing the public key
+}
+
+func (x *SignHashResponse) Reset() {
+ *x = SignHashResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SignHashResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SignHashResponse) ProtoMessage() {}
+
+func (x *SignHashResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[10]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SignHashResponse.ProtoReflect.Descriptor instead.
+func (*SignHashResponse) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *SignHashResponse) GetSignature() []byte {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+
+func (x *SignHashResponse) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+type SignRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // array of bytes containing the data you wish to sign
+}
+
+func (x *SignRequest) Reset() {
+ *x = SignRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SignRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SignRequest) ProtoMessage() {}
+
+func (x *SignRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[11]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SignRequest.ProtoReflect.Descriptor instead.
+func (*SignRequest) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *SignRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+func (x *SignRequest) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+type SignResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Signature []byte `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` // array of bytes containing signature of the hashed data
+ PublicKey []byte `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // array of bytes containing the public key
+}
+
+func (x *SignResponse) Reset() {
+ *x = SignResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SignResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SignResponse) ProtoMessage() {}
+
+func (x *SignResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[12]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SignResponse.ProtoReflect.Descriptor instead.
+func (*SignResponse) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *SignResponse) GetSignature() []byte {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+
+func (x *SignResponse) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+type BatchSignHashRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ RequestBatch []*SignHashRequest `protobuf:"bytes,1,rep,name=request_batch,json=requestBatch,proto3" json:"request_batch,omitempty"` //array of SignHash requests
+}
+
+func (x *BatchSignHashRequest) Reset() {
+ *x = BatchSignHashRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchSignHashRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchSignHashRequest) ProtoMessage() {}
+
+func (x *BatchSignHashRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[13]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchSignHashRequest.ProtoReflect.Descriptor instead.
+func (*BatchSignHashRequest) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *BatchSignHashRequest) GetRequestBatch() []*SignHashRequest {
+ if x != nil {
+ return x.RequestBatch
+ }
+ return nil
+}
+
+type BatchSignHashResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ResponseBatch []*SignHashResponse `protobuf:"bytes,1,rep,name=response_batch,json=responseBatch,proto3" json:"response_batch,omitempty"` //array of SighHash responses
+}
+
+func (x *BatchSignHashResponse) Reset() {
+ *x = BatchSignHashResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_crypto_service_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *BatchSignHashResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BatchSignHashResponse) ProtoMessage() {}
+
+func (x *BatchSignHashResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_crypto_service_proto_msgTypes[14]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BatchSignHashResponse.ProtoReflect.Descriptor instead.
+func (*BatchSignHashResponse) Descriptor() ([]byte, []int) {
+ return file_crypto_service_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *BatchSignHashResponse) GetResponseBatch() []*SignHashResponse {
+ if x != nil {
+ return x.ResponseBatch
+ }
+ return nil
+}
+
+var File_crypto_service_proto protoreflect.FileDescriptor
+
+var file_crypto_service_proto_rawDesc = []byte{
+ 0x0a, 0x14, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x6b,
+ 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x1a, 0x0e, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x22, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x25, 0x0a, 0x0f, 0x45, 0x6e,
+ 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a,
+ 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74,
+ 0x61, 0x22, 0x58, 0x0a, 0x0e, 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79,
+ 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x25, 0x0a, 0x0f, 0x44,
+ 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12,
+ 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61,
+ 0x74, 0x61, 0x22, 0x49, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79,
+ 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+ 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x4f, 0x0a,
+ 0x14, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x61,
+ 0x0a, 0x17, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
+ 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69,
+ 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12,
+ 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66,
+ 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65,
+ 0x74, 0x22, 0x54, 0x0a, 0x18, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a,
+ 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76,
+ 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x75, 0x62,
+ 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x65, 0x0a, 0x10, 0x44, 0x65, 0x72, 0x69, 0x76,
+ 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
+ 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
+ 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65,
+ 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x59,
+ 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b,
+ 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f,
+ 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0x4f, 0x0a, 0x10, 0x53, 0x69, 0x67,
+ 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a,
+ 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
+ 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
+ 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
+ 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x55, 0x0a, 0x0b, 0x53, 0x69,
+ 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79,
+ 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+ 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74,
+ 0x61, 0x22, 0x4b, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x53,
+ 0x0a, 0x14, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x61,
+ 0x74, 0x63, 0x68, 0x22, 0x57, 0x0a, 0x15, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x67, 0x6e,
+ 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0e,
+ 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67,
+ 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0d, 0x72,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x32, 0xb1, 0x04, 0x0a,
+ 0x0d, 0x43, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3a,
+ 0x0a, 0x07, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x07, 0x44, 0x65,
+ 0x63, 0x72, 0x79, 0x70, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65,
+ 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62,
+ 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47,
+ 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75,
+ 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x55, 0x0a, 0x10, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65,
+ 0x72, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65,
+ 0x72, 0x69, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e,
+ 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67,
+ 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x12,
+ 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, 0x42, 0x61,
+ 0x74, 0x63, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73,
+ 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74,
+ 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_crypto_service_proto_rawDescOnce sync.Once
+ file_crypto_service_proto_rawDescData = file_crypto_service_proto_rawDesc
+)
+
+func file_crypto_service_proto_rawDescGZIP() []byte {
+ file_crypto_service_proto_rawDescOnce.Do(func() {
+ file_crypto_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_crypto_service_proto_rawDescData)
+ })
+ return file_crypto_service_proto_rawDescData
+}
+
+var file_crypto_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
+var file_crypto_service_proto_goTypes = []interface{}{
+ (*EncryptRequest)(nil), // 0: proto.EncryptRequest
+ (*EncryptResponse)(nil), // 1: proto.EncryptResponse
+ (*DecryptRequest)(nil), // 2: proto.DecryptRequest
+ (*DecryptResponse)(nil), // 3: proto.DecryptResponse
+ (*GetPublicKeyRequest)(nil), // 4: proto.GetPublicKeyRequest
+ (*GetPublicKeyResponse)(nil), // 5: proto.GetPublicKeyResponse
+ (*DerivePublicKeysRequest)(nil), // 6: proto.DerivePublicKeysRequest
+ (*DerivePublicKeysResponse)(nil), // 7: proto.DerivePublicKeysResponse
+ (*DerivedPublicKey)(nil), // 8: proto.DerivedPublicKey
+ (*SignHashRequest)(nil), // 9: proto.SignHashRequest
+ (*SignHashResponse)(nil), // 10: proto.SignHashResponse
+ (*SignRequest)(nil), // 11: proto.SignRequest
+ (*SignResponse)(nil), // 12: proto.SignResponse
+ (*BatchSignHashRequest)(nil), // 13: proto.BatchSignHashRequest
+ (*BatchSignHashResponse)(nil), // 14: proto.BatchSignHashResponse
+ (*KeyContext)(nil), // 15: proto.KeyContext
+ (*CreateAliasRequest)(nil), // 16: proto.CreateAliasRequest
+ (*CreateAliasResponse)(nil), // 17: proto.CreateAliasResponse
+}
+var file_crypto_service_proto_depIdxs = []int32{
+ 15, // 0: proto.EncryptRequest.key_context:type_name -> proto.KeyContext
+ 15, // 1: proto.DecryptRequest.key_context:type_name -> proto.KeyContext
+ 15, // 2: proto.GetPublicKeyRequest.key_context:type_name -> proto.KeyContext
+ 8, // 3: proto.DerivePublicKeysResponse.public_keys:type_name -> proto.DerivedPublicKey
+ 15, // 4: proto.DerivedPublicKey.key_context:type_name -> proto.KeyContext
+ 15, // 5: proto.SignHashRequest.key_context:type_name -> proto.KeyContext
+ 15, // 6: proto.SignRequest.key_context:type_name -> proto.KeyContext
+ 9, // 7: proto.BatchSignHashRequest.request_batch:type_name -> proto.SignHashRequest
+ 10, // 8: proto.BatchSignHashResponse.response_batch:type_name -> proto.SignHashResponse
+ 0, // 9: proto.CryptoService.Encrypt:input_type -> proto.EncryptRequest
+ 2, // 10: proto.CryptoService.Decrypt:input_type -> proto.DecryptRequest
+ 4, // 11: proto.CryptoService.GetPublicKey:input_type -> proto.GetPublicKeyRequest
+ 6, // 12: proto.CryptoService.DerivePublicKeys:input_type -> proto.DerivePublicKeysRequest
+ 9, // 13: proto.CryptoService.SignHash:input_type -> proto.SignHashRequest
+ 11, // 14: proto.CryptoService.Sign:input_type -> proto.SignRequest
+ 13, // 15: proto.CryptoService.BatchSignHash:input_type -> proto.BatchSignHashRequest
+ 16, // 16: proto.CryptoService.CreateAlias:input_type -> proto.CreateAliasRequest
+ 1, // 17: proto.CryptoService.Encrypt:output_type -> proto.EncryptResponse
+ 3, // 18: proto.CryptoService.Decrypt:output_type -> proto.DecryptResponse
+ 5, // 19: proto.CryptoService.GetPublicKey:output_type -> proto.GetPublicKeyResponse
+ 7, // 20: proto.CryptoService.DerivePublicKeys:output_type -> proto.DerivePublicKeysResponse
+ 10, // 21: proto.CryptoService.SignHash:output_type -> proto.SignHashResponse
+ 12, // 22: proto.CryptoService.Sign:output_type -> proto.SignResponse
+ 14, // 23: proto.CryptoService.BatchSignHash:output_type -> proto.BatchSignHashResponse
+ 17, // 24: proto.CryptoService.CreateAlias:output_type -> proto.CreateAliasResponse
+ 17, // [17:25] is the sub-list for method output_type
+ 9, // [9:17] is the sub-list for method input_type
+ 9, // [9:9] is the sub-list for extension type_name
+ 9, // [9:9] is the sub-list for extension extendee
+ 0, // [0:9] is the sub-list for field type_name
+}
+
+func init() { file_crypto_service_proto_init() }
+func file_crypto_service_proto_init() {
+ if File_crypto_service_proto != nil {
+ return
+ }
+ file_key_context_proto_init()
+ file_keystore_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_crypto_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*EncryptRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*EncryptResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DecryptRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DecryptResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetPublicKeyRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetPublicKeyResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DerivePublicKeysRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DerivePublicKeysResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DerivedPublicKey); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SignHashRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SignHashResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SignRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SignResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchSignHashRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_crypto_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*BatchSignHashResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_crypto_service_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 15,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_crypto_service_proto_goTypes,
+ DependencyIndexes: file_crypto_service_proto_depIdxs,
+ MessageInfos: file_crypto_service_proto_msgTypes,
+ }.Build()
+ File_crypto_service_proto = out.File
+ file_crypto_service_proto_rawDesc = nil
+ file_crypto_service_proto_goTypes = nil
+ file_crypto_service_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service.proto
new file mode 100644
index 00000000..655ac49c
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service.proto
@@ -0,0 +1,109 @@
+syntax = "proto3";
+
+import "key_context.proto";
+import "keystore.proto";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+/**
+The Crypto Service takes a number of byte arrays and encrypts / decrypts them using Parcel Encryption.
+
+Parcel Encryption refers to a technique where each byte array is encrypted in turn wrapping the previous byte array like layers of wrapping paper on a parcel. Each layer is encryped with a different deterministic key, so it is possible to reveal some layers of the encrypted payload without providing access to deeper wrapped items.
+*/
+service CryptoService {
+ // Encrypts an array of byte arrays.
+ rpc Encrypt (EncryptRequest) returns (EncryptResponse) {}
+
+ // Decrypts a ciphertext to an array of byte arrays.
+ rpc Decrypt (DecryptRequest) returns (DecryptResponse) {}
+
+ // Get a public key for a key context
+ rpc GetPublicKey (GetPublicKeyRequest) returns (GetPublicKeyResponse) {}
+
+ // Get multiple public keys for a key context after a path with some offset
+ rpc DerivePublicKeys (DerivePublicKeysRequest) returns (DerivePublicKeysResponse) {}
+
+ // Signs a hash with a key
+ rpc SignHash (SignHashRequest) returns (SignHashResponse) {}
+
+ // Sign data with a key
+ rpc Sign (SignRequest) returns (SignResponse) {}
+
+ // Sign multiple hashes with key
+ rpc BatchSignHash (BatchSignHashRequest) returns (BatchSignHashResponse) {}
+
+ //create a new alias
+ rpc CreateAlias(CreateAliasRequest) returns (CreateAliasResponse) {}
+}
+
+message EncryptRequest {
+ KeyContext key_context = 1;
+ repeated bytes data = 2; // One or more arrays of byte arrays containing the data you wish to encrypt ([][]byte).
+}
+
+message EncryptResponse {
+ bytes data = 1; // The resulting ciphertext.
+}
+
+message DecryptRequest {
+ KeyContext key_context = 1;
+ bytes data = 2; // The ciphertext to decrypt ([]byte).
+}
+
+message DecryptResponse {
+ repeated bytes data = 1; // An array of one or more byte arrays ([][]byte).
+}
+
+message GetPublicKeyRequest {
+ KeyContext key_context = 1;
+}
+
+message GetPublicKeyResponse {
+ bytes public_key = 1; // array of bytes containing the public key
+ string address = 2;
+}
+
+message DerivePublicKeysRequest {
+ string alias = 1;
+ int64 counter = 2;
+ int64 offset = 3;
+}
+
+message DerivePublicKeysResponse {
+ repeated DerivedPublicKey public_keys = 1; // array of multiple public keys
+}
+
+message DerivedPublicKey {
+ bytes public_key = 1;
+ KeyContext key_context = 2;
+}
+
+message SignHashRequest {
+ KeyContext key_context = 1;
+ bytes hash = 2; // array of bytes containing the hash you wish to sign
+}
+
+message SignHashResponse {
+ bytes signature = 1; // array of bytes containing signature of the hash
+ bytes public_key = 2; // array of bytes containing the public key
+}
+
+message SignRequest {
+ KeyContext key_context = 1;
+ bytes data = 2; // array of bytes containing the data you wish to sign
+}
+
+message SignResponse {
+ bytes signature = 1; // array of bytes containing signature of the hashed data
+ bytes public_key = 2; // array of bytes containing the public key
+}
+
+message BatchSignHashRequest {
+ repeated SignHashRequest request_batch = 1; //array of SignHash requests
+}
+
+message BatchSignHashResponse {
+ repeated SignHashResponse response_batch = 1; //array of SighHash responses
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service_grpc.pb.go
new file mode 100644
index 00000000..d6a31a92
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/crypto_service_grpc.pb.go
@@ -0,0 +1,369 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// CryptoServiceClient is the client API for CryptoService service.
+//
+// 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.
+type CryptoServiceClient interface {
+ // Encrypts an array of byte arrays.
+ Encrypt(ctx context.Context, in *EncryptRequest, opts ...grpc.CallOption) (*EncryptResponse, error)
+ // Decrypts a ciphertext to an array of byte arrays.
+ Decrypt(ctx context.Context, in *DecryptRequest, opts ...grpc.CallOption) (*DecryptResponse, error)
+ // Get a public key for a key context
+ GetPublicKey(ctx context.Context, in *GetPublicKeyRequest, opts ...grpc.CallOption) (*GetPublicKeyResponse, error)
+ // Get multiple public keys for a key context after a path with some offset
+ DerivePublicKeys(ctx context.Context, in *DerivePublicKeysRequest, opts ...grpc.CallOption) (*DerivePublicKeysResponse, error)
+ // Signs a hash with a key
+ SignHash(ctx context.Context, in *SignHashRequest, opts ...grpc.CallOption) (*SignHashResponse, error)
+ // Sign data with a key
+ Sign(ctx context.Context, in *SignRequest, opts ...grpc.CallOption) (*SignResponse, error)
+ // Sign multiple hashes with key
+ BatchSignHash(ctx context.Context, in *BatchSignHashRequest, opts ...grpc.CallOption) (*BatchSignHashResponse, error)
+ //create a new alias
+ CreateAlias(ctx context.Context, in *CreateAliasRequest, opts ...grpc.CallOption) (*CreateAliasResponse, error)
+}
+
+type cryptoServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewCryptoServiceClient(cc grpc.ClientConnInterface) CryptoServiceClient {
+ return &cryptoServiceClient{cc}
+}
+
+func (c *cryptoServiceClient) Encrypt(ctx context.Context, in *EncryptRequest, opts ...grpc.CallOption) (*EncryptResponse, error) {
+ out := new(EncryptResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/Encrypt", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cryptoServiceClient) Decrypt(ctx context.Context, in *DecryptRequest, opts ...grpc.CallOption) (*DecryptResponse, error) {
+ out := new(DecryptResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/Decrypt", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cryptoServiceClient) GetPublicKey(ctx context.Context, in *GetPublicKeyRequest, opts ...grpc.CallOption) (*GetPublicKeyResponse, error) {
+ out := new(GetPublicKeyResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/GetPublicKey", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cryptoServiceClient) DerivePublicKeys(ctx context.Context, in *DerivePublicKeysRequest, opts ...grpc.CallOption) (*DerivePublicKeysResponse, error) {
+ out := new(DerivePublicKeysResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/DerivePublicKeys", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cryptoServiceClient) SignHash(ctx context.Context, in *SignHashRequest, opts ...grpc.CallOption) (*SignHashResponse, error) {
+ out := new(SignHashResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/SignHash", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cryptoServiceClient) Sign(ctx context.Context, in *SignRequest, opts ...grpc.CallOption) (*SignResponse, error) {
+ out := new(SignResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/Sign", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cryptoServiceClient) BatchSignHash(ctx context.Context, in *BatchSignHashRequest, opts ...grpc.CallOption) (*BatchSignHashResponse, error) {
+ out := new(BatchSignHashResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/BatchSignHash", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cryptoServiceClient) CreateAlias(ctx context.Context, in *CreateAliasRequest, opts ...grpc.CallOption) (*CreateAliasResponse, error) {
+ out := new(CreateAliasResponse)
+ err := c.cc.Invoke(ctx, "/proto.CryptoService/CreateAlias", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// CryptoServiceServer is the server API for CryptoService service.
+// All implementations must embed UnimplementedCryptoServiceServer
+// for forward compatibility
+type CryptoServiceServer interface {
+ // Encrypts an array of byte arrays.
+ Encrypt(context.Context, *EncryptRequest) (*EncryptResponse, error)
+ // Decrypts a ciphertext to an array of byte arrays.
+ Decrypt(context.Context, *DecryptRequest) (*DecryptResponse, error)
+ // Get a public key for a key context
+ GetPublicKey(context.Context, *GetPublicKeyRequest) (*GetPublicKeyResponse, error)
+ // Get multiple public keys for a key context after a path with some offset
+ DerivePublicKeys(context.Context, *DerivePublicKeysRequest) (*DerivePublicKeysResponse, error)
+ // Signs a hash with a key
+ SignHash(context.Context, *SignHashRequest) (*SignHashResponse, error)
+ // Sign data with a key
+ Sign(context.Context, *SignRequest) (*SignResponse, error)
+ // Sign multiple hashes with key
+ BatchSignHash(context.Context, *BatchSignHashRequest) (*BatchSignHashResponse, error)
+ //create a new alias
+ CreateAlias(context.Context, *CreateAliasRequest) (*CreateAliasResponse, error)
+ mustEmbedUnimplementedCryptoServiceServer()
+}
+
+// UnimplementedCryptoServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedCryptoServiceServer struct {
+}
+
+func (UnimplementedCryptoServiceServer) Encrypt(context.Context, *EncryptRequest) (*EncryptResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Encrypt not implemented")
+}
+func (UnimplementedCryptoServiceServer) Decrypt(context.Context, *DecryptRequest) (*DecryptResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Decrypt not implemented")
+}
+func (UnimplementedCryptoServiceServer) GetPublicKey(context.Context, *GetPublicKeyRequest) (*GetPublicKeyResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetPublicKey not implemented")
+}
+func (UnimplementedCryptoServiceServer) DerivePublicKeys(context.Context, *DerivePublicKeysRequest) (*DerivePublicKeysResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DerivePublicKeys not implemented")
+}
+func (UnimplementedCryptoServiceServer) SignHash(context.Context, *SignHashRequest) (*SignHashResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method SignHash not implemented")
+}
+func (UnimplementedCryptoServiceServer) Sign(context.Context, *SignRequest) (*SignResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Sign not implemented")
+}
+func (UnimplementedCryptoServiceServer) BatchSignHash(context.Context, *BatchSignHashRequest) (*BatchSignHashResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method BatchSignHash not implemented")
+}
+func (UnimplementedCryptoServiceServer) CreateAlias(context.Context, *CreateAliasRequest) (*CreateAliasResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method CreateAlias not implemented")
+}
+func (UnimplementedCryptoServiceServer) mustEmbedUnimplementedCryptoServiceServer() {}
+
+// UnsafeCryptoServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to CryptoServiceServer will
+// result in compilation errors.
+type UnsafeCryptoServiceServer interface {
+ mustEmbedUnimplementedCryptoServiceServer()
+}
+
+func RegisterCryptoServiceServer(s grpc.ServiceRegistrar, srv CryptoServiceServer) {
+ s.RegisterService(&CryptoService_ServiceDesc, srv)
+}
+
+func _CryptoService_Encrypt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(EncryptRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).Encrypt(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/Encrypt",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).Encrypt(ctx, req.(*EncryptRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CryptoService_Decrypt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DecryptRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).Decrypt(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/Decrypt",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).Decrypt(ctx, req.(*DecryptRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CryptoService_GetPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetPublicKeyRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).GetPublicKey(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/GetPublicKey",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).GetPublicKey(ctx, req.(*GetPublicKeyRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CryptoService_DerivePublicKeys_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DerivePublicKeysRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).DerivePublicKeys(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/DerivePublicKeys",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).DerivePublicKeys(ctx, req.(*DerivePublicKeysRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CryptoService_SignHash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(SignHashRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).SignHash(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/SignHash",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).SignHash(ctx, req.(*SignHashRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CryptoService_Sign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(SignRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).Sign(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/Sign",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).Sign(ctx, req.(*SignRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CryptoService_BatchSignHash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(BatchSignHashRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).BatchSignHash(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/BatchSignHash",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).BatchSignHash(ctx, req.(*BatchSignHashRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CryptoService_CreateAlias_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(CreateAliasRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CryptoServiceServer).CreateAlias(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.CryptoService/CreateAlias",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CryptoServiceServer).CreateAlias(ctx, req.(*CreateAliasRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// CryptoService_ServiceDesc is the grpc.ServiceDesc for CryptoService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var CryptoService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.CryptoService",
+ HandlerType: (*CryptoServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Encrypt",
+ Handler: _CryptoService_Encrypt_Handler,
+ },
+ {
+ MethodName: "Decrypt",
+ Handler: _CryptoService_Decrypt_Handler,
+ },
+ {
+ MethodName: "GetPublicKey",
+ Handler: _CryptoService_GetPublicKey_Handler,
+ },
+ {
+ MethodName: "DerivePublicKeys",
+ Handler: _CryptoService_DerivePublicKeys_Handler,
+ },
+ {
+ MethodName: "SignHash",
+ Handler: _CryptoService_SignHash_Handler,
+ },
+ {
+ MethodName: "Sign",
+ Handler: _CryptoService_Sign_Handler,
+ },
+ {
+ MethodName: "BatchSignHash",
+ Handler: _CryptoService_BatchSignHash_Handler,
+ },
+ {
+ MethodName: "CreateAlias",
+ Handler: _CryptoService_CreateAlias_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "crypto_service.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer.pb.go
new file mode 100644
index 00000000..1e903849
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer.pb.go
@@ -0,0 +1,217 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: data_writer.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type WriteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Data [][]byte `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` // One or more arrays of byte arrays containing the data you wish to write ([][]byte). Each byte array is written as a separate OP_PUSH.
+}
+
+func (x *WriteRequest) Reset() {
+ *x = WriteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_data_writer_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *WriteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WriteRequest) ProtoMessage() {}
+
+func (x *WriteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_data_writer_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WriteRequest.ProtoReflect.Descriptor instead.
+func (*WriteRequest) Descriptor() ([]byte, []int) {
+ return file_data_writer_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *WriteRequest) GetData() [][]byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+type WriteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` // The transaction ID of the transaction that was successfully written to the bitcoin node.
+}
+
+func (x *WriteResponse) Reset() {
+ *x = WriteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_data_writer_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *WriteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WriteResponse) ProtoMessage() {}
+
+func (x *WriteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_data_writer_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WriteResponse.ProtoReflect.Descriptor instead.
+func (*WriteResponse) Descriptor() ([]byte, []int) {
+ return file_data_writer_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *WriteResponse) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+var File_data_writer_proto protoreflect.FileDescriptor
+
+var file_data_writer_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x22, 0x0a, 0x0c, 0x57, 0x72,
+ 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61,
+ 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x23,
+ 0x0a, 0x0d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
+ 0x78, 0x69, 0x64, 0x32, 0x42, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65,
+ 0x72, 0x12, 0x34, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61,
+ 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_data_writer_proto_rawDescOnce sync.Once
+ file_data_writer_proto_rawDescData = file_data_writer_proto_rawDesc
+)
+
+func file_data_writer_proto_rawDescGZIP() []byte {
+ file_data_writer_proto_rawDescOnce.Do(func() {
+ file_data_writer_proto_rawDescData = protoimpl.X.CompressGZIP(file_data_writer_proto_rawDescData)
+ })
+ return file_data_writer_proto_rawDescData
+}
+
+var file_data_writer_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_data_writer_proto_goTypes = []interface{}{
+ (*WriteRequest)(nil), // 0: proto.WriteRequest
+ (*WriteResponse)(nil), // 1: proto.WriteResponse
+}
+var file_data_writer_proto_depIdxs = []int32{
+ 0, // 0: proto.DataWriter.Write:input_type -> proto.WriteRequest
+ 1, // 1: proto.DataWriter.Write:output_type -> proto.WriteResponse
+ 1, // [1:2] is the sub-list for method output_type
+ 0, // [0:1] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_data_writer_proto_init() }
+func file_data_writer_proto_init() {
+ if File_data_writer_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_data_writer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*WriteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_data_writer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*WriteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_data_writer_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_data_writer_proto_goTypes,
+ DependencyIndexes: file_data_writer_proto_depIdxs,
+ MessageInfos: file_data_writer_proto_msgTypes,
+ }.Build()
+ File_data_writer_proto = out.File
+ file_data_writer_proto_rawDesc = nil
+ file_data_writer_proto_goTypes = nil
+ file_data_writer_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer.proto
new file mode 100644
index 00000000..ab0b0bad
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer.proto
@@ -0,0 +1,22 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+/**
+The Data Writer is responsible for writing arbitrary data to the blockchain. In turn, it will delegate this request to the TransactionBuilder and return the txid that it gets back.
+
+*/
+service DataWriter {
+ // Write data to the blockchain.
+ rpc Write (WriteRequest) returns (WriteResponse) {}
+}
+
+message WriteRequest {
+ repeated bytes data = 1; // One or more arrays of byte arrays containing the data you wish to write ([][]byte). Each byte array is written as a separate OP_PUSH.
+}
+
+message WriteResponse {
+ string txid = 1; // The transaction ID of the transaction that was successfully written to the bitcoin node.
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer_grpc.pb.go
new file mode 100644
index 00000000..736e494b
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/data_writer_grpc.pb.go
@@ -0,0 +1,103 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// DataWriterClient is the client API for DataWriter service.
+//
+// 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.
+type DataWriterClient interface {
+ // Write data to the blockchain.
+ Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error)
+}
+
+type dataWriterClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewDataWriterClient(cc grpc.ClientConnInterface) DataWriterClient {
+ return &dataWriterClient{cc}
+}
+
+func (c *dataWriterClient) Write(ctx context.Context, in *WriteRequest, opts ...grpc.CallOption) (*WriteResponse, error) {
+ out := new(WriteResponse)
+ err := c.cc.Invoke(ctx, "/proto.DataWriter/Write", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// DataWriterServer is the server API for DataWriter service.
+// All implementations must embed UnimplementedDataWriterServer
+// for forward compatibility
+type DataWriterServer interface {
+ // Write data to the blockchain.
+ Write(context.Context, *WriteRequest) (*WriteResponse, error)
+ mustEmbedUnimplementedDataWriterServer()
+}
+
+// UnimplementedDataWriterServer must be embedded to have forward compatible implementations.
+type UnimplementedDataWriterServer struct {
+}
+
+func (UnimplementedDataWriterServer) Write(context.Context, *WriteRequest) (*WriteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Write not implemented")
+}
+func (UnimplementedDataWriterServer) mustEmbedUnimplementedDataWriterServer() {}
+
+// UnsafeDataWriterServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to DataWriterServer will
+// result in compilation errors.
+type UnsafeDataWriterServer interface {
+ mustEmbedUnimplementedDataWriterServer()
+}
+
+func RegisterDataWriterServer(s grpc.ServiceRegistrar, srv DataWriterServer) {
+ s.RegisterService(&DataWriter_ServiceDesc, srv)
+}
+
+func _DataWriter_Write_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(WriteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(DataWriterServer).Write(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.DataWriter/Write",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(DataWriterServer).Write(ctx, req.(*WriteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// DataWriter_ServiceDesc is the grpc.ServiceDesc for DataWriter service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var DataWriter_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.DataWriter",
+ HandlerType: (*DataWriterServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Write",
+ Handler: _DataWriter_Write_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "data_writer.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/errs.go b/vendor/bitbucket.stressedsharks.com/plat/proto/errs.go
new file mode 100644
index 00000000..989584fa
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/errs.go
@@ -0,0 +1,80 @@
+package proto
+
+import (
+ "github.com/pkg/errors"
+)
+
+var (
+ // ErrNegativeBalance balance cannot be negative
+ ErrNegativeBalance = errors.New("balance cannot be negative")
+ // ErrEmptyTxid no txid
+ ErrEmptyTxid = errors.New("Txid field cannot be empty")
+ // ErrEmptySpendingTxid no spendingTxid
+ ErrEmptySpendingTxid = errors.New("SpendingTxid field cannot be empty")
+ // ErrEmptyData no data
+ ErrEmptyData = errors.New("data cannot be empty")
+ // ErrEmptyTimestamp no timestamp
+ ErrEmptyTimestamp = errors.New("timestamp cannot be empty")
+ // ErrEmptyLastTimestamp no lastTimestamp
+ ErrEmptyLastTimestamp = errors.New("lastTimestamp cannot be empty")
+ // ErrEmptyTransactionData no transaction data
+ ErrEmptyTransactionData = errors.New("transaction data field cannot be empty")
+ // ErrEmptyExtendedPrivateKey no extendedPrivateKey
+ ErrEmptyExtendedPrivateKey = errors.New("ExtendedPrivateKey field cannot be empty")
+ // ErrTxidInvalidLength txid incorrect length
+ ErrTxidInvalidLength = errors.New("Txid must have a length of 64 characters (32 bytes)")
+ // ErrSpendingTxidInvalidLength spendingTxid incorrect length
+ ErrSpendingTxidInvalidLength = errors.New("SpendingTxid must have a length of 64 characters (32 bytes)")
+ // ErrExtendedPrivateKeyInvalidLength ExtendedPrivateKey incorrect length
+ ErrExtendedPrivateKeyInvalidLength = errors.New("ExtendedPrivateKey must have a length of 111 characters")
+ // ErrTxidInvalidHex invalid txid hex
+ ErrTxidInvalidHex = errors.New("Txid field must be valid hex")
+ // ErrHashInvalidLength hash incorrect length
+ ErrHashInvalidLength = errors.New("hash message must have a length of 32 bytes")
+ // ErrIndexLessThanZero invalid index
+ ErrIndexLessThanZero = errors.New("Index must be greater than or equal to 0")
+ // ErrBlockHeightLessThanZero invalid blockHeight
+ ErrBlockHeightLessThanZero = errors.New("BlockHeight must be greater than or equal to 0")
+ // ErrKeyContextMissing keyContext is a required parameter
+ ErrKeyContextMissing = errors.New("keyContext param missing")
+ // ErrEncryptNoData no data
+ ErrEncryptNoData = errors.New("no data to encrypt")
+ // ErrDecryptNoData no data
+ ErrDecryptNoData = errors.New("no data to decrypt")
+ // ErrEmptyPublicKey empty public key
+ ErrEmptyPublicKey = errors.New("empty public key")
+ // ErrEmptySignature empty signature
+ ErrEmptySignature = errors.New("empty signature")
+ // ErrEmptyLockingSript empty lockingScript
+ ErrEmptyLockingSript = errors.New("empty lockingScript")
+ // ErrEmptySatoshis invalid satoshi amount
+ ErrEmptySatoshis = errors.New("satoshis must be greater than 0")
+ // ErrEmptyServiceName empty serviceName
+ ErrEmptyServiceName = errors.New("empty ServiceName")
+ // ErrServiceNameLength invalid serviceName length
+ ErrServiceNameLength = errors.New("ServiceName field must be less than or equal to 255 characters")
+ // ErrEmptySigner empty signer
+ ErrEmptySigner = errors.New("empty signer")
+ // ErrAddressFormat invalid address
+ ErrAddressFormat = errors.New("invalid Address format (see signing.nchain.com:9000)")
+ // ErrEmailFormat invalid email
+ ErrEmailFormat = errors.New("invalid email format")
+ // ErrPhoneNumberFormat invalid phone number
+ ErrPhoneNumberFormat = errors.New("invalid phoneNumber format, does not follow E.164 standard")
+ // ErrEmptyAlias empty alias
+ ErrEmptyAlias = errors.New("empty signer alias")
+ // ErrAliasLength invalid alias length
+ ErrAliasLength = errors.New("alias field must be less than or equal to 255 characters")
+ // ErrAliasFormat invalid alias format
+ ErrAliasFormat = errors.New("alias must only contain 0-9, a-z, A-Z, _ and -")
+ // ErrEmptyFunds empty funds
+ ErrEmptyFunds = errors.New("empty funds")
+ // ErrInvalidStartingPath invalid start path
+ ErrInvalidStartingPath = errors.New("paths must not start with /")
+ // ErrInvalidEndingPath invalid end path
+ ErrInvalidEndingPath = errors.New("paths must not end with /")
+ // ErrInvalidPathFormat invalid path format
+ ErrInvalidPathFormat = errors.New("path format must only contain 0-9, a-z, and A-Z separated by /")
+ // ErrInvalidDataWriterData invalid data format
+ ErrInvalidDataWriterData = errors.New(`invalid data format, must be follow this format: { "data": [ [65, 66], [67, 68] ] }`)
+)
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/fund.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/fund.pb.go
new file mode 100644
index 00000000..2c68fa42
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/fund.pb.go
@@ -0,0 +1,194 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: fund.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+//*
+//A Fund is a simple structure that holds information about a UTXO. This is used by the TransactionBuilder, SplittingService and FundingService.
+type Fund struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` // The transaction ID of the UTXO.
+ Index uint32 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` // The vout / n / index of the UTXO.
+ LockingScript []byte `protobuf:"bytes,3,opt,name=locking_script,json=lockingScript,proto3" json:"locking_script,omitempty"` // The Locking Script of the UTXO.
+ Satoshis uint64 `protobuf:"varint,4,opt,name=satoshis,proto3" json:"satoshis,omitempty"` // The value of the UTXO.
+ Signer *KeyContext `protobuf:"bytes,5,opt,name=signer,proto3" json:"signer,omitempty"`
+}
+
+func (x *Fund) Reset() {
+ *x = Fund{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_fund_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Fund) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Fund) ProtoMessage() {}
+
+func (x *Fund) ProtoReflect() protoreflect.Message {
+ mi := &file_fund_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Fund.ProtoReflect.Descriptor instead.
+func (*Fund) Descriptor() ([]byte, []int) {
+ return file_fund_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Fund) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+func (x *Fund) GetIndex() uint32 {
+ if x != nil {
+ return x.Index
+ }
+ return 0
+}
+
+func (x *Fund) GetLockingScript() []byte {
+ if x != nil {
+ return x.LockingScript
+ }
+ return nil
+}
+
+func (x *Fund) GetSatoshis() uint64 {
+ if x != nil {
+ return x.Satoshis
+ }
+ return 0
+}
+
+func (x *Fund) GetSigner() *KeyContext {
+ if x != nil {
+ return x.Signer
+ }
+ return nil
+}
+
+var File_fund_proto protoreflect.FileDescriptor
+
+var file_fund_proto_rawDesc = []byte{
+ 0x0a, 0x0a, 0x66, 0x75, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x01, 0x0a, 0x04, 0x46, 0x75, 0x6e, 0x64, 0x12,
+ 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
+ 0x78, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x0c, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x61, 0x74, 0x6f, 0x73, 0x68, 0x69, 0x73, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x04, 0x52, 0x08, 0x73, 0x61, 0x74, 0x6f, 0x73, 0x68, 0x69, 0x73, 0x12, 0x29, 0x0a, 0x06,
+ 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52,
+ 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61,
+ 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_fund_proto_rawDescOnce sync.Once
+ file_fund_proto_rawDescData = file_fund_proto_rawDesc
+)
+
+func file_fund_proto_rawDescGZIP() []byte {
+ file_fund_proto_rawDescOnce.Do(func() {
+ file_fund_proto_rawDescData = protoimpl.X.CompressGZIP(file_fund_proto_rawDescData)
+ })
+ return file_fund_proto_rawDescData
+}
+
+var file_fund_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_fund_proto_goTypes = []interface{}{
+ (*Fund)(nil), // 0: proto.Fund
+ (*KeyContext)(nil), // 1: proto.KeyContext
+}
+var file_fund_proto_depIdxs = []int32{
+ 1, // 0: proto.Fund.signer:type_name -> proto.KeyContext
+ 1, // [1:1] is the sub-list for method output_type
+ 1, // [1:1] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_fund_proto_init() }
+func file_fund_proto_init() {
+ if File_fund_proto != nil {
+ return
+ }
+ file_key_context_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_fund_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Fund); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_fund_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_fund_proto_goTypes,
+ DependencyIndexes: file_fund_proto_depIdxs,
+ MessageInfos: file_fund_proto_msgTypes,
+ }.Build()
+ File_fund_proto = out.File
+ file_fund_proto_rawDesc = nil
+ file_fund_proto_goTypes = nil
+ file_fund_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/fund.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/fund.proto
new file mode 100644
index 00000000..6feea311
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/fund.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+
+import "key_context.proto";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+/**
+A Fund is a simple structure that holds information about a UTXO. This is used by the TransactionBuilder, SplittingService and FundingService.
+*/
+message Fund {
+ string txid = 1; // The transaction ID of the UTXO.
+ uint32 index = 2; // The vout / n / index of the UTXO.
+ bytes locking_script = 3; // The Locking Script of the UTXO.
+ uint64 satoshis = 4; // The value of the UTXO.
+ KeyContext signer = 5;
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service.pb.go
new file mode 100644
index 00000000..a1ab47cd
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service.pb.go
@@ -0,0 +1,961 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: funding_service.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+// An empty request
+type GetBalanceRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+}
+
+func (x *GetBalanceRequest) Reset() {
+ *x = GetBalanceRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetBalanceRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetBalanceRequest) ProtoMessage() {}
+
+func (x *GetBalanceRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetBalanceRequest.ProtoReflect.Descriptor instead.
+func (*GetBalanceRequest) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GetBalanceRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+type GetBalanceResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Balance int64 `protobuf:"varint,1,opt,name=balance,proto3" json:"balance,omitempty"`
+}
+
+func (x *GetBalanceResponse) Reset() {
+ *x = GetBalanceResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetBalanceResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetBalanceResponse) ProtoMessage() {}
+
+func (x *GetBalanceResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetBalanceResponse.ProtoReflect.Descriptor instead.
+func (*GetBalanceResponse) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GetBalanceResponse) GetBalance() int64 {
+ if x != nil {
+ return x.Balance
+ }
+ return 0
+}
+
+type AddFundRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Fund *Fund `protobuf:"bytes,1,opt,name=fund,proto3" json:"fund,omitempty"`
+}
+
+func (x *AddFundRequest) Reset() {
+ *x = AddFundRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddFundRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddFundRequest) ProtoMessage() {}
+
+func (x *AddFundRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AddFundRequest.ProtoReflect.Descriptor instead.
+func (*AddFundRequest) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *AddFundRequest) GetFund() *Fund {
+ if x != nil {
+ return x.Fund
+ }
+ return nil
+}
+
+// An empty response
+type AddFundResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *AddFundResponse) Reset() {
+ *x = AddFundResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddFundResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddFundResponse) ProtoMessage() {}
+
+func (x *AddFundResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AddFundResponse.ProtoReflect.Descriptor instead.
+func (*AddFundResponse) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{3}
+}
+
+type GetFundsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ OutputValue uint64 `protobuf:"varint,1,opt,name=output_value,json=outputValue,proto3" json:"output_value,omitempty"` // The amount of money (in satoshis) to be spent in the target transaction.
+ DataBytes uint64 `protobuf:"varint,2,opt,name=data_bytes,json=dataBytes,proto3" json:"data_bytes,omitempty"` // The length (in bytes) of the data (OP_RETURN) part(s) in the target transaction.
+ TotalP2PkhOutputs uint64 `protobuf:"varint,3,opt,name=total_p2pkh_outputs,json=totalP2pkhOutputs,proto3" json:"total_p2pkh_outputs,omitempty"` // The total number of P2PKH outputs in the target transaction.
+ TotalDataOutputs uint64 `protobuf:"varint,4,opt,name=total_data_outputs,json=totalDataOutputs,proto3" json:"total_data_outputs,omitempty"` // The total number of data (OP_RETURN) outputs in the target transaction.
+ MinP2PkhInputs uint64 `protobuf:"varint,5,opt,name=min_p2pkh_inputs,json=minP2pkhInputs,proto3" json:"min_p2pkh_inputs,omitempty"` // The minimum number of P2PKH inputs in the target transaction.
+ KeyContext *KeyContext `protobuf:"bytes,6,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"` // The override alias we want to get the funds for
+}
+
+func (x *GetFundsRequest) Reset() {
+ *x = GetFundsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetFundsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetFundsRequest) ProtoMessage() {}
+
+func (x *GetFundsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetFundsRequest.ProtoReflect.Descriptor instead.
+func (*GetFundsRequest) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GetFundsRequest) GetOutputValue() uint64 {
+ if x != nil {
+ return x.OutputValue
+ }
+ return 0
+}
+
+func (x *GetFundsRequest) GetDataBytes() uint64 {
+ if x != nil {
+ return x.DataBytes
+ }
+ return 0
+}
+
+func (x *GetFundsRequest) GetTotalP2PkhOutputs() uint64 {
+ if x != nil {
+ return x.TotalP2PkhOutputs
+ }
+ return 0
+}
+
+func (x *GetFundsRequest) GetTotalDataOutputs() uint64 {
+ if x != nil {
+ return x.TotalDataOutputs
+ }
+ return 0
+}
+
+func (x *GetFundsRequest) GetMinP2PkhInputs() uint64 {
+ if x != nil {
+ return x.MinP2PkhInputs
+ }
+ return 0
+}
+
+func (x *GetFundsRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+type GetFundsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Funds []*Fund `protobuf:"bytes,1,rep,name=funds,proto3" json:"funds,omitempty"` // A list of funds.
+ Change *Payment `protobuf:"bytes,2,opt,name=change,proto3" json:"change,omitempty"` // A Payment type (address + satoshis) to be used to send the change left over back to.
+ StdFeePaid uint64 `protobuf:"varint,3,opt,name=std_fee_paid,json=stdFeePaid,proto3" json:"std_fee_paid,omitempty"` // The fees paid for the standard fee type.
+ DataFeePaid uint64 `protobuf:"varint,4,opt,name=data_fee_paid,json=dataFeePaid,proto3" json:"data_fee_paid,omitempty"` // The fees paid for the data fee type.
+}
+
+func (x *GetFundsResponse) Reset() {
+ *x = GetFundsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetFundsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetFundsResponse) ProtoMessage() {}
+
+func (x *GetFundsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetFundsResponse.ProtoReflect.Descriptor instead.
+func (*GetFundsResponse) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GetFundsResponse) GetFunds() []*Fund {
+ if x != nil {
+ return x.Funds
+ }
+ return nil
+}
+
+func (x *GetFundsResponse) GetChange() *Payment {
+ if x != nil {
+ return x.Change
+ }
+ return nil
+}
+
+func (x *GetFundsResponse) GetStdFeePaid() uint64 {
+ if x != nil {
+ return x.StdFeePaid
+ }
+ return 0
+}
+
+func (x *GetFundsResponse) GetDataFeePaid() uint64 {
+ if x != nil {
+ return x.DataFeePaid
+ }
+ return 0
+}
+
+type SpendFundsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"` // This is an array of bytes containing the bitcoin transaction itself.
+}
+
+func (x *SpendFundsRequest) Reset() {
+ *x = SpendFundsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SpendFundsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SpendFundsRequest) ProtoMessage() {}
+
+func (x *SpendFundsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SpendFundsRequest.ProtoReflect.Descriptor instead.
+func (*SpendFundsRequest) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *SpendFundsRequest) GetTx() []byte {
+ if x != nil {
+ return x.Tx
+ }
+ return nil
+}
+
+type SpendFundsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` // The transaction ID of the transaction that was successfully written to the bitcoin node.
+ Status TransactionStatus `protobuf:"varint,2,opt,name=status,proto3,enum=proto.TransactionStatus" json:"status,omitempty"` // The status of the tx submitted in the broadcast request
+}
+
+func (x *SpendFundsResponse) Reset() {
+ *x = SpendFundsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SpendFundsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SpendFundsResponse) ProtoMessage() {}
+
+func (x *SpendFundsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SpendFundsResponse.ProtoReflect.Descriptor instead.
+func (*SpendFundsResponse) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *SpendFundsResponse) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+func (x *SpendFundsResponse) GetStatus() TransactionStatus {
+ if x != nil {
+ return x.Status
+ }
+ return TransactionStatus_FAILURE
+}
+
+type AddAndSplitFundRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Deprecated: Do not use.
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` // The txid of the tx containing the fund to split.
+ Denomination uint64 `protobuf:"varint,2,opt,name=denomination,proto3" json:"denomination,omitempty"` // The size of the split transactions (satoshis). A default setting will be used if not provided.
+ Index uint32 `protobuf:"varint,3,opt,name=index,proto3" json:"index,omitempty"` // Optional. Index on which the fund is going to be split. Default: 0
+ HasIndex bool `protobuf:"varint,4,opt,name=hasIndex,proto3" json:"hasIndex,omitempty"` // if true we will get the output by index, otherwise we fall back to a keycontext address lookup
+ KeyContext *KeyContext `protobuf:"bytes,5,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"` // Optional. If supplied and hasIndex is false we will read an address using keycontext, otherwise it will be checked from config.
+ TxHex string `protobuf:"bytes,6,opt,name=tx_hex,json=txHex,proto3" json:"tx_hex,omitempty"` // The tx containing the fund to split. Required except on regtest environment.
+}
+
+func (x *AddAndSplitFundRequest) Reset() {
+ *x = AddAndSplitFundRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddAndSplitFundRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddAndSplitFundRequest) ProtoMessage() {}
+
+func (x *AddAndSplitFundRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AddAndSplitFundRequest.ProtoReflect.Descriptor instead.
+func (*AddAndSplitFundRequest) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{8}
+}
+
+// Deprecated: Do not use.
+func (x *AddAndSplitFundRequest) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+func (x *AddAndSplitFundRequest) GetDenomination() uint64 {
+ if x != nil {
+ return x.Denomination
+ }
+ return 0
+}
+
+func (x *AddAndSplitFundRequest) GetIndex() uint32 {
+ if x != nil {
+ return x.Index
+ }
+ return 0
+}
+
+func (x *AddAndSplitFundRequest) GetHasIndex() bool {
+ if x != nil {
+ return x.HasIndex
+ }
+ return false
+}
+
+func (x *AddAndSplitFundRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+func (x *AddAndSplitFundRequest) GetTxHex() string {
+ if x != nil {
+ return x.TxHex
+ }
+ return ""
+}
+
+type AddAndSplitFundResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ TransactionCount uint32 `protobuf:"varint,1,opt,name=transaction_count,json=transactionCount,proto3" json:"transaction_count,omitempty"`
+ OutputCount uint32 `protobuf:"varint,2,opt,name=output_count,json=outputCount,proto3" json:"output_count,omitempty"`
+ TotalValue uint64 `protobuf:"varint,3,opt,name=total_value,json=totalValue,proto3" json:"total_value,omitempty"`
+ ChangeTxid string `protobuf:"bytes,4,opt,name=change_txid,json=changeTxid,proto3" json:"change_txid,omitempty"`
+ ChangeValue uint64 `protobuf:"varint,5,opt,name=change_value,json=changeValue,proto3" json:"change_value,omitempty"`
+ Warnings []string `protobuf:"bytes,6,rep,name=warnings,proto3" json:"warnings,omitempty"`
+}
+
+func (x *AddAndSplitFundResponse) Reset() {
+ *x = AddAndSplitFundResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_funding_service_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AddAndSplitFundResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddAndSplitFundResponse) ProtoMessage() {}
+
+func (x *AddAndSplitFundResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_funding_service_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AddAndSplitFundResponse.ProtoReflect.Descriptor instead.
+func (*AddAndSplitFundResponse) Descriptor() ([]byte, []int) {
+ return file_funding_service_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *AddAndSplitFundResponse) GetTransactionCount() uint32 {
+ if x != nil {
+ return x.TransactionCount
+ }
+ return 0
+}
+
+func (x *AddAndSplitFundResponse) GetOutputCount() uint32 {
+ if x != nil {
+ return x.OutputCount
+ }
+ return 0
+}
+
+func (x *AddAndSplitFundResponse) GetTotalValue() uint64 {
+ if x != nil {
+ return x.TotalValue
+ }
+ return 0
+}
+
+func (x *AddAndSplitFundResponse) GetChangeTxid() string {
+ if x != nil {
+ return x.ChangeTxid
+ }
+ return ""
+}
+
+func (x *AddAndSplitFundResponse) GetChangeValue() uint64 {
+ if x != nil {
+ return x.ChangeValue
+ }
+ return 0
+}
+
+func (x *AddAndSplitFundResponse) GetWarnings() []string {
+ if x != nil {
+ return x.Warnings
+ }
+ return nil
+}
+
+var File_funding_service_proto protoreflect.FileDescriptor
+
+var file_funding_service_proto_rawDesc = []byte{
+ 0x0a, 0x15, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a,
+ 0x66, 0x75, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x70, 0x61, 0x79, 0x6d,
+ 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x62, 0x72,
+ 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
+ 0x47, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65,
+ 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42,
+ 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18,
+ 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x31, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x46,
+ 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x75,
+ 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x52, 0x04, 0x66, 0x75, 0x6e, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x41,
+ 0x64, 0x64, 0x46, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8f,
+ 0x02, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x62, 0x79,
+ 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x42,
+ 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x32,
+ 0x70, 0x6b, 0x68, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x04, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x32, 0x70, 0x6b, 0x68, 0x4f, 0x75, 0x74,
+ 0x70, 0x75, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, 0x61,
+ 0x74, 0x61, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04,
+ 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x75, 0x74, 0x70, 0x75,
+ 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x6b, 0x68, 0x5f,
+ 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6d, 0x69,
+ 0x6e, 0x50, 0x32, 0x70, 0x6b, 0x68, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x0b,
+ 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+ 0x22, 0xa3, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x66, 0x75, 0x6e, 0x64, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x75, 0x6e,
+ 0x64, 0x52, 0x05, 0x66, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x74, 0x64, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x61, 0x69, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x74, 0x64, 0x46, 0x65, 0x65, 0x50, 0x61,
+ 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x70,
+ 0x61, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x46,
+ 0x65, 0x65, 0x50, 0x61, 0x69, 0x64, 0x22, 0x23, 0x0a, 0x11, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x46,
+ 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x74,
+ 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x74, 0x78, 0x22, 0x5a, 0x0a, 0x12, 0x53,
+ 0x70, 0x65, 0x6e, 0x64, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72,
+ 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+ 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x41,
+ 0x6e, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x16, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x65,
+ 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
+ 0x52, 0x0c, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14,
+ 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78,
+ 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65,
+ 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x78, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x78, 0x48, 0x65, 0x78, 0x22, 0xea, 0x01, 0x0a, 0x17,
+ 0x41, 0x64, 0x64, 0x41, 0x6e, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0d, 0x52, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x63,
+ 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70,
+ 0x75, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c,
+ 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x74, 0x6f,
+ 0x74, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x78, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61,
+ 0x6e, 0x67, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52,
+ 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+ 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,
+ 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x32, 0xe9, 0x02, 0x0a, 0x0e, 0x46, 0x75, 0x6e,
+ 0x64, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x47,
+ 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x42,
+ 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6e, 0x64, 0x12, 0x15, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x46, 0x75,
+ 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x08,
+ 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x64,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x53,
+ 0x70, 0x65, 0x6e, 0x64, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x70, 0x65, 0x6e,
+ 0x64, 0x46, 0x75, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+ 0x12, 0x52, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x41, 0x6e, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x46,
+ 0x75, 0x6e, 0x64, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x41,
+ 0x6e, 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x6e,
+ 0x64, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x46, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+ 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_funding_service_proto_rawDescOnce sync.Once
+ file_funding_service_proto_rawDescData = file_funding_service_proto_rawDesc
+)
+
+func file_funding_service_proto_rawDescGZIP() []byte {
+ file_funding_service_proto_rawDescOnce.Do(func() {
+ file_funding_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_funding_service_proto_rawDescData)
+ })
+ return file_funding_service_proto_rawDescData
+}
+
+var file_funding_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
+var file_funding_service_proto_goTypes = []interface{}{
+ (*GetBalanceRequest)(nil), // 0: proto.GetBalanceRequest
+ (*GetBalanceResponse)(nil), // 1: proto.GetBalanceResponse
+ (*AddFundRequest)(nil), // 2: proto.AddFundRequest
+ (*AddFundResponse)(nil), // 3: proto.AddFundResponse
+ (*GetFundsRequest)(nil), // 4: proto.GetFundsRequest
+ (*GetFundsResponse)(nil), // 5: proto.GetFundsResponse
+ (*SpendFundsRequest)(nil), // 6: proto.SpendFundsRequest
+ (*SpendFundsResponse)(nil), // 7: proto.SpendFundsResponse
+ (*AddAndSplitFundRequest)(nil), // 8: proto.AddAndSplitFundRequest
+ (*AddAndSplitFundResponse)(nil), // 9: proto.AddAndSplitFundResponse
+ (*KeyContext)(nil), // 10: proto.KeyContext
+ (*Fund)(nil), // 11: proto.Fund
+ (*Payment)(nil), // 12: proto.Payment
+ (TransactionStatus)(0), // 13: proto.TransactionStatus
+}
+var file_funding_service_proto_depIdxs = []int32{
+ 10, // 0: proto.GetBalanceRequest.key_context:type_name -> proto.KeyContext
+ 11, // 1: proto.AddFundRequest.fund:type_name -> proto.Fund
+ 10, // 2: proto.GetFundsRequest.key_context:type_name -> proto.KeyContext
+ 11, // 3: proto.GetFundsResponse.funds:type_name -> proto.Fund
+ 12, // 4: proto.GetFundsResponse.change:type_name -> proto.Payment
+ 13, // 5: proto.SpendFundsResponse.status:type_name -> proto.TransactionStatus
+ 10, // 6: proto.AddAndSplitFundRequest.key_context:type_name -> proto.KeyContext
+ 0, // 7: proto.FundingService.GetBalance:input_type -> proto.GetBalanceRequest
+ 2, // 8: proto.FundingService.AddFund:input_type -> proto.AddFundRequest
+ 4, // 9: proto.FundingService.GetFunds:input_type -> proto.GetFundsRequest
+ 6, // 10: proto.FundingService.SpendFunds:input_type -> proto.SpendFundsRequest
+ 8, // 11: proto.FundingService.AddAndSplitFund:input_type -> proto.AddAndSplitFundRequest
+ 1, // 12: proto.FundingService.GetBalance:output_type -> proto.GetBalanceResponse
+ 3, // 13: proto.FundingService.AddFund:output_type -> proto.AddFundResponse
+ 5, // 14: proto.FundingService.GetFunds:output_type -> proto.GetFundsResponse
+ 7, // 15: proto.FundingService.SpendFunds:output_type -> proto.SpendFundsResponse
+ 9, // 16: proto.FundingService.AddAndSplitFund:output_type -> proto.AddAndSplitFundResponse
+ 12, // [12:17] is the sub-list for method output_type
+ 7, // [7:12] is the sub-list for method input_type
+ 7, // [7:7] is the sub-list for extension type_name
+ 7, // [7:7] is the sub-list for extension extendee
+ 0, // [0:7] is the sub-list for field type_name
+}
+
+func init() { file_funding_service_proto_init() }
+func file_funding_service_proto_init() {
+ if File_funding_service_proto != nil {
+ return
+ }
+ file_fund_proto_init()
+ file_payment_proto_init()
+ file_key_context_proto_init()
+ file_broadcaster_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_funding_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetBalanceRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetBalanceResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddFundRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddFundResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetFundsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetFundsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SpendFundsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SpendFundsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddAndSplitFundRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_funding_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AddAndSplitFundResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_funding_service_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 10,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_funding_service_proto_goTypes,
+ DependencyIndexes: file_funding_service_proto_depIdxs,
+ MessageInfos: file_funding_service_proto_msgTypes,
+ }.Build()
+ File_funding_service_proto = out.File
+ file_funding_service_proto_rawDesc = nil
+ file_funding_service_proto_goTypes = nil
+ file_funding_service_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service.proto
new file mode 100644
index 00000000..2e412f15
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service.proto
@@ -0,0 +1,90 @@
+syntax = "proto3";
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+import "fund.proto";
+import "payment.proto";
+import "key_context.proto";
+import "broadcaster.proto";
+
+/**
+The Funding Service is a gateway to a database that holds all spent and unspent transaction outputs that are part of this eco-system. Initially, funds are added to the database after they have been submitted to the blockchain, and clients of this service can reserve funds for use in their transactions.
+These reservations are marked as used when the Broadcaster has sent the spending transaction to the blockchain. Unused reservations will expire and are then available for re-use.
+*/
+service FundingService {
+ // Get the available balance for the requested key.
+ rpc GetBalance (GetBalanceRequest) returns (GetBalanceResponse) {}
+
+ // Add single fund to the funding service database.
+ rpc AddFund (AddFundRequest) returns (AddFundResponse) {}
+
+ // Request and reserve one or more funds to cover the cost of a transaction.
+ rpc GetFunds (GetFundsRequest) returns (GetFundsResponse) {}
+
+ // Spend the funds you previously requested (this will settle/broadcast them to the bloockchain).
+ rpc SpendFunds (SpendFundsRequest) returns (SpendFundsResponse) {}
+
+ // Add funds and split the UTXO (Unspent Transaction Output).
+ rpc AddAndSplitFund (AddAndSplitFundRequest) returns (AddAndSplitFundResponse) {}
+
+}
+
+// An empty request
+message GetBalanceRequest {
+ KeyContext key_context = 1;
+}
+
+message GetBalanceResponse {
+ int64 balance = 1;
+}
+
+message AddFundRequest {
+ Fund fund = 1;
+}
+
+// An empty response
+message AddFundResponse {}
+
+message GetFundsRequest {
+ uint64 output_value = 1; // The amount of money (in satoshis) to be spent in the target transaction.
+ uint64 data_bytes = 2; // The length (in bytes) of the data (OP_RETURN) part(s) in the target transaction.
+ uint64 total_p2pkh_outputs = 3; // The total number of P2PKH outputs in the target transaction.
+ uint64 total_data_outputs = 4; // The total number of data (OP_RETURN) outputs in the target transaction.
+ uint64 min_p2pkh_inputs = 5; // The minimum number of P2PKH inputs in the target transaction.
+ KeyContext key_context = 6; // The override alias we want to get the funds for
+}
+
+message GetFundsResponse {
+ repeated Fund funds = 1; // A list of funds.
+ Payment change = 2; // A Payment type (address + satoshis) to be used to send the change left over back to.
+ uint64 std_fee_paid = 3; // The fees paid for the standard fee type.
+ uint64 data_fee_paid = 4; // The fees paid for the data fee type.
+}
+
+message SpendFundsRequest {
+ bytes tx = 1; // This is an array of bytes containing the bitcoin transaction itself.
+}
+
+message SpendFundsResponse {
+ string txid = 1; // The transaction ID of the transaction that was successfully written to the bitcoin node.
+ TransactionStatus status = 2; // The status of the tx submitted in the broadcast request
+}
+
+message AddAndSplitFundRequest {
+ string txid = 1 [deprecated = true]; // The txid of the tx containing the fund to split.
+ uint64 denomination = 2; // The size of the split transactions (satoshis). A default setting will be used if not provided.
+ uint32 index = 3; // Optional. Index on which the fund is going to be split. Default: 0
+ bool hasIndex = 4; // if true we will get the output by index, otherwise we fall back to a keycontext address lookup
+ KeyContext key_context = 5; // Optional. If supplied and hasIndex is false we will read an address using keycontext, otherwise it will be checked from config.
+ string tx_hex = 6; // The tx containing the fund to split. Required except on regtest environment.
+}
+
+message AddAndSplitFundResponse {
+ uint32 transaction_count = 1;
+ uint32 output_count = 2;
+ uint64 total_value = 3;
+ string change_txid = 4;
+ uint64 change_value = 5;
+ repeated string warnings = 6;
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service_grpc.pb.go
new file mode 100644
index 00000000..2af0e0f4
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/funding_service_grpc.pb.go
@@ -0,0 +1,255 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// FundingServiceClient is the client API for FundingService service.
+//
+// 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.
+type FundingServiceClient interface {
+ // Get the available balance for the requested key.
+ GetBalance(ctx context.Context, in *GetBalanceRequest, opts ...grpc.CallOption) (*GetBalanceResponse, error)
+ // Add single fund to the funding service database.
+ AddFund(ctx context.Context, in *AddFundRequest, opts ...grpc.CallOption) (*AddFundResponse, error)
+ // Request and reserve one or more funds to cover the cost of a transaction.
+ GetFunds(ctx context.Context, in *GetFundsRequest, opts ...grpc.CallOption) (*GetFundsResponse, error)
+ // Spend the funds you previously requested (this will settle/broadcast them to the bloockchain).
+ SpendFunds(ctx context.Context, in *SpendFundsRequest, opts ...grpc.CallOption) (*SpendFundsResponse, error)
+ // Add funds and split the UTXO (Unspent Transaction Output).
+ AddAndSplitFund(ctx context.Context, in *AddAndSplitFundRequest, opts ...grpc.CallOption) (*AddAndSplitFundResponse, error)
+}
+
+type fundingServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewFundingServiceClient(cc grpc.ClientConnInterface) FundingServiceClient {
+ return &fundingServiceClient{cc}
+}
+
+func (c *fundingServiceClient) GetBalance(ctx context.Context, in *GetBalanceRequest, opts ...grpc.CallOption) (*GetBalanceResponse, error) {
+ out := new(GetBalanceResponse)
+ err := c.cc.Invoke(ctx, "/proto.FundingService/GetBalance", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *fundingServiceClient) AddFund(ctx context.Context, in *AddFundRequest, opts ...grpc.CallOption) (*AddFundResponse, error) {
+ out := new(AddFundResponse)
+ err := c.cc.Invoke(ctx, "/proto.FundingService/AddFund", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *fundingServiceClient) GetFunds(ctx context.Context, in *GetFundsRequest, opts ...grpc.CallOption) (*GetFundsResponse, error) {
+ out := new(GetFundsResponse)
+ err := c.cc.Invoke(ctx, "/proto.FundingService/GetFunds", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *fundingServiceClient) SpendFunds(ctx context.Context, in *SpendFundsRequest, opts ...grpc.CallOption) (*SpendFundsResponse, error) {
+ out := new(SpendFundsResponse)
+ err := c.cc.Invoke(ctx, "/proto.FundingService/SpendFunds", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *fundingServiceClient) AddAndSplitFund(ctx context.Context, in *AddAndSplitFundRequest, opts ...grpc.CallOption) (*AddAndSplitFundResponse, error) {
+ out := new(AddAndSplitFundResponse)
+ err := c.cc.Invoke(ctx, "/proto.FundingService/AddAndSplitFund", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// FundingServiceServer is the server API for FundingService service.
+// All implementations must embed UnimplementedFundingServiceServer
+// for forward compatibility
+type FundingServiceServer interface {
+ // Get the available balance for the requested key.
+ GetBalance(context.Context, *GetBalanceRequest) (*GetBalanceResponse, error)
+ // Add single fund to the funding service database.
+ AddFund(context.Context, *AddFundRequest) (*AddFundResponse, error)
+ // Request and reserve one or more funds to cover the cost of a transaction.
+ GetFunds(context.Context, *GetFundsRequest) (*GetFundsResponse, error)
+ // Spend the funds you previously requested (this will settle/broadcast them to the bloockchain).
+ SpendFunds(context.Context, *SpendFundsRequest) (*SpendFundsResponse, error)
+ // Add funds and split the UTXO (Unspent Transaction Output).
+ AddAndSplitFund(context.Context, *AddAndSplitFundRequest) (*AddAndSplitFundResponse, error)
+ mustEmbedUnimplementedFundingServiceServer()
+}
+
+// UnimplementedFundingServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedFundingServiceServer struct {
+}
+
+func (UnimplementedFundingServiceServer) GetBalance(context.Context, *GetBalanceRequest) (*GetBalanceResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetBalance not implemented")
+}
+func (UnimplementedFundingServiceServer) AddFund(context.Context, *AddFundRequest) (*AddFundResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method AddFund not implemented")
+}
+func (UnimplementedFundingServiceServer) GetFunds(context.Context, *GetFundsRequest) (*GetFundsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetFunds not implemented")
+}
+func (UnimplementedFundingServiceServer) SpendFunds(context.Context, *SpendFundsRequest) (*SpendFundsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method SpendFunds not implemented")
+}
+func (UnimplementedFundingServiceServer) AddAndSplitFund(context.Context, *AddAndSplitFundRequest) (*AddAndSplitFundResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method AddAndSplitFund not implemented")
+}
+func (UnimplementedFundingServiceServer) mustEmbedUnimplementedFundingServiceServer() {}
+
+// UnsafeFundingServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to FundingServiceServer will
+// result in compilation errors.
+type UnsafeFundingServiceServer interface {
+ mustEmbedUnimplementedFundingServiceServer()
+}
+
+func RegisterFundingServiceServer(s grpc.ServiceRegistrar, srv FundingServiceServer) {
+ s.RegisterService(&FundingService_ServiceDesc, srv)
+}
+
+func _FundingService_GetBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetBalanceRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FundingServiceServer).GetBalance(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.FundingService/GetBalance",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FundingServiceServer).GetBalance(ctx, req.(*GetBalanceRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _FundingService_AddFund_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(AddFundRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FundingServiceServer).AddFund(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.FundingService/AddFund",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FundingServiceServer).AddFund(ctx, req.(*AddFundRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _FundingService_GetFunds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetFundsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FundingServiceServer).GetFunds(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.FundingService/GetFunds",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FundingServiceServer).GetFunds(ctx, req.(*GetFundsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _FundingService_SpendFunds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(SpendFundsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FundingServiceServer).SpendFunds(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.FundingService/SpendFunds",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FundingServiceServer).SpendFunds(ctx, req.(*SpendFundsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _FundingService_AddAndSplitFund_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(AddAndSplitFundRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FundingServiceServer).AddAndSplitFund(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.FundingService/AddAndSplitFund",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FundingServiceServer).AddAndSplitFund(ctx, req.(*AddAndSplitFundRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// FundingService_ServiceDesc is the grpc.ServiceDesc for FundingService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var FundingService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.FundingService",
+ HandlerType: (*FundingServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetBalance",
+ Handler: _FundingService_GetBalance_Handler,
+ },
+ {
+ MethodName: "AddFund",
+ Handler: _FundingService_AddFund_Handler,
+ },
+ {
+ MethodName: "GetFunds",
+ Handler: _FundingService_GetFunds_Handler,
+ },
+ {
+ MethodName: "SpendFunds",
+ Handler: _FundingService_SpendFunds_Handler,
+ },
+ {
+ MethodName: "AddAndSplitFund",
+ Handler: _FundingService_AddAndSplitFund_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "funding_service.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/gen.sh b/vendor/bitbucket.stressedsharks.com/plat/proto/gen.sh
new file mode 100644
index 00000000..502e5734
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/gen.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+rm -rf docs
+mkdir -p docs/internal
+mkdir -p docs/external
+
+GO111MODULE="on" go get -u \
+ github.com/grpc-ecosystem/grpc-gateway@v1.16.0 \
+ github.com/golang/protobuf/protoc-gen-go
+
+go get github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc
+
+go install \
+ github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway \
+ github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger \
+ github.com/golang/protobuf/protoc-gen-go
+
+echo "==========================================================\nInternal:"
+protoc \
+ --proto_path=. \
+ --proto_path=$(go env GOPATH)/src \
+ --proto_path=$(go env GOPATH)/pkg/mod/github.com/grpc-ecosystem/grpc-gateway\@v1.16.0/third_party/googleapis \
+ --doc_out=./docs/internal \
+ --doc_opt=./bowstave.template.html,index.html \
+ --go_out=plugins=grpc:. \
+ *.proto
+
+echo "==========================================================\nExternal:"
+protoc \
+ --proto_path=. \
+ --proto_path=$(go env GOPATH)/src \
+ --proto_path=$(go env GOPATH)/pkg/mod/github.com/grpc-ecosystem/grpc-gateway\@v1.16.0/third_party/googleapis \
+ --doc_out=./docs/external \
+ --doc_opt=./bowstave.template.html,index.html \
+ --go_out=plugins=grpc:. \
+ crypto_service.proto keystore.proto meta_writer.proto meta_map.proto key_context.proto void.proto
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/go.mod b/vendor/bitbucket.stressedsharks.com/plat/proto/go.mod
new file mode 100644
index 00000000..7ae84a65
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/go.mod
@@ -0,0 +1,20 @@
+module bitbucket.stressedsharks.com/plat/proto
+
+go 1.16
+
+require (
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/golang/protobuf v1.4.3
+ github.com/google/go-cmp v0.5.4 // indirect
+ github.com/pkg/errors v0.9.1
+ github.com/stretchr/testify v1.7.0
+ github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0
+ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect
+ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect
+ golang.org/x/text v0.3.5 // indirect
+ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
+ google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b // indirect
+ google.golang.org/grpc v1.35.0
+ google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 // indirect
+ google.golang.org/protobuf v1.25.0
+)
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/go.sum b/vendor/bitbucket.stressedsharks.com/plat/proto/go.sum
new file mode 100644
index 00000000..22440e52
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/go.sum
@@ -0,0 +1,123 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY=
+github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b h1:zTeTu5p/EXQSqNJboHUw32wdNFYQTT9vSc+ibSpCoLk=
+google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8=
+google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE=
+google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/health.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/health.pb.go
new file mode 100644
index 00000000..baee2e67
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/health.pb.go
@@ -0,0 +1,278 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: health.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type HealthCheckResponse_ServingStatus int32
+
+const (
+ HealthCheckResponse_UNKNOWN HealthCheckResponse_ServingStatus = 0
+ HealthCheckResponse_SERVING HealthCheckResponse_ServingStatus = 1
+ HealthCheckResponse_NOT_SERVING HealthCheckResponse_ServingStatus = 2
+)
+
+// Enum value maps for HealthCheckResponse_ServingStatus.
+var (
+ HealthCheckResponse_ServingStatus_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "SERVING",
+ 2: "NOT_SERVING",
+ }
+ HealthCheckResponse_ServingStatus_value = map[string]int32{
+ "UNKNOWN": 0,
+ "SERVING": 1,
+ "NOT_SERVING": 2,
+ }
+)
+
+func (x HealthCheckResponse_ServingStatus) Enum() *HealthCheckResponse_ServingStatus {
+ p := new(HealthCheckResponse_ServingStatus)
+ *p = x
+ return p
+}
+
+func (x HealthCheckResponse_ServingStatus) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (HealthCheckResponse_ServingStatus) Descriptor() protoreflect.EnumDescriptor {
+ return file_health_proto_enumTypes[0].Descriptor()
+}
+
+func (HealthCheckResponse_ServingStatus) Type() protoreflect.EnumType {
+ return &file_health_proto_enumTypes[0]
+}
+
+func (x HealthCheckResponse_ServingStatus) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use HealthCheckResponse_ServingStatus.Descriptor instead.
+func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) {
+ return file_health_proto_rawDescGZIP(), []int{1, 0}
+}
+
+type HealthCheckRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
+}
+
+func (x *HealthCheckRequest) Reset() {
+ *x = HealthCheckRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_health_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HealthCheckRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HealthCheckRequest) ProtoMessage() {}
+
+func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_health_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead.
+func (*HealthCheckRequest) Descriptor() ([]byte, []int) {
+ return file_health_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *HealthCheckRequest) GetService() string {
+ if x != nil {
+ return x.Service
+ }
+ return ""
+}
+
+type HealthCheckResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=proto.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
+}
+
+func (x *HealthCheckResponse) Reset() {
+ *x = HealthCheckResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_health_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HealthCheckResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HealthCheckResponse) ProtoMessage() {}
+
+func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_health_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead.
+func (*HealthCheckResponse) Descriptor() ([]byte, []int) {
+ return file_health_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus {
+ if x != nil {
+ return x.Status
+ }
+ return HealthCheckResponse_UNKNOWN
+}
+
+var File_health_proto protoreflect.FileDescriptor
+
+var file_health_proto_rawDesc = []byte{
+ 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2e, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43,
+ 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68,
+ 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a,
+ 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63,
+ 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e,
+ 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
+ 0x3a, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a,
+ 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f,
+ 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x32, 0x48, 0x0a, 0x06, 0x48,
+ 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x3e, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x19,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65,
+ 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b,
+ 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b,
+ 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_health_proto_rawDescOnce sync.Once
+ file_health_proto_rawDescData = file_health_proto_rawDesc
+)
+
+func file_health_proto_rawDescGZIP() []byte {
+ file_health_proto_rawDescOnce.Do(func() {
+ file_health_proto_rawDescData = protoimpl.X.CompressGZIP(file_health_proto_rawDescData)
+ })
+ return file_health_proto_rawDescData
+}
+
+var file_health_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_health_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_health_proto_goTypes = []interface{}{
+ (HealthCheckResponse_ServingStatus)(0), // 0: proto.HealthCheckResponse.ServingStatus
+ (*HealthCheckRequest)(nil), // 1: proto.HealthCheckRequest
+ (*HealthCheckResponse)(nil), // 2: proto.HealthCheckResponse
+}
+var file_health_proto_depIdxs = []int32{
+ 0, // 0: proto.HealthCheckResponse.status:type_name -> proto.HealthCheckResponse.ServingStatus
+ 1, // 1: proto.Health.Check:input_type -> proto.HealthCheckRequest
+ 2, // 2: proto.Health.Check:output_type -> proto.HealthCheckResponse
+ 2, // [2:3] is the sub-list for method output_type
+ 1, // [1:2] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_health_proto_init() }
+func file_health_proto_init() {
+ if File_health_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_health_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HealthCheckRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_health_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HealthCheckResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_health_proto_rawDesc,
+ NumEnums: 1,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_health_proto_goTypes,
+ DependencyIndexes: file_health_proto_depIdxs,
+ EnumInfos: file_health_proto_enumTypes,
+ MessageInfos: file_health_proto_msgTypes,
+ }.Build()
+ File_health_proto = out.File
+ file_health_proto_rawDesc = nil
+ file_health_proto_goTypes = nil
+ file_health_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/health.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/health.proto
new file mode 100644
index 00000000..adfb7b41
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/health.proto
@@ -0,0 +1,22 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+message HealthCheckRequest {
+ string service = 1;
+}
+
+message HealthCheckResponse {
+ enum ServingStatus {
+ UNKNOWN = 0;
+ SERVING = 1;
+ NOT_SERVING = 2;
+ }
+ ServingStatus status = 1;
+}
+
+service Health {
+ rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/health_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/health_grpc.pb.go
new file mode 100644
index 00000000..82f870fc
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/health_grpc.pb.go
@@ -0,0 +1,101 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// HealthClient is the client API for Health service.
+//
+// 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.
+type HealthClient interface {
+ Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error)
+}
+
+type healthClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewHealthClient(cc grpc.ClientConnInterface) HealthClient {
+ return &healthClient{cc}
+}
+
+func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) {
+ out := new(HealthCheckResponse)
+ err := c.cc.Invoke(ctx, "/proto.Health/Check", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// HealthServer is the server API for Health service.
+// All implementations must embed UnimplementedHealthServer
+// for forward compatibility
+type HealthServer interface {
+ Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error)
+ mustEmbedUnimplementedHealthServer()
+}
+
+// UnimplementedHealthServer must be embedded to have forward compatible implementations.
+type UnimplementedHealthServer struct {
+}
+
+func (UnimplementedHealthServer) Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Check not implemented")
+}
+func (UnimplementedHealthServer) mustEmbedUnimplementedHealthServer() {}
+
+// UnsafeHealthServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to HealthServer will
+// result in compilation errors.
+type UnsafeHealthServer interface {
+ mustEmbedUnimplementedHealthServer()
+}
+
+func RegisterHealthServer(s grpc.ServiceRegistrar, srv HealthServer) {
+ s.RegisterService(&Health_ServiceDesc, srv)
+}
+
+func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(HealthCheckRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(HealthServer).Check(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Health/Check",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// Health_ServiceDesc is the grpc.ServiceDesc for Health service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Health_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.Health",
+ HandlerType: (*HealthServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Check",
+ Handler: _Health_Check_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "health.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/key_context.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/key_context.pb.go
new file mode 100644
index 00000000..2c809ff2
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/key_context.pb.go
@@ -0,0 +1,159 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: key_context.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+// The KeyContext structure holds information about a crypto service.
+type KeyContext struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` // The alias that represents the private key to use.
+ Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // The path to use.
+}
+
+func (x *KeyContext) Reset() {
+ *x = KeyContext{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_key_context_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *KeyContext) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyContext) ProtoMessage() {}
+
+func (x *KeyContext) ProtoReflect() protoreflect.Message {
+ mi := &file_key_context_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyContext.ProtoReflect.Descriptor instead.
+func (*KeyContext) Descriptor() ([]byte, []int) {
+ return file_key_context_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *KeyContext) GetAlias() string {
+ if x != nil {
+ return x.Alias
+ }
+ return ""
+}
+
+func (x *KeyContext) GetPath() string {
+ if x != nil {
+ return x.Path
+ }
+ return ""
+}
+
+var File_key_context_proto protoreflect.FileDescriptor
+
+var file_key_context_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x36, 0x0a, 0x0a, 0x4b, 0x65,
+ 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61,
+ 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x12,
+ 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61,
+ 0x74, 0x68, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
+ 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_key_context_proto_rawDescOnce sync.Once
+ file_key_context_proto_rawDescData = file_key_context_proto_rawDesc
+)
+
+func file_key_context_proto_rawDescGZIP() []byte {
+ file_key_context_proto_rawDescOnce.Do(func() {
+ file_key_context_proto_rawDescData = protoimpl.X.CompressGZIP(file_key_context_proto_rawDescData)
+ })
+ return file_key_context_proto_rawDescData
+}
+
+var file_key_context_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_key_context_proto_goTypes = []interface{}{
+ (*KeyContext)(nil), // 0: proto.KeyContext
+}
+var file_key_context_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_key_context_proto_init() }
+func file_key_context_proto_init() {
+ if File_key_context_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_key_context_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*KeyContext); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_key_context_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_key_context_proto_goTypes,
+ DependencyIndexes: file_key_context_proto_depIdxs,
+ MessageInfos: file_key_context_proto_msgTypes,
+ }.Build()
+ File_key_context_proto = out.File
+ file_key_context_proto_rawDesc = nil
+ file_key_context_proto_goTypes = nil
+ file_key_context_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/key_context.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/key_context.proto
new file mode 100644
index 00000000..e72542df
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/key_context.proto
@@ -0,0 +1,11 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+// The KeyContext structure holds information about a crypto service.
+message KeyContext {
+ string alias = 1; // The alias that represents the private key to use.
+ string path = 2; // The path to use.
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/keystore.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/keystore.pb.go
new file mode 100644
index 00000000..c836a007
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/keystore.pb.go
@@ -0,0 +1,343 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: keystore.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type GetPrivateKeyRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` // The alias that represents the private key to use (must be less than 256 characters).
+}
+
+func (x *GetPrivateKeyRequest) Reset() {
+ *x = GetPrivateKeyRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_keystore_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetPrivateKeyRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPrivateKeyRequest) ProtoMessage() {}
+
+func (x *GetPrivateKeyRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_keystore_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetPrivateKeyRequest.ProtoReflect.Descriptor instead.
+func (*GetPrivateKeyRequest) Descriptor() ([]byte, []int) {
+ return file_keystore_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GetPrivateKeyRequest) GetAlias() string {
+ if x != nil {
+ return x.Alias
+ }
+ return ""
+}
+
+type GetPrivateKeyResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ExtendedPrivateKey string `protobuf:"bytes,1,opt,name=extended_private_key,json=extendedPrivateKey,proto3" json:"extended_private_key,omitempty"` // The extended private key in xpriv format (will be exactly 111 characters).
+}
+
+func (x *GetPrivateKeyResponse) Reset() {
+ *x = GetPrivateKeyResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_keystore_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetPrivateKeyResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetPrivateKeyResponse) ProtoMessage() {}
+
+func (x *GetPrivateKeyResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_keystore_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetPrivateKeyResponse.ProtoReflect.Descriptor instead.
+func (*GetPrivateKeyResponse) Descriptor() ([]byte, []int) {
+ return file_keystore_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GetPrivateKeyResponse) GetExtendedPrivateKey() string {
+ if x != nil {
+ return x.ExtendedPrivateKey
+ }
+ return ""
+}
+
+type CreateAliasRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` // The alias associated with the private key
+}
+
+func (x *CreateAliasRequest) Reset() {
+ *x = CreateAliasRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_keystore_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CreateAliasRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateAliasRequest) ProtoMessage() {}
+
+func (x *CreateAliasRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_keystore_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateAliasRequest.ProtoReflect.Descriptor instead.
+func (*CreateAliasRequest) Descriptor() ([]byte, []int) {
+ return file_keystore_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *CreateAliasRequest) GetAlias() string {
+ if x != nil {
+ return x.Alias
+ }
+ return ""
+}
+
+type CreateAliasResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *CreateAliasResponse) Reset() {
+ *x = CreateAliasResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_keystore_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CreateAliasResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CreateAliasResponse) ProtoMessage() {}
+
+func (x *CreateAliasResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_keystore_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CreateAliasResponse.ProtoReflect.Descriptor instead.
+func (*CreateAliasResponse) Descriptor() ([]byte, []int) {
+ return file_keystore_proto_rawDescGZIP(), []int{3}
+}
+
+var File_keystore_proto protoreflect.FileDescriptor
+
+var file_keystore_proto_rawDesc = []byte{
+ 0x0a, 0x0e, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x72,
+ 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x49, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76,
+ 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30,
+ 0x0a, 0x14, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61,
+ 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79,
+ 0x22, 0x2a, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x15, 0x0a, 0x13,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x32, 0xa0, 0x01, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x12, 0x4c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65,
+ 0x79, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69,
+ 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74,
+ 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46,
+ 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x19, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x69, 0x61,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72,
+ 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_keystore_proto_rawDescOnce sync.Once
+ file_keystore_proto_rawDescData = file_keystore_proto_rawDesc
+)
+
+func file_keystore_proto_rawDescGZIP() []byte {
+ file_keystore_proto_rawDescOnce.Do(func() {
+ file_keystore_proto_rawDescData = protoimpl.X.CompressGZIP(file_keystore_proto_rawDescData)
+ })
+ return file_keystore_proto_rawDescData
+}
+
+var file_keystore_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_keystore_proto_goTypes = []interface{}{
+ (*GetPrivateKeyRequest)(nil), // 0: proto.GetPrivateKeyRequest
+ (*GetPrivateKeyResponse)(nil), // 1: proto.GetPrivateKeyResponse
+ (*CreateAliasRequest)(nil), // 2: proto.CreateAliasRequest
+ (*CreateAliasResponse)(nil), // 3: proto.CreateAliasResponse
+}
+var file_keystore_proto_depIdxs = []int32{
+ 0, // 0: proto.Keystore.GetPrivateKey:input_type -> proto.GetPrivateKeyRequest
+ 2, // 1: proto.Keystore.CreateAlias:input_type -> proto.CreateAliasRequest
+ 1, // 2: proto.Keystore.GetPrivateKey:output_type -> proto.GetPrivateKeyResponse
+ 3, // 3: proto.Keystore.CreateAlias:output_type -> proto.CreateAliasResponse
+ 2, // [2:4] is the sub-list for method output_type
+ 0, // [0:2] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_keystore_proto_init() }
+func file_keystore_proto_init() {
+ if File_keystore_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_keystore_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetPrivateKeyRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_keystore_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetPrivateKeyResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_keystore_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CreateAliasRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_keystore_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CreateAliasResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_keystore_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 4,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_keystore_proto_goTypes,
+ DependencyIndexes: file_keystore_proto_depIdxs,
+ MessageInfos: file_keystore_proto_msgTypes,
+ }.Build()
+ File_keystore_proto = out.File
+ file_keystore_proto_rawDesc = nil
+ file_keystore_proto_goTypes = nil
+ file_keystore_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/keystore.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/keystore.proto
new file mode 100644
index 00000000..52606e99
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/keystore.proto
@@ -0,0 +1,33 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+/**
+The Keystore holds private keys which can be requested via the GetPrivateKey API. Requests are only allowed from authorized and authenicated clients by using tokens, client-based SSL certificates or both.
+
+A new private key is created on the physical box where this service is running. Typical clients of the keystore are the Signing Service and the Crypto Service who request their respective private keys upon startup. This service does not need to be running at other times.
+*/
+service Keystore {
+ // Returns an extended private key.
+ rpc GetPrivateKey (GetPrivateKeyRequest) returns (GetPrivateKeyResponse) {}
+
+ //Creates a new private key with the given alias
+ rpc CreateAlias (CreateAliasRequest) returns (CreateAliasResponse) {}
+}
+
+message GetPrivateKeyRequest {
+ string alias = 1; // The alias that represents the private key to use (must be less than 256 characters).
+}
+
+message GetPrivateKeyResponse {
+ string extended_private_key = 1; // The extended private key in xpriv format (will be exactly 111 characters).
+}
+
+message CreateAliasRequest {
+ string alias = 1; // The alias associated with the private key
+}
+
+message CreateAliasResponse {
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/keystore_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/keystore_grpc.pb.go
new file mode 100644
index 00000000..5f072fba
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/keystore_grpc.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// KeystoreClient is the client API for Keystore service.
+//
+// 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.
+type KeystoreClient interface {
+ // Returns an extended private key.
+ GetPrivateKey(ctx context.Context, in *GetPrivateKeyRequest, opts ...grpc.CallOption) (*GetPrivateKeyResponse, error)
+ //Creates a new private key with the given alias
+ CreateAlias(ctx context.Context, in *CreateAliasRequest, opts ...grpc.CallOption) (*CreateAliasResponse, error)
+}
+
+type keystoreClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewKeystoreClient(cc grpc.ClientConnInterface) KeystoreClient {
+ return &keystoreClient{cc}
+}
+
+func (c *keystoreClient) GetPrivateKey(ctx context.Context, in *GetPrivateKeyRequest, opts ...grpc.CallOption) (*GetPrivateKeyResponse, error) {
+ out := new(GetPrivateKeyResponse)
+ err := c.cc.Invoke(ctx, "/proto.Keystore/GetPrivateKey", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *keystoreClient) CreateAlias(ctx context.Context, in *CreateAliasRequest, opts ...grpc.CallOption) (*CreateAliasResponse, error) {
+ out := new(CreateAliasResponse)
+ err := c.cc.Invoke(ctx, "/proto.Keystore/CreateAlias", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// KeystoreServer is the server API for Keystore service.
+// All implementations must embed UnimplementedKeystoreServer
+// for forward compatibility
+type KeystoreServer interface {
+ // Returns an extended private key.
+ GetPrivateKey(context.Context, *GetPrivateKeyRequest) (*GetPrivateKeyResponse, error)
+ //Creates a new private key with the given alias
+ CreateAlias(context.Context, *CreateAliasRequest) (*CreateAliasResponse, error)
+ mustEmbedUnimplementedKeystoreServer()
+}
+
+// UnimplementedKeystoreServer must be embedded to have forward compatible implementations.
+type UnimplementedKeystoreServer struct {
+}
+
+func (UnimplementedKeystoreServer) GetPrivateKey(context.Context, *GetPrivateKeyRequest) (*GetPrivateKeyResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetPrivateKey not implemented")
+}
+func (UnimplementedKeystoreServer) CreateAlias(context.Context, *CreateAliasRequest) (*CreateAliasResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method CreateAlias not implemented")
+}
+func (UnimplementedKeystoreServer) mustEmbedUnimplementedKeystoreServer() {}
+
+// UnsafeKeystoreServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to KeystoreServer will
+// result in compilation errors.
+type UnsafeKeystoreServer interface {
+ mustEmbedUnimplementedKeystoreServer()
+}
+
+func RegisterKeystoreServer(s grpc.ServiceRegistrar, srv KeystoreServer) {
+ s.RegisterService(&Keystore_ServiceDesc, srv)
+}
+
+func _Keystore_GetPrivateKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetPrivateKeyRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(KeystoreServer).GetPrivateKey(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Keystore/GetPrivateKey",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeystoreServer).GetPrivateKey(ctx, req.(*GetPrivateKeyRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Keystore_CreateAlias_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(CreateAliasRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(KeystoreServer).CreateAlias(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Keystore/CreateAlias",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeystoreServer).CreateAlias(ctx, req.(*CreateAliasRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// Keystore_ServiceDesc is the grpc.ServiceDesc for Keystore service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Keystore_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.Keystore",
+ HandlerType: (*KeystoreServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetPrivateKey",
+ Handler: _Keystore_GetPrivateKey_Handler,
+ },
+ {
+ MethodName: "CreateAlias",
+ Handler: _Keystore_CreateAlias_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "keystore.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map.pb.go
new file mode 100644
index 00000000..cb8b7fa1
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map.pb.go
@@ -0,0 +1,757 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: meta_map.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type CheckRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+}
+
+func (x *CheckRequest) Reset() {
+ *x = CheckRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CheckRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CheckRequest) ProtoMessage() {}
+
+func (x *CheckRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CheckRequest.ProtoReflect.Descriptor instead.
+func (*CheckRequest) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CheckRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+type CheckResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ParentTxid string `protobuf:"bytes,1,opt,name=parent_txid,json=parentTxid,proto3" json:"parent_txid,omitempty"`
+}
+
+func (x *CheckResponse) Reset() {
+ *x = CheckResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CheckResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CheckResponse) ProtoMessage() {}
+
+func (x *CheckResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CheckResponse.ProtoReflect.Descriptor instead.
+func (*CheckResponse) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *CheckResponse) GetParentTxid() string {
+ if x != nil {
+ return x.ParentTxid
+ }
+ return ""
+}
+
+type StoreRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+ Txid string `protobuf:"bytes,2,opt,name=txid,proto3" json:"txid,omitempty"` // The transaction ID of the transaction that was successfully written to the bitcoin node.
+}
+
+func (x *StoreRequest) Reset() {
+ *x = StoreRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StoreRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StoreRequest) ProtoMessage() {}
+
+func (x *StoreRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StoreRequest.ProtoReflect.Descriptor instead.
+func (*StoreRequest) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *StoreRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+func (x *StoreRequest) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+// An empty response
+type StoreResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *StoreResponse) Reset() {
+ *x = StoreResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StoreResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StoreResponse) ProtoMessage() {}
+
+func (x *StoreResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StoreResponse.ProtoReflect.Descriptor instead.
+func (*StoreResponse) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{3}
+}
+
+type MarkRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` // The transaction ID of the transaction that was successfully written to the bitcoin node.
+ BlockHeight uint32 `protobuf:"varint,2,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` // Optional - the block height that this transaction was seen in.
+}
+
+func (x *MarkRequest) Reset() {
+ *x = MarkRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MarkRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MarkRequest) ProtoMessage() {}
+
+func (x *MarkRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MarkRequest.ProtoReflect.Descriptor instead.
+func (*MarkRequest) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *MarkRequest) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+func (x *MarkRequest) GetBlockHeight() uint32 {
+ if x != nil {
+ return x.BlockHeight
+ }
+ return 0
+}
+
+// An empty response
+type MarkResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *MarkResponse) Reset() {
+ *x = MarkResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MarkResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MarkResponse) ProtoMessage() {}
+
+func (x *MarkResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MarkResponse.ProtoReflect.Descriptor instead.
+func (*MarkResponse) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{5}
+}
+
+type ReadRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ KeyContext *KeyContext `protobuf:"bytes,1,opt,name=key_context,json=keyContext,proto3" json:"key_context,omitempty"`
+ IncludeData bool `protobuf:"varint,2,opt,name=include_data,json=includeData,proto3" json:"include_data,omitempty"` // If true, the actual data for this transaction will be returned
+}
+
+func (x *ReadRequest) Reset() {
+ *x = ReadRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadRequest) ProtoMessage() {}
+
+func (x *ReadRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReadRequest.ProtoReflect.Descriptor instead.
+func (*ReadRequest) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *ReadRequest) GetKeyContext() *KeyContext {
+ if x != nil {
+ return x.KeyContext
+ }
+ return nil
+}
+
+func (x *ReadRequest) GetIncludeData() bool {
+ if x != nil {
+ return x.IncludeData
+ }
+ return false
+}
+
+type ReadResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"`
+ Marked bool `protobuf:"varint,2,opt,name=marked,proto3" json:"marked,omitempty"` // True indicates that this transaction has been seen on the blockchain
+ BlockHeight uint32 `protobuf:"varint,3,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` // The block height that this transaction is in, if it has been mined.
+ Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` // The data for this transaction.
+ Timestamp uint64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // The timestamp of this message
+ Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"`
+}
+
+func (x *ReadResponse) Reset() {
+ *x = ReadResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ReadResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReadResponse) ProtoMessage() {}
+
+func (x *ReadResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReadResponse.ProtoReflect.Descriptor instead.
+func (*ReadResponse) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *ReadResponse) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+func (x *ReadResponse) GetMarked() bool {
+ if x != nil {
+ return x.Marked
+ }
+ return false
+}
+
+func (x *ReadResponse) GetBlockHeight() uint32 {
+ if x != nil {
+ return x.BlockHeight
+ }
+ return 0
+}
+
+func (x *ReadResponse) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *ReadResponse) GetTimestamp() uint64 {
+ if x != nil {
+ return x.Timestamp
+ }
+ return 0
+}
+
+func (x *ReadResponse) GetPath() string {
+ if x != nil {
+ return x.Path
+ }
+ return ""
+}
+
+type SubscribeRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Alias string `protobuf:"bytes,1,opt,name=alias,proto3" json:"alias,omitempty"` // The alias that represents the private key to use.
+ LastTimestamp uint64 `protobuf:"varint,2,opt,name=last_timestamp,json=lastTimestamp,proto3" json:"last_timestamp,omitempty"` // The timestamp of the last successfully received ReadResponse.
+}
+
+func (x *SubscribeRequest) Reset() {
+ *x = SubscribeRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_map_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *SubscribeRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SubscribeRequest) ProtoMessage() {}
+
+func (x *SubscribeRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_map_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SubscribeRequest.ProtoReflect.Descriptor instead.
+func (*SubscribeRequest) Descriptor() ([]byte, []int) {
+ return file_meta_map_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *SubscribeRequest) GetAlias() string {
+ if x != nil {
+ return x.Alias
+ }
+ return ""
+}
+
+func (x *SubscribeRequest) GetLastTimestamp() uint64 {
+ if x != nil {
+ return x.LastTimestamp
+ }
+ return 0
+}
+
+var File_meta_map_proto protoreflect.FileDescriptor
+
+var file_meta_map_proto_rawDesc = []byte{
+ 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x6d, 0x61, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x42, 0x0a, 0x0c, 0x43, 0x68,
+ 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65,
+ 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x30,
+ 0x0a, 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x78, 0x69, 0x64,
+ 0x22, 0x56, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x32, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65,
+ 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x78, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x0a, 0x0b, 0x4d, 0x61, 0x72,
+ 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c,
+ 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22,
+ 0x0e, 0x0a, 0x0c, 0x4d, 0x61, 0x72, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x64, 0x0a, 0x0b, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32,
+ 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x61,
+ 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61,
+ 0x72, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, 0x61, 0x72, 0x6b,
+ 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67,
+ 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18,
+ 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x4f, 0x0a, 0x10, 0x53,
+ 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6c,
+ 0x61, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x32, 0x9a, 0x02, 0x0a,
+ 0x07, 0x4d, 0x65, 0x74, 0x61, 0x4d, 0x61, 0x70, 0x12, 0x34, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63,
+ 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43,
+ 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x34,
+ 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x12, 0x12, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12,
+ 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x61, 0x64,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x09, 0x53, 0x75,
+ 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74,
+ 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73,
+ 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_meta_map_proto_rawDescOnce sync.Once
+ file_meta_map_proto_rawDescData = file_meta_map_proto_rawDesc
+)
+
+func file_meta_map_proto_rawDescGZIP() []byte {
+ file_meta_map_proto_rawDescOnce.Do(func() {
+ file_meta_map_proto_rawDescData = protoimpl.X.CompressGZIP(file_meta_map_proto_rawDescData)
+ })
+ return file_meta_map_proto_rawDescData
+}
+
+var file_meta_map_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_meta_map_proto_goTypes = []interface{}{
+ (*CheckRequest)(nil), // 0: proto.CheckRequest
+ (*CheckResponse)(nil), // 1: proto.CheckResponse
+ (*StoreRequest)(nil), // 2: proto.StoreRequest
+ (*StoreResponse)(nil), // 3: proto.StoreResponse
+ (*MarkRequest)(nil), // 4: proto.MarkRequest
+ (*MarkResponse)(nil), // 5: proto.MarkResponse
+ (*ReadRequest)(nil), // 6: proto.ReadRequest
+ (*ReadResponse)(nil), // 7: proto.ReadResponse
+ (*SubscribeRequest)(nil), // 8: proto.SubscribeRequest
+ (*KeyContext)(nil), // 9: proto.KeyContext
+}
+var file_meta_map_proto_depIdxs = []int32{
+ 9, // 0: proto.CheckRequest.key_context:type_name -> proto.KeyContext
+ 9, // 1: proto.StoreRequest.key_context:type_name -> proto.KeyContext
+ 9, // 2: proto.ReadRequest.key_context:type_name -> proto.KeyContext
+ 0, // 3: proto.MetaMap.Check:input_type -> proto.CheckRequest
+ 2, // 4: proto.MetaMap.Store:input_type -> proto.StoreRequest
+ 4, // 5: proto.MetaMap.Mark:input_type -> proto.MarkRequest
+ 6, // 6: proto.MetaMap.Read:input_type -> proto.ReadRequest
+ 8, // 7: proto.MetaMap.Subscribe:input_type -> proto.SubscribeRequest
+ 1, // 8: proto.MetaMap.Check:output_type -> proto.CheckResponse
+ 3, // 9: proto.MetaMap.Store:output_type -> proto.StoreResponse
+ 5, // 10: proto.MetaMap.Mark:output_type -> proto.MarkResponse
+ 7, // 11: proto.MetaMap.Read:output_type -> proto.ReadResponse
+ 7, // 12: proto.MetaMap.Subscribe:output_type -> proto.ReadResponse
+ 8, // [8:13] is the sub-list for method output_type
+ 3, // [3:8] is the sub-list for method input_type
+ 3, // [3:3] is the sub-list for extension type_name
+ 3, // [3:3] is the sub-list for extension extendee
+ 0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_meta_map_proto_init() }
+func file_meta_map_proto_init() {
+ if File_meta_map_proto != nil {
+ return
+ }
+ file_key_context_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_meta_map_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CheckRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CheckResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StoreRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StoreResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MarkRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MarkResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ReadResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_map_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SubscribeRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_meta_map_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 9,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_meta_map_proto_goTypes,
+ DependencyIndexes: file_meta_map_proto_depIdxs,
+ MessageInfos: file_meta_map_proto_msgTypes,
+ }.Build()
+ File_meta_map_proto = out.File
+ file_meta_map_proto_rawDesc = nil
+ file_meta_map_proto_goTypes = nil
+ file_meta_map_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map.proto
new file mode 100644
index 00000000..df4ebca0
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map.proto
@@ -0,0 +1,63 @@
+syntax = "proto3";
+
+import "key_context.proto";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+service MetaMap {
+ // [INTERNAL] Returns the Metanet parent TxID for a specific context (alias & path).
+ rpc Check(CheckRequest) returns (CheckResponse) {}
+ // [INTERNAL] Stores the TxID of a Metanet node for a specific context (alias & path).
+ rpc Store (StoreRequest) returns (StoreResponse) {}
+ // [INTERNAL] Marks a TxID of a Metanet node at a specific blockchain height.
+ rpc Mark (MarkRequest) returns (MarkResponse) {}
+ // Returns the Metanet information at a specific context (alias & path).
+ rpc Read (ReadRequest) returns (ReadResponse) {}
+ // Subscribe to receive a stream of Metanet information related to a specific alias.
+ rpc Subscribe (SubscribeRequest) returns (stream ReadResponse) {}
+}
+
+message CheckRequest {
+ KeyContext key_context = 1;
+}
+
+message CheckResponse {
+ string parent_txid = 1;
+}
+
+message StoreRequest {
+ KeyContext key_context = 1;
+ string txid = 2; // The transaction ID of the transaction that was successfully written to the bitcoin node.
+}
+
+// An empty response
+message StoreResponse {}
+
+message MarkRequest {
+ string txid = 1; // The transaction ID of the transaction that was successfully written to the bitcoin node.
+ uint32 block_height = 2; // Optional - the block height that this transaction was seen in.
+}
+
+// An empty response
+message MarkResponse {}
+
+message ReadRequest {
+ KeyContext key_context = 1;
+ bool include_data = 2; // If true, the actual data for this transaction will be returned
+}
+
+message ReadResponse {
+ string txid = 1;
+ bool marked = 2; // True indicates that this transaction has been seen on the blockchain
+ uint32 block_height = 3; // The block height that this transaction is in, if it has been mined.
+ bytes data = 4; // The data for this transaction.
+ uint64 timestamp = 5; // The timestamp of this message
+ string path = 6;
+}
+
+message SubscribeRequest {
+ string alias = 1; // The alias that represents the private key to use.
+ uint64 last_timestamp = 2; // The timestamp of the last successfully received ReadResponse.
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map_grpc.pb.go
new file mode 100644
index 00000000..b5070d44
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_map_grpc.pb.go
@@ -0,0 +1,283 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// MetaMapClient is the client API for MetaMap service.
+//
+// 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.
+type MetaMapClient interface {
+ // [INTERNAL] Returns the Metanet parent TxID for a specific context (alias & path).
+ Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error)
+ // [INTERNAL] Stores the TxID of a Metanet node for a specific context (alias & path).
+ Store(ctx context.Context, in *StoreRequest, opts ...grpc.CallOption) (*StoreResponse, error)
+ // [INTERNAL] Marks a TxID of a Metanet node at a specific blockchain height.
+ Mark(ctx context.Context, in *MarkRequest, opts ...grpc.CallOption) (*MarkResponse, error)
+ // Returns the Metanet information at a specific context (alias & path).
+ Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*ReadResponse, error)
+ // Subscribe to receive a stream of Metanet information related to a specific alias.
+ Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (MetaMap_SubscribeClient, error)
+}
+
+type metaMapClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewMetaMapClient(cc grpc.ClientConnInterface) MetaMapClient {
+ return &metaMapClient{cc}
+}
+
+func (c *metaMapClient) Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error) {
+ out := new(CheckResponse)
+ err := c.cc.Invoke(ctx, "/proto.MetaMap/Check", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *metaMapClient) Store(ctx context.Context, in *StoreRequest, opts ...grpc.CallOption) (*StoreResponse, error) {
+ out := new(StoreResponse)
+ err := c.cc.Invoke(ctx, "/proto.MetaMap/Store", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *metaMapClient) Mark(ctx context.Context, in *MarkRequest, opts ...grpc.CallOption) (*MarkResponse, error) {
+ out := new(MarkResponse)
+ err := c.cc.Invoke(ctx, "/proto.MetaMap/Mark", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *metaMapClient) Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*ReadResponse, error) {
+ out := new(ReadResponse)
+ err := c.cc.Invoke(ctx, "/proto.MetaMap/Read", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *metaMapClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (MetaMap_SubscribeClient, error) {
+ stream, err := c.cc.NewStream(ctx, &MetaMap_ServiceDesc.Streams[0], "/proto.MetaMap/Subscribe", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &metaMapSubscribeClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type MetaMap_SubscribeClient interface {
+ Recv() (*ReadResponse, error)
+ grpc.ClientStream
+}
+
+type metaMapSubscribeClient struct {
+ grpc.ClientStream
+}
+
+func (x *metaMapSubscribeClient) Recv() (*ReadResponse, error) {
+ m := new(ReadResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+// MetaMapServer is the server API for MetaMap service.
+// All implementations must embed UnimplementedMetaMapServer
+// for forward compatibility
+type MetaMapServer interface {
+ // [INTERNAL] Returns the Metanet parent TxID for a specific context (alias & path).
+ Check(context.Context, *CheckRequest) (*CheckResponse, error)
+ // [INTERNAL] Stores the TxID of a Metanet node for a specific context (alias & path).
+ Store(context.Context, *StoreRequest) (*StoreResponse, error)
+ // [INTERNAL] Marks a TxID of a Metanet node at a specific blockchain height.
+ Mark(context.Context, *MarkRequest) (*MarkResponse, error)
+ // Returns the Metanet information at a specific context (alias & path).
+ Read(context.Context, *ReadRequest) (*ReadResponse, error)
+ // Subscribe to receive a stream of Metanet information related to a specific alias.
+ Subscribe(*SubscribeRequest, MetaMap_SubscribeServer) error
+ mustEmbedUnimplementedMetaMapServer()
+}
+
+// UnimplementedMetaMapServer must be embedded to have forward compatible implementations.
+type UnimplementedMetaMapServer struct {
+}
+
+func (UnimplementedMetaMapServer) Check(context.Context, *CheckRequest) (*CheckResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Check not implemented")
+}
+func (UnimplementedMetaMapServer) Store(context.Context, *StoreRequest) (*StoreResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Store not implemented")
+}
+func (UnimplementedMetaMapServer) Mark(context.Context, *MarkRequest) (*MarkResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Mark not implemented")
+}
+func (UnimplementedMetaMapServer) Read(context.Context, *ReadRequest) (*ReadResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Read not implemented")
+}
+func (UnimplementedMetaMapServer) Subscribe(*SubscribeRequest, MetaMap_SubscribeServer) error {
+ return status.Errorf(codes.Unimplemented, "method Subscribe not implemented")
+}
+func (UnimplementedMetaMapServer) mustEmbedUnimplementedMetaMapServer() {}
+
+// UnsafeMetaMapServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to MetaMapServer will
+// result in compilation errors.
+type UnsafeMetaMapServer interface {
+ mustEmbedUnimplementedMetaMapServer()
+}
+
+func RegisterMetaMapServer(s grpc.ServiceRegistrar, srv MetaMapServer) {
+ s.RegisterService(&MetaMap_ServiceDesc, srv)
+}
+
+func _MetaMap_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(CheckRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MetaMapServer).Check(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.MetaMap/Check",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MetaMapServer).Check(ctx, req.(*CheckRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MetaMap_Store_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(StoreRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MetaMapServer).Store(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.MetaMap/Store",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MetaMapServer).Store(ctx, req.(*StoreRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MetaMap_Mark_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MarkRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MetaMapServer).Mark(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.MetaMap/Mark",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MetaMapServer).Mark(ctx, req.(*MarkRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MetaMap_Read_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ReadRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MetaMapServer).Read(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.MetaMap/Read",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MetaMapServer).Read(ctx, req.(*ReadRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MetaMap_Subscribe_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(SubscribeRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(MetaMapServer).Subscribe(m, &metaMapSubscribeServer{stream})
+}
+
+type MetaMap_SubscribeServer interface {
+ Send(*ReadResponse) error
+ grpc.ServerStream
+}
+
+type metaMapSubscribeServer struct {
+ grpc.ServerStream
+}
+
+func (x *metaMapSubscribeServer) Send(m *ReadResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+// MetaMap_ServiceDesc is the grpc.ServiceDesc for MetaMap service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var MetaMap_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.MetaMap",
+ HandlerType: (*MetaMapServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Check",
+ Handler: _MetaMap_Check_Handler,
+ },
+ {
+ MethodName: "Store",
+ Handler: _MetaMap_Store_Handler,
+ },
+ {
+ MethodName: "Mark",
+ Handler: _MetaMap_Mark_Handler,
+ },
+ {
+ MethodName: "Read",
+ Handler: _MetaMap_Read_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "Subscribe",
+ Handler: _MetaMap_Subscribe_Handler,
+ ServerStreams: true,
+ },
+ },
+ Metadata: "meta_map.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer.pb.go
new file mode 100644
index 00000000..379f2a12
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer.pb.go
@@ -0,0 +1,247 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: meta_writer.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type MetaWriteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // The path to use.
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // The data to write to the metanet.
+ EncryptStructure bool `protobuf:"varint,3,opt,name=encrypt_structure,json=encryptStructure,proto3" json:"encrypt_structure,omitempty"` // Optionally, settings this to true will force the metanet structure to be encrypted.
+}
+
+func (x *MetaWriteRequest) Reset() {
+ *x = MetaWriteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_writer_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MetaWriteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MetaWriteRequest) ProtoMessage() {}
+
+func (x *MetaWriteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_writer_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MetaWriteRequest.ProtoReflect.Descriptor instead.
+func (*MetaWriteRequest) Descriptor() ([]byte, []int) {
+ return file_meta_writer_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *MetaWriteRequest) GetPath() string {
+ if x != nil {
+ return x.Path
+ }
+ return ""
+}
+
+func (x *MetaWriteRequest) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *MetaWriteRequest) GetEncryptStructure() bool {
+ if x != nil {
+ return x.EncryptStructure
+ }
+ return false
+}
+
+type MetaWriteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Txid string `protobuf:"bytes,1,opt,name=txid,proto3" json:"txid,omitempty"` // The transaction ID of the transaction that was successfully written to the bitcoin node.
+}
+
+func (x *MetaWriteResponse) Reset() {
+ *x = MetaWriteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_meta_writer_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MetaWriteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MetaWriteResponse) ProtoMessage() {}
+
+func (x *MetaWriteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_meta_writer_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MetaWriteResponse.ProtoReflect.Descriptor instead.
+func (*MetaWriteResponse) Descriptor() ([]byte, []int) {
+ return file_meta_writer_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *MetaWriteResponse) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+var File_meta_writer_proto protoreflect.FileDescriptor
+
+var file_meta_writer_proto_rawDesc = []byte{
+ 0x0a, 0x11, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x76, 0x6f, 0x69, 0x64,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x67, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72,
+ 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61,
+ 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12,
+ 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61,
+ 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x5f, 0x73, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65,
+ 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22,
+ 0x27, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x32, 0x88, 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x74,
+ 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x57,
+ 0x72, 0x69, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74,
+ 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x0e, 0x4d, 0x65, 0x74,
+ 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x17, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x6f, 0x69,
+ 0x64, 0x22, 0x00, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+ 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_meta_writer_proto_rawDescOnce sync.Once
+ file_meta_writer_proto_rawDescData = file_meta_writer_proto_rawDesc
+)
+
+func file_meta_writer_proto_rawDescGZIP() []byte {
+ file_meta_writer_proto_rawDescOnce.Do(func() {
+ file_meta_writer_proto_rawDescData = protoimpl.X.CompressGZIP(file_meta_writer_proto_rawDescData)
+ })
+ return file_meta_writer_proto_rawDescData
+}
+
+var file_meta_writer_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_meta_writer_proto_goTypes = []interface{}{
+ (*MetaWriteRequest)(nil), // 0: proto.MetaWriteRequest
+ (*MetaWriteResponse)(nil), // 1: proto.MetaWriteResponse
+ (*Void)(nil), // 2: proto.Void
+}
+var file_meta_writer_proto_depIdxs = []int32{
+ 0, // 0: proto.MetaWriter.MetaWrite:input_type -> proto.MetaWriteRequest
+ 0, // 1: proto.MetaWriter.MetaWriteAsync:input_type -> proto.MetaWriteRequest
+ 1, // 2: proto.MetaWriter.MetaWrite:output_type -> proto.MetaWriteResponse
+ 2, // 3: proto.MetaWriter.MetaWriteAsync:output_type -> proto.Void
+ 2, // [2:4] is the sub-list for method output_type
+ 0, // [0:2] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_meta_writer_proto_init() }
+func file_meta_writer_proto_init() {
+ if File_meta_writer_proto != nil {
+ return
+ }
+ file_void_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_meta_writer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MetaWriteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_meta_writer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MetaWriteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_meta_writer_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_meta_writer_proto_goTypes,
+ DependencyIndexes: file_meta_writer_proto_depIdxs,
+ MessageInfos: file_meta_writer_proto_msgTypes,
+ }.Build()
+ File_meta_writer_proto = out.File
+ file_meta_writer_proto_rawDesc = nil
+ file_meta_writer_proto_goTypes = nil
+ file_meta_writer_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer.proto
new file mode 100644
index 00000000..798090ef
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+import "void.proto";
+
+service MetaWriter {
+ // Writes data in the Metanet structure at a specific path and returns the TxID once it has been written.
+ rpc MetaWrite (MetaWriteRequest) returns (MetaWriteResponse) {}
+ // Writes data in the Metanet structure at a specific path.
+ rpc MetaWriteAsync (MetaWriteRequest) returns (Void) {}
+}
+
+message MetaWriteRequest {
+ string path = 1; // The path to use.
+ bytes data = 2; // The data to write to the metanet.
+ bool encrypt_structure = 3; // Optionally, settings this to true will force the metanet structure to be encrypted.
+}
+
+message MetaWriteResponse {
+ string txid = 1; // The transaction ID of the transaction that was successfully written to the bitcoin node.
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer_grpc.pb.go
new file mode 100644
index 00000000..97daa03d
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/meta_writer_grpc.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// MetaWriterClient is the client API for MetaWriter service.
+//
+// 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.
+type MetaWriterClient interface {
+ // Writes data in the Metanet structure at a specific path and returns the TxID once it has been written.
+ MetaWrite(ctx context.Context, in *MetaWriteRequest, opts ...grpc.CallOption) (*MetaWriteResponse, error)
+ // Writes data in the Metanet structure at a specific path.
+ MetaWriteAsync(ctx context.Context, in *MetaWriteRequest, opts ...grpc.CallOption) (*Void, error)
+}
+
+type metaWriterClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewMetaWriterClient(cc grpc.ClientConnInterface) MetaWriterClient {
+ return &metaWriterClient{cc}
+}
+
+func (c *metaWriterClient) MetaWrite(ctx context.Context, in *MetaWriteRequest, opts ...grpc.CallOption) (*MetaWriteResponse, error) {
+ out := new(MetaWriteResponse)
+ err := c.cc.Invoke(ctx, "/proto.MetaWriter/MetaWrite", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *metaWriterClient) MetaWriteAsync(ctx context.Context, in *MetaWriteRequest, opts ...grpc.CallOption) (*Void, error) {
+ out := new(Void)
+ err := c.cc.Invoke(ctx, "/proto.MetaWriter/MetaWriteAsync", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// MetaWriterServer is the server API for MetaWriter service.
+// All implementations must embed UnimplementedMetaWriterServer
+// for forward compatibility
+type MetaWriterServer interface {
+ // Writes data in the Metanet structure at a specific path and returns the TxID once it has been written.
+ MetaWrite(context.Context, *MetaWriteRequest) (*MetaWriteResponse, error)
+ // Writes data in the Metanet structure at a specific path.
+ MetaWriteAsync(context.Context, *MetaWriteRequest) (*Void, error)
+ mustEmbedUnimplementedMetaWriterServer()
+}
+
+// UnimplementedMetaWriterServer must be embedded to have forward compatible implementations.
+type UnimplementedMetaWriterServer struct {
+}
+
+func (UnimplementedMetaWriterServer) MetaWrite(context.Context, *MetaWriteRequest) (*MetaWriteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method MetaWrite not implemented")
+}
+func (UnimplementedMetaWriterServer) MetaWriteAsync(context.Context, *MetaWriteRequest) (*Void, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method MetaWriteAsync not implemented")
+}
+func (UnimplementedMetaWriterServer) mustEmbedUnimplementedMetaWriterServer() {}
+
+// UnsafeMetaWriterServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to MetaWriterServer will
+// result in compilation errors.
+type UnsafeMetaWriterServer interface {
+ mustEmbedUnimplementedMetaWriterServer()
+}
+
+func RegisterMetaWriterServer(s grpc.ServiceRegistrar, srv MetaWriterServer) {
+ s.RegisterService(&MetaWriter_ServiceDesc, srv)
+}
+
+func _MetaWriter_MetaWrite_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MetaWriteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MetaWriterServer).MetaWrite(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.MetaWriter/MetaWrite",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MetaWriterServer).MetaWrite(ctx, req.(*MetaWriteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MetaWriter_MetaWriteAsync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MetaWriteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MetaWriterServer).MetaWriteAsync(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.MetaWriter/MetaWriteAsync",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MetaWriterServer).MetaWriteAsync(ctx, req.(*MetaWriteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// MetaWriter_ServiceDesc is the grpc.ServiceDesc for MetaWriter service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var MetaWriter_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.MetaWriter",
+ HandlerType: (*MetaWriterServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "MetaWrite",
+ Handler: _MetaWriter_MetaWrite_Handler,
+ },
+ {
+ MethodName: "MetaWriteAsync",
+ Handler: _MetaWriter_MetaWriteAsync_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "meta_writer.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/notary.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/notary.pb.go
new file mode 100644
index 00000000..4ff091c2
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/notary.pb.go
@@ -0,0 +1,733 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: notary.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+// Notarise (hash) a file and write its hash to the blockchain.
+type NotaryWriteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ AccountId uint32 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // Internal account id of the user making the request.
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // The data to be notarised (i.e. the file contents).
+ Filename string `protobuf:"bytes,3,opt,name=filename,proto3" json:"filename,omitempty"` // The filename (will be written to notary db for later searching).
+}
+
+func (x *NotaryWriteRequest) Reset() {
+ *x = NotaryWriteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_notary_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NotaryWriteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NotaryWriteRequest) ProtoMessage() {}
+
+func (x *NotaryWriteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_notary_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NotaryWriteRequest.ProtoReflect.Descriptor instead.
+func (*NotaryWriteRequest) Descriptor() ([]byte, []int) {
+ return file_notary_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *NotaryWriteRequest) GetAccountId() uint32 {
+ if x != nil {
+ return x.AccountId
+ }
+ return 0
+}
+
+func (x *NotaryWriteRequest) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *NotaryWriteRequest) GetFilename() string {
+ if x != nil {
+ return x.Filename
+ }
+ return ""
+}
+
+// A record of a file which has been notarised.
+type NotaryFile struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` // The hash string of the file contents for the notarised file.
+ Txid string `protobuf:"bytes,2,opt,name=txid,proto3" json:"txid,omitempty"` // Transaction id where this file is notarised.
+ Filename string `protobuf:"bytes,3,opt,name=filename,proto3" json:"filename,omitempty"` // Filename of the file we notarised (from the request).
+ Contenttype string `protobuf:"bytes,4,opt,name=contenttype,proto3" json:"contenttype,omitempty"` // Mime type of the file e.g. text/plain.
+ Timecreated *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=timecreated,proto3" json:"timecreated,omitempty"` // When the file was notarised.
+ Blockheight uint32 `protobuf:"varint,6,opt,name=blockheight,proto3" json:"blockheight,omitempty"` // At which block height is the tx (0 if not known or not mined).
+ Confirmations uint32 `protobuf:"varint,7,opt,name=confirmations,proto3" json:"confirmations,omitempty"` // How many times is the tx confirmed (0 if not known or not mined).
+}
+
+func (x *NotaryFile) Reset() {
+ *x = NotaryFile{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_notary_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NotaryFile) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NotaryFile) ProtoMessage() {}
+
+func (x *NotaryFile) ProtoReflect() protoreflect.Message {
+ mi := &file_notary_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NotaryFile.ProtoReflect.Descriptor instead.
+func (*NotaryFile) Descriptor() ([]byte, []int) {
+ return file_notary_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *NotaryFile) GetHash() string {
+ if x != nil {
+ return x.Hash
+ }
+ return ""
+}
+
+func (x *NotaryFile) GetTxid() string {
+ if x != nil {
+ return x.Txid
+ }
+ return ""
+}
+
+func (x *NotaryFile) GetFilename() string {
+ if x != nil {
+ return x.Filename
+ }
+ return ""
+}
+
+func (x *NotaryFile) GetContenttype() string {
+ if x != nil {
+ return x.Contenttype
+ }
+ return ""
+}
+
+func (x *NotaryFile) GetTimecreated() *timestamppb.Timestamp {
+ if x != nil {
+ return x.Timecreated
+ }
+ return nil
+}
+
+func (x *NotaryFile) GetBlockheight() uint32 {
+ if x != nil {
+ return x.Blockheight
+ }
+ return 0
+}
+
+func (x *NotaryFile) GetConfirmations() uint32 {
+ if x != nil {
+ return x.Confirmations
+ }
+ return 0
+}
+
+// A request to verify that a given file contents have already been notarised.
+type NotaryVerifyRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // The data to be verified (i.e. the file contents).
+ AccountId uint32 `protobuf:"varint,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // Internal account id of the user making the request.
+}
+
+func (x *NotaryVerifyRequest) Reset() {
+ *x = NotaryVerifyRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_notary_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NotaryVerifyRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NotaryVerifyRequest) ProtoMessage() {}
+
+func (x *NotaryVerifyRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_notary_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NotaryVerifyRequest.ProtoReflect.Descriptor instead.
+func (*NotaryVerifyRequest) Descriptor() ([]byte, []int) {
+ return file_notary_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *NotaryVerifyRequest) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *NotaryVerifyRequest) GetAccountId() uint32 {
+ if x != nil {
+ return x.AccountId
+ }
+ return 0
+}
+
+// A request to get the details of files belonging to this user which match a given search term and date range.
+type NotaryGetFilesDetailsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ AccountId uint32 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // Internal account id of the user making the request (we search against their files only).
+ Search string `protobuf:"bytes,2,opt,name=search,proto3" json:"search,omitempty"` // Search term (we search against tx hash and filename).
+ CreatedFrom *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=createdFrom,proto3" json:"createdFrom,omitempty"` // Start date for our search.
+ CreatedTo *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=createdTo,proto3" json:"createdTo,omitempty"` // End date for our search.
+ Limit uint32 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"` // Limit records to return (sorted reverse date order).
+}
+
+func (x *NotaryGetFilesDetailsRequest) Reset() {
+ *x = NotaryGetFilesDetailsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_notary_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NotaryGetFilesDetailsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NotaryGetFilesDetailsRequest) ProtoMessage() {}
+
+func (x *NotaryGetFilesDetailsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_notary_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NotaryGetFilesDetailsRequest.ProtoReflect.Descriptor instead.
+func (*NotaryGetFilesDetailsRequest) Descriptor() ([]byte, []int) {
+ return file_notary_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *NotaryGetFilesDetailsRequest) GetAccountId() uint32 {
+ if x != nil {
+ return x.AccountId
+ }
+ return 0
+}
+
+func (x *NotaryGetFilesDetailsRequest) GetSearch() string {
+ if x != nil {
+ return x.Search
+ }
+ return ""
+}
+
+func (x *NotaryGetFilesDetailsRequest) GetCreatedFrom() *timestamppb.Timestamp {
+ if x != nil {
+ return x.CreatedFrom
+ }
+ return nil
+}
+
+func (x *NotaryGetFilesDetailsRequest) GetCreatedTo() *timestamppb.Timestamp {
+ if x != nil {
+ return x.CreatedTo
+ }
+ return nil
+}
+
+func (x *NotaryGetFilesDetailsRequest) GetLimit() uint32 {
+ if x != nil {
+ return x.Limit
+ }
+ return 0
+}
+
+// Get the file contents and details of a previously notarised file belonging to this user, where the file hash is known.
+type NotaryGetFileContentRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ AccountId uint32 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // Internal account id of the user making the request (we search against their files only).
+ FileHash string `protobuf:"bytes,2,opt,name=file_hash,json=fileHash,proto3" json:"file_hash,omitempty"` // Hash of the file whose contents we want to retrieve.
+}
+
+func (x *NotaryGetFileContentRequest) Reset() {
+ *x = NotaryGetFileContentRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_notary_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NotaryGetFileContentRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NotaryGetFileContentRequest) ProtoMessage() {}
+
+func (x *NotaryGetFileContentRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_notary_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NotaryGetFileContentRequest.ProtoReflect.Descriptor instead.
+func (*NotaryGetFileContentRequest) Descriptor() ([]byte, []int) {
+ return file_notary_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *NotaryGetFileContentRequest) GetAccountId() uint32 {
+ if x != nil {
+ return x.AccountId
+ }
+ return 0
+}
+
+func (x *NotaryGetFileContentRequest) GetFileHash() string {
+ if x != nil {
+ return x.FileHash
+ }
+ return ""
+}
+
+// Respond to a request to get a notarised file's contents and details from its hash.
+type NotaryFileContent struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ FileContent []byte `protobuf:"bytes,1,opt,name=file_content,json=fileContent,proto3" json:"file_content,omitempty"` // Content of the notarised file.
+ Filename string `protobuf:"bytes,2,opt,name=filename,proto3" json:"filename,omitempty"` // Filename of the notarised file.
+ Contenttype string `protobuf:"bytes,3,opt,name=contenttype,proto3" json:"contenttype,omitempty"` // Mime type of the notarised file e.g. text/plain.
+}
+
+func (x *NotaryFileContent) Reset() {
+ *x = NotaryFileContent{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_notary_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NotaryFileContent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NotaryFileContent) ProtoMessage() {}
+
+func (x *NotaryFileContent) ProtoReflect() protoreflect.Message {
+ mi := &file_notary_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NotaryFileContent.ProtoReflect.Descriptor instead.
+func (*NotaryFileContent) Descriptor() ([]byte, []int) {
+ return file_notary_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *NotaryFileContent) GetFileContent() []byte {
+ if x != nil {
+ return x.FileContent
+ }
+ return nil
+}
+
+func (x *NotaryFileContent) GetFilename() string {
+ if x != nil {
+ return x.Filename
+ }
+ return ""
+}
+
+func (x *NotaryFileContent) GetContenttype() string {
+ if x != nil {
+ return x.Contenttype
+ }
+ return ""
+}
+
+// A set of records of notarised files.
+type NotaryFiles struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Files []*NotaryFile `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` // A file in the set.
+}
+
+func (x *NotaryFiles) Reset() {
+ *x = NotaryFiles{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_notary_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *NotaryFiles) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NotaryFiles) ProtoMessage() {}
+
+func (x *NotaryFiles) ProtoReflect() protoreflect.Message {
+ mi := &file_notary_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NotaryFiles.ProtoReflect.Descriptor instead.
+func (*NotaryFiles) Descriptor() ([]byte, []int) {
+ return file_notary_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *NotaryFiles) GetFiles() []*NotaryFile {
+ if x != nil {
+ return x.Files
+ }
+ return nil
+}
+
+var File_notary_proto protoreflect.FileDescriptor
+
+var file_notary_proto_rawDesc = []byte{
+ 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, 0x12, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79,
+ 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
+ 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12,
+ 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xf8, 0x01, 0x0a, 0x0a,
+ 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61,
+ 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x12,
+ 0x0a, 0x04, 0x74, 0x78, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78,
+ 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20,
+ 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65,
+ 0x12, 0x3c, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
+ 0x70, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x20,
+ 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74,
+ 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x48, 0x0a, 0x13, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79,
+ 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74,
+ 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64,
+ 0x22, 0xe3, 0x01, 0x0a, 0x1c, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x47, 0x65, 0x74, 0x46, 0x69,
+ 0x6c, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64,
+ 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x3c, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x38, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x64, 0x54, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
+ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x6f,
+ 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52,
+ 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x59, 0x0a, 0x1b, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79,
+ 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+ 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x68, 0x61, 0x73,
+ 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73,
+ 0x68, 0x22, 0x74, 0x0a, 0x11, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x66, 0x69,
+ 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c,
+ 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c,
+ 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x22, 0x36, 0x0a, 0x0b, 0x4e, 0x6f, 0x74, 0x61, 0x72,
+ 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f,
+ 0x74, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x32,
+ 0x9c, 0x02, 0x0a, 0x06, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x57, 0x72,
+ 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x61,
+ 0x72, 0x79, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c,
+ 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x06, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1a, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x56, 0x65, 0x72, 0x69,
+ 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x00, 0x12, 0x4c,
+ 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
+ 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79,
+ 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e,
+ 0x6f, 0x74, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0e,
+ 0x47, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x22,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x61, 0x72, 0x79, 0x47, 0x65, 0x74,
+ 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4e, 0x6f, 0x74, 0x61, 0x72,
+ 0x79, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x00, 0x42, 0x29,
+ 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65,
+ 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70,
+ 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x33,
+}
+
+var (
+ file_notary_proto_rawDescOnce sync.Once
+ file_notary_proto_rawDescData = file_notary_proto_rawDesc
+)
+
+func file_notary_proto_rawDescGZIP() []byte {
+ file_notary_proto_rawDescOnce.Do(func() {
+ file_notary_proto_rawDescData = protoimpl.X.CompressGZIP(file_notary_proto_rawDescData)
+ })
+ return file_notary_proto_rawDescData
+}
+
+var file_notary_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_notary_proto_goTypes = []interface{}{
+ (*NotaryWriteRequest)(nil), // 0: proto.NotaryWriteRequest
+ (*NotaryFile)(nil), // 1: proto.NotaryFile
+ (*NotaryVerifyRequest)(nil), // 2: proto.NotaryVerifyRequest
+ (*NotaryGetFilesDetailsRequest)(nil), // 3: proto.NotaryGetFilesDetailsRequest
+ (*NotaryGetFileContentRequest)(nil), // 4: proto.NotaryGetFileContentRequest
+ (*NotaryFileContent)(nil), // 5: proto.NotaryFileContent
+ (*NotaryFiles)(nil), // 6: proto.NotaryFiles
+ (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp
+}
+var file_notary_proto_depIdxs = []int32{
+ 7, // 0: proto.NotaryFile.timecreated:type_name -> google.protobuf.Timestamp
+ 7, // 1: proto.NotaryGetFilesDetailsRequest.createdFrom:type_name -> google.protobuf.Timestamp
+ 7, // 2: proto.NotaryGetFilesDetailsRequest.createdTo:type_name -> google.protobuf.Timestamp
+ 1, // 3: proto.NotaryFiles.files:type_name -> proto.NotaryFile
+ 0, // 4: proto.Notary.Write:input_type -> proto.NotaryWriteRequest
+ 2, // 5: proto.Notary.Verify:input_type -> proto.NotaryVerifyRequest
+ 3, // 6: proto.Notary.GetFilesDetails:input_type -> proto.NotaryGetFilesDetailsRequest
+ 4, // 7: proto.Notary.GetFileContent:input_type -> proto.NotaryGetFileContentRequest
+ 1, // 8: proto.Notary.Write:output_type -> proto.NotaryFile
+ 1, // 9: proto.Notary.Verify:output_type -> proto.NotaryFile
+ 6, // 10: proto.Notary.GetFilesDetails:output_type -> proto.NotaryFiles
+ 5, // 11: proto.Notary.GetFileContent:output_type -> proto.NotaryFileContent
+ 8, // [8:12] is the sub-list for method output_type
+ 4, // [4:8] is the sub-list for method input_type
+ 4, // [4:4] is the sub-list for extension type_name
+ 4, // [4:4] is the sub-list for extension extendee
+ 0, // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_notary_proto_init() }
+func file_notary_proto_init() {
+ if File_notary_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_notary_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NotaryWriteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_notary_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NotaryFile); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_notary_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NotaryVerifyRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_notary_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NotaryGetFilesDetailsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_notary_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NotaryGetFileContentRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_notary_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NotaryFileContent); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_notary_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*NotaryFiles); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_notary_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 7,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_notary_proto_goTypes,
+ DependencyIndexes: file_notary_proto_depIdxs,
+ MessageInfos: file_notary_proto_msgTypes,
+ }.Build()
+ File_notary_proto = out.File
+ file_notary_proto_rawDesc = nil
+ file_notary_proto_goTypes = nil
+ file_notary_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/notary.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/notary.proto
new file mode 100644
index 00000000..02621044
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/notary.proto
@@ -0,0 +1,89 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+import "google/protobuf/timestamp.proto";
+// import "google/api/annotations.proto";
+
+
+/**
+* The Notary is responsible for writing hashes of files to the blockchain.
+* In turn, it will delegate this request to the TransactionBuilder and return the txid that it gets back.
+* It keeps a record of the filename, tx id and creation details in its database so that it can respond to search requests.
+*/
+service Notary {
+ // Write file contents to the blockchain.
+ rpc Write (NotaryWriteRequest) returns (NotaryFile) {
+ // option (google.api.http) = {
+ // post: "/notary/write",
+ // body: "*"
+ // };
+ }
+
+ // Verify a file (i.e. hash its file contents and find the previous notarisation tx (if any))
+ rpc Verify (NotaryVerifyRequest) returns (NotaryFile) {
+ // option (google.api.http) = {get: "/notary/verify"};
+ }
+
+ // Get the details of files belonging to this user, which match a given search term and date range.
+ rpc GetFilesDetails (NotaryGetFilesDetailsRequest) returns (NotaryFiles) {
+ // option (google.api.http) = {get: "/notary/files"}; //todo add search term and limit.
+ }
+
+ // Get the file contents of a specific file where the file hash is known.
+ rpc GetFileContent (NotaryGetFileContentRequest) returns (NotaryFileContent) {}
+}
+
+// Notarise (hash) a file and write its hash to the blockchain.
+message NotaryWriteRequest {
+ uint32 account_id = 1; // Internal account id of the user making the request.
+ bytes data = 2; // The data to be notarised (i.e. the file contents).
+ string filename = 3; // The filename (will be written to notary db for later searching).
+}
+
+// A record of a file which has been notarised.
+message NotaryFile {
+ string hash = 1; // The hash string of the file contents for the notarised file.
+ string txid = 2; // Transaction id where this file is notarised.
+ string filename = 3; // Filename of the file we notarised (from the request).
+ string contenttype = 4; // Mime type of the file e.g. text/plain.
+ google.protobuf.Timestamp timecreated = 5; // When the file was notarised.
+ uint32 blockheight = 6; // At which block height is the tx (0 if not known or not mined).
+ uint32 confirmations = 7; // How many times is the tx confirmed (0 if not known or not mined).
+}
+
+// A request to verify that a given file contents have already been notarised.
+message NotaryVerifyRequest {
+ bytes data = 1; // The data to be verified (i.e. the file contents).
+ uint32 account_id = 2; // Internal account id of the user making the request.
+}
+
+// A request to get the details of files belonging to this user which match a given search term and date range.
+message NotaryGetFilesDetailsRequest {
+ uint32 account_id = 1; // Internal account id of the user making the request (we search against their files only).
+ string search = 2; // Search term (we search against tx hash and filename).
+ google.protobuf.Timestamp createdFrom = 3; // Start date for our search.
+ google.protobuf.Timestamp createdTo = 4; // End date for our search.
+ uint32 limit = 5; // Limit records to return (sorted reverse date order).
+}
+
+// Get the file contents and details of a previously notarised file belonging to this user, where the file hash is known.
+message NotaryGetFileContentRequest {
+ uint32 account_id = 1; // Internal account id of the user making the request (we search against their files only).
+ string file_hash = 2; // Hash of the file whose contents we want to retrieve.
+}
+
+
+// Respond to a request to get a notarised file's contents and details from its hash.
+message NotaryFileContent {
+ bytes file_content = 1; // Content of the notarised file.
+ string filename = 2; // Filename of the notarised file.
+ string contenttype = 3; // Mime type of the notarised file e.g. text/plain.
+}
+
+// A set of records of notarised files.
+message NotaryFiles {
+ repeated NotaryFile files = 1; // A file in the set.
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/notary_grpc.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/notary_grpc.pb.go
new file mode 100644
index 00000000..b3b07b01
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/notary_grpc.pb.go
@@ -0,0 +1,217 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package proto
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// NotaryClient is the client API for Notary service.
+//
+// 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.
+type NotaryClient interface {
+ // Write file contents to the blockchain.
+ Write(ctx context.Context, in *NotaryWriteRequest, opts ...grpc.CallOption) (*NotaryFile, error)
+ // Verify a file (i.e. hash its file contents and find the previous notarisation tx (if any))
+ Verify(ctx context.Context, in *NotaryVerifyRequest, opts ...grpc.CallOption) (*NotaryFile, error)
+ // Get the details of files belonging to this user, which match a given search term and date range.
+ GetFilesDetails(ctx context.Context, in *NotaryGetFilesDetailsRequest, opts ...grpc.CallOption) (*NotaryFiles, error)
+ // Get the file contents of a specific file where the file hash is known.
+ GetFileContent(ctx context.Context, in *NotaryGetFileContentRequest, opts ...grpc.CallOption) (*NotaryFileContent, error)
+}
+
+type notaryClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewNotaryClient(cc grpc.ClientConnInterface) NotaryClient {
+ return ¬aryClient{cc}
+}
+
+func (c *notaryClient) Write(ctx context.Context, in *NotaryWriteRequest, opts ...grpc.CallOption) (*NotaryFile, error) {
+ out := new(NotaryFile)
+ err := c.cc.Invoke(ctx, "/proto.Notary/Write", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *notaryClient) Verify(ctx context.Context, in *NotaryVerifyRequest, opts ...grpc.CallOption) (*NotaryFile, error) {
+ out := new(NotaryFile)
+ err := c.cc.Invoke(ctx, "/proto.Notary/Verify", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *notaryClient) GetFilesDetails(ctx context.Context, in *NotaryGetFilesDetailsRequest, opts ...grpc.CallOption) (*NotaryFiles, error) {
+ out := new(NotaryFiles)
+ err := c.cc.Invoke(ctx, "/proto.Notary/GetFilesDetails", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *notaryClient) GetFileContent(ctx context.Context, in *NotaryGetFileContentRequest, opts ...grpc.CallOption) (*NotaryFileContent, error) {
+ out := new(NotaryFileContent)
+ err := c.cc.Invoke(ctx, "/proto.Notary/GetFileContent", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// NotaryServer is the server API for Notary service.
+// All implementations must embed UnimplementedNotaryServer
+// for forward compatibility
+type NotaryServer interface {
+ // Write file contents to the blockchain.
+ Write(context.Context, *NotaryWriteRequest) (*NotaryFile, error)
+ // Verify a file (i.e. hash its file contents and find the previous notarisation tx (if any))
+ Verify(context.Context, *NotaryVerifyRequest) (*NotaryFile, error)
+ // Get the details of files belonging to this user, which match a given search term and date range.
+ GetFilesDetails(context.Context, *NotaryGetFilesDetailsRequest) (*NotaryFiles, error)
+ // Get the file contents of a specific file where the file hash is known.
+ GetFileContent(context.Context, *NotaryGetFileContentRequest) (*NotaryFileContent, error)
+ mustEmbedUnimplementedNotaryServer()
+}
+
+// UnimplementedNotaryServer must be embedded to have forward compatible implementations.
+type UnimplementedNotaryServer struct {
+}
+
+func (UnimplementedNotaryServer) Write(context.Context, *NotaryWriteRequest) (*NotaryFile, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Write not implemented")
+}
+func (UnimplementedNotaryServer) Verify(context.Context, *NotaryVerifyRequest) (*NotaryFile, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Verify not implemented")
+}
+func (UnimplementedNotaryServer) GetFilesDetails(context.Context, *NotaryGetFilesDetailsRequest) (*NotaryFiles, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetFilesDetails not implemented")
+}
+func (UnimplementedNotaryServer) GetFileContent(context.Context, *NotaryGetFileContentRequest) (*NotaryFileContent, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetFileContent not implemented")
+}
+func (UnimplementedNotaryServer) mustEmbedUnimplementedNotaryServer() {}
+
+// UnsafeNotaryServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to NotaryServer will
+// result in compilation errors.
+type UnsafeNotaryServer interface {
+ mustEmbedUnimplementedNotaryServer()
+}
+
+func RegisterNotaryServer(s grpc.ServiceRegistrar, srv NotaryServer) {
+ s.RegisterService(&Notary_ServiceDesc, srv)
+}
+
+func _Notary_Write_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(NotaryWriteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NotaryServer).Write(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Notary/Write",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NotaryServer).Write(ctx, req.(*NotaryWriteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Notary_Verify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(NotaryVerifyRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NotaryServer).Verify(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Notary/Verify",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NotaryServer).Verify(ctx, req.(*NotaryVerifyRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Notary_GetFilesDetails_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(NotaryGetFilesDetailsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NotaryServer).GetFilesDetails(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Notary/GetFilesDetails",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NotaryServer).GetFilesDetails(ctx, req.(*NotaryGetFilesDetailsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Notary_GetFileContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(NotaryGetFileContentRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NotaryServer).GetFileContent(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/proto.Notary/GetFileContent",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NotaryServer).GetFileContent(ctx, req.(*NotaryGetFileContentRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// Notary_ServiceDesc is the grpc.ServiceDesc for Notary service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Notary_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "proto.Notary",
+ HandlerType: (*NotaryServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Write",
+ Handler: _Notary_Write_Handler,
+ },
+ {
+ MethodName: "Verify",
+ Handler: _Notary_Verify_Handler,
+ },
+ {
+ MethodName: "GetFilesDetails",
+ Handler: _Notary_GetFilesDetails_Handler,
+ },
+ {
+ MethodName: "GetFileContent",
+ Handler: _Notary_GetFileContent_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "notary.proto",
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/package-lock.json b/vendor/bitbucket.stressedsharks.com/plat/proto/package-lock.json
new file mode 100644
index 00000000..c18e5a1d
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/package-lock.json
@@ -0,0 +1,5 @@
+{
+ "name": "proto",
+ "version": "1.0.0",
+ "lockfileVersion": 1
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/package.json b/vendor/bitbucket.stressedsharks.com/plat/proto/package.json
new file mode 100644
index 00000000..b27c7f49
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "proto",
+ "version": "1.0.0",
+ "description": "Platform Services protobuf files",
+ "main": "index.js",
+ "directories": {
+ "doc": "docs",
+ "example": "examples"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "ssh://git@bitbucket.stressedsharks.com:8443/plat/proto.git"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "homepage": "https://bitbucket.stressedsharks.com/projects/plat/repos/proto/browse"
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/payment.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/payment.pb.go
new file mode 100644
index 00000000..00a9b45d
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/payment.pb.go
@@ -0,0 +1,160 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: payment.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+//*
+//A Payment holds information about an output.
+type Payment struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` // The public key hash (base58 address) that the output will be assigned to.
+ Satoshis uint64 `protobuf:"varint,2,opt,name=satoshis,proto3" json:"satoshis,omitempty"` // The number of satoshis to assign to this public key hash.
+}
+
+func (x *Payment) Reset() {
+ *x = Payment{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_payment_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Payment) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Payment) ProtoMessage() {}
+
+func (x *Payment) ProtoReflect() protoreflect.Message {
+ mi := &file_payment_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Payment.ProtoReflect.Descriptor instead.
+func (*Payment) Descriptor() ([]byte, []int) {
+ return file_payment_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Payment) GetAddress() string {
+ if x != nil {
+ return x.Address
+ }
+ return ""
+}
+
+func (x *Payment) GetSatoshis() uint64 {
+ if x != nil {
+ return x.Satoshis
+ }
+ return 0
+}
+
+var File_payment_proto protoreflect.FileDescriptor
+
+var file_payment_proto_rawDesc = []byte{
+ 0x0a, 0x0d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+ 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3f, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
+ 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73,
+ 0x61, 0x74, 0x6f, 0x73, 0x68, 0x69, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73,
+ 0x61, 0x74, 0x6f, 0x73, 0x68, 0x69, 0x73, 0x42, 0x29, 0x5a, 0x27, 0x62, 0x69, 0x74, 0x62, 0x75,
+ 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x73, 0x68, 0x61,
+ 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_payment_proto_rawDescOnce sync.Once
+ file_payment_proto_rawDescData = file_payment_proto_rawDesc
+)
+
+func file_payment_proto_rawDescGZIP() []byte {
+ file_payment_proto_rawDescOnce.Do(func() {
+ file_payment_proto_rawDescData = protoimpl.X.CompressGZIP(file_payment_proto_rawDescData)
+ })
+ return file_payment_proto_rawDescData
+}
+
+var file_payment_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_payment_proto_goTypes = []interface{}{
+ (*Payment)(nil), // 0: proto.Payment
+}
+var file_payment_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_payment_proto_init() }
+func file_payment_proto_init() {
+ if File_payment_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_payment_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Payment); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_payment_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_payment_proto_goTypes,
+ DependencyIndexes: file_payment_proto_depIdxs,
+ MessageInfos: file_payment_proto_msgTypes,
+ }.Build()
+ File_payment_proto = out.File
+ file_payment_proto_rawDesc = nil
+ file_payment_proto_goTypes = nil
+ file_payment_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/payment.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/payment.proto
new file mode 100644
index 00000000..e42e92c4
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/payment.proto
@@ -0,0 +1,13 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+/**
+A Payment holds information about an output.
+*/
+message Payment {
+ string address = 1; // The public key hash (base58 address) that the output will be assigned to.
+ uint64 satoshis = 2; // The number of satoshis to assign to this public key hash.
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/proto.sh b/vendor/bitbucket.stressedsharks.com/plat/proto/proto.sh
new file mode 100644
index 00000000..f63cf842
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/proto.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+cd $(dirname "$0")
+rm -f ./*.pb.go
+rm -rf javascript
+
+mkdir javascript
+
+# npm install -g grpc-tools
+
+GO111MODULE="on" go get -u \
+ github.com/grpc-ecosystem/grpc-gateway@v1.16.0 \
+ google.golang.org/grpc/cmd/protoc-gen-go-grpc \
+ github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway \
+ github.com/grpc-ecosystem/grpc-gateway/protoc-gen-openapiv2
+
+function pc() {
+ protoc \
+ --proto_path=$(go env GOPATH)/src \
+ --proto_path=. \
+ --proto_path=$(go env GOPATH)/pkg/mod/github.com/grpc-ecosystem/grpc-gateway\@v1.16.0/third_party/googleapis \
+ --go_out=Mgoogle/api/annotations.proto=google.golang.org/genproto/googleapis/api/annotations,plugins=grpc:. --js_out=import_style=commonjs,binary:./javascript \
+ --grpc_out=./javascript \
+ --plugin=protoc-gen-grpc=$(which grpc_tools_node_protoc_plugin) $1
+}
+
+find . -maxdepth 1 -not -path "./examples/*" -not -path "./.history/*" -type f -name "*.proto" -print | while read F; do
+ echo $F
+ pc $F
+done
+
+# echo "GRPC gateway: notary"
+# protoc --proto_path=./ notary.proto \
+# -I$(go env GOPATH)/src \
+# -I$(go env GOPATH)/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
+# --grpc-gateway_out=logtostderr=true:. \
+
+# echo "GRPC gateway: funding service"
+# protoc --proto_path=./ funding_service.proto \
+# -I$(go env GOPATH)/src \
+# -I$(go env GOPATH)/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
+# --grpc-gateway_out=logtostderr=true:. \
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/proto_go.sh b/vendor/bitbucket.stressedsharks.com/plat/proto/proto_go.sh
new file mode 100644
index 00000000..01e1a97b
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/proto_go.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+# Script to generate the proto files for go
+# Best way to do it is to run through a bind mount docker container
+# docker container run --rm --name proto_gen --mount type=bind,source=/your/local/path/to/platformservices/proto,target=/development/ps/proto -it jwahab/go-protoc:latest /bin/bash -c "cd /development/ps/proto; ./proto_go.sh"
+#
+# Note : Change appropriately [/path/to/local/proto] to what you have on your local machine
+#
+
+cd $(dirname "$0")
+
+# clean all existing generated protobuf go files
+find . -type f -name "*pb*.go" | xargs rm ;
+
+GO111MODULE="on" go get -u \
+ github.com/grpc-ecosystem/grpc-gateway@v1.16.0 \
+ github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway \
+ github.com/grpc-ecosystem/grpc-gateway/protoc-gen-openapiv2
+
+GOFLAGS="-mod=mod" go install \
+ github.com/golang/protobuf/proto \
+ github.com/golang/protobuf/protoc-gen-go \
+ google.golang.org/grpc/cmd/protoc-gen-go-grpc
+
+function pc() {
+ GOFLAGS="-mod=mod" protoc \
+ --proto_path=. \
+ --proto_path=$(go env GOPATH)/src \
+ --proto_path=$(go env GOPATH)/pkg/mod/github.com/grpc-ecosystem/grpc-gateway\@v1.16.0/third_party/googleapis \
+ --go_out=. --go_opt=paths=source_relative \
+ --go-grpc_out=. --go-grpc_opt=paths=source_relative \
+ $1
+}
+
+find . -type f -name "*.proto" -print | while read F; do
+ echo Generate grpc files for [$F]
+ pc $F
+done
+
+
+# Git to check if generated file has change
+# Ignore this message if the change is your intention
+modified="$(git status --untracked-files=no --porcelain)"
+if [[ -z ${modified} ]]
+then
+ echo -e "\n\nproto_go[success] : generated .go files has no changes"
+else
+ echo -e "\n\nproto_go[error] :"
+ echo " Newly generated .go files has changes. To see changes detail : [git diff]"
+ echo " Ignore this error message if these changes are intended"
+ exit 1
+fi
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/void.pb.go b/vendor/bitbucket.stressedsharks.com/plat/proto/void.pb.go
new file mode 100644
index 00000000..a822808a
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/void.pb.go
@@ -0,0 +1,138 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.25.0
+// protoc v3.17.3
+// source: void.proto
+
+package proto
+
+import (
+ proto "github.com/golang/protobuf/proto"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+// An empty response
+type Void struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *Void) Reset() {
+ *x = Void{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_void_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Void) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Void) ProtoMessage() {}
+
+func (x *Void) ProtoReflect() protoreflect.Message {
+ mi := &file_void_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Void.ProtoReflect.Descriptor instead.
+func (*Void) Descriptor() ([]byte, []int) {
+ return file_void_proto_rawDescGZIP(), []int{0}
+}
+
+var File_void_proto protoreflect.FileDescriptor
+
+var file_void_proto_rawDesc = []byte{
+ 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x22, 0x06, 0x0a, 0x04, 0x56, 0x6f, 0x69, 0x64, 0x42, 0x29, 0x5a, 0x27, 0x62,
+ 0x69, 0x74, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x73, 0x73, 0x65,
+ 0x64, 0x73, 0x68, 0x61, 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6c, 0x61, 0x74,
+ 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_void_proto_rawDescOnce sync.Once
+ file_void_proto_rawDescData = file_void_proto_rawDesc
+)
+
+func file_void_proto_rawDescGZIP() []byte {
+ file_void_proto_rawDescOnce.Do(func() {
+ file_void_proto_rawDescData = protoimpl.X.CompressGZIP(file_void_proto_rawDescData)
+ })
+ return file_void_proto_rawDescData
+}
+
+var file_void_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_void_proto_goTypes = []interface{}{
+ (*Void)(nil), // 0: proto.Void
+}
+var file_void_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_void_proto_init() }
+func file_void_proto_init() {
+ if File_void_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_void_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Void); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_void_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_void_proto_goTypes,
+ DependencyIndexes: file_void_proto_depIdxs,
+ MessageInfos: file_void_proto_msgTypes,
+ }.Build()
+ File_void_proto = out.File
+ file_void_proto_rawDesc = nil
+ file_void_proto_goTypes = nil
+ file_void_proto_depIdxs = nil
+}
diff --git a/vendor/bitbucket.stressedsharks.com/plat/proto/void.proto b/vendor/bitbucket.stressedsharks.com/plat/proto/void.proto
new file mode 100644
index 00000000..cf5f4a80
--- /dev/null
+++ b/vendor/bitbucket.stressedsharks.com/plat/proto/void.proto
@@ -0,0 +1,8 @@
+syntax = "proto3";
+
+package proto;
+
+option go_package = "bitbucket.stressedsharks.com/plat/proto";
+
+// An empty response
+message Void {}
diff --git a/vendor/github.com/Microsoft/go-winio/.gitignore b/vendor/github.com/Microsoft/go-winio/.gitignore
new file mode 100644
index 00000000..b883f1fd
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/.gitignore
@@ -0,0 +1 @@
+*.exe
diff --git a/vendor/github.com/Microsoft/go-winio/CODEOWNERS b/vendor/github.com/Microsoft/go-winio/CODEOWNERS
new file mode 100644
index 00000000..ae1b4942
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/CODEOWNERS
@@ -0,0 +1 @@
+ * @microsoft/containerplat
diff --git a/vendor/github.com/Microsoft/go-winio/LICENSE b/vendor/github.com/Microsoft/go-winio/LICENSE
new file mode 100644
index 00000000..b8b569d7
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Microsoft
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/vendor/github.com/Microsoft/go-winio/README.md b/vendor/github.com/Microsoft/go-winio/README.md
new file mode 100644
index 00000000..56800105
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/README.md
@@ -0,0 +1,22 @@
+# go-winio
+
+This repository contains utilities for efficiently performing Win32 IO operations in
+Go. Currently, this is focused on accessing named pipes and other file handles, and
+for using named pipes as a net transport.
+
+This code relies on IO completion ports to avoid blocking IO on system threads, allowing Go
+to reuse the thread to schedule another goroutine. This limits support to Windows Vista and
+newer operating systems. This is similar to the implementation of network sockets in Go's net
+package.
+
+Please see the LICENSE file for licensing information.
+
+This project has adopted the [Microsoft Open Source Code of
+Conduct](https://opensource.microsoft.com/codeofconduct/). For more information
+see the [Code of Conduct
+FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact
+[opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional
+questions or comments.
+
+Thanks to natefinch for the inspiration for this library. See https://github.com/natefinch/npipe
+for another named pipe implementation.
diff --git a/vendor/github.com/Microsoft/go-winio/backup.go b/vendor/github.com/Microsoft/go-winio/backup.go
new file mode 100644
index 00000000..2be34af4
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/backup.go
@@ -0,0 +1,280 @@
+// +build windows
+
+package winio
+
+import (
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "runtime"
+ "syscall"
+ "unicode/utf16"
+)
+
+//sys backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead
+//sys backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite
+
+const (
+ BackupData = uint32(iota + 1)
+ BackupEaData
+ BackupSecurity
+ BackupAlternateData
+ BackupLink
+ BackupPropertyData
+ BackupObjectId
+ BackupReparseData
+ BackupSparseBlock
+ BackupTxfsData
+)
+
+const (
+ StreamSparseAttributes = uint32(8)
+)
+
+const (
+ WRITE_DAC = 0x40000
+ WRITE_OWNER = 0x80000
+ ACCESS_SYSTEM_SECURITY = 0x1000000
+)
+
+// BackupHeader represents a backup stream of a file.
+type BackupHeader struct {
+ Id uint32 // The backup stream ID
+ Attributes uint32 // Stream attributes
+ Size int64 // The size of the stream in bytes
+ Name string // The name of the stream (for BackupAlternateData only).
+ Offset int64 // The offset of the stream in the file (for BackupSparseBlock only).
+}
+
+type win32StreamId struct {
+ StreamId uint32
+ Attributes uint32
+ Size uint64
+ NameSize uint32
+}
+
+// BackupStreamReader reads from a stream produced by the BackupRead Win32 API and produces a series
+// of BackupHeader values.
+type BackupStreamReader struct {
+ r io.Reader
+ bytesLeft int64
+}
+
+// NewBackupStreamReader produces a BackupStreamReader from any io.Reader.
+func NewBackupStreamReader(r io.Reader) *BackupStreamReader {
+ return &BackupStreamReader{r, 0}
+}
+
+// Next returns the next backup stream and prepares for calls to Read(). It skips the remainder of the current stream if
+// it was not completely read.
+func (r *BackupStreamReader) Next() (*BackupHeader, error) {
+ if r.bytesLeft > 0 {
+ if s, ok := r.r.(io.Seeker); ok {
+ // Make sure Seek on io.SeekCurrent sometimes succeeds
+ // before trying the actual seek.
+ if _, err := s.Seek(0, io.SeekCurrent); err == nil {
+ if _, err = s.Seek(r.bytesLeft, io.SeekCurrent); err != nil {
+ return nil, err
+ }
+ r.bytesLeft = 0
+ }
+ }
+ if _, err := io.Copy(ioutil.Discard, r); err != nil {
+ return nil, err
+ }
+ }
+ var wsi win32StreamId
+ if err := binary.Read(r.r, binary.LittleEndian, &wsi); err != nil {
+ return nil, err
+ }
+ hdr := &BackupHeader{
+ Id: wsi.StreamId,
+ Attributes: wsi.Attributes,
+ Size: int64(wsi.Size),
+ }
+ if wsi.NameSize != 0 {
+ name := make([]uint16, int(wsi.NameSize/2))
+ if err := binary.Read(r.r, binary.LittleEndian, name); err != nil {
+ return nil, err
+ }
+ hdr.Name = syscall.UTF16ToString(name)
+ }
+ if wsi.StreamId == BackupSparseBlock {
+ if err := binary.Read(r.r, binary.LittleEndian, &hdr.Offset); err != nil {
+ return nil, err
+ }
+ hdr.Size -= 8
+ }
+ r.bytesLeft = hdr.Size
+ return hdr, nil
+}
+
+// Read reads from the current backup stream.
+func (r *BackupStreamReader) Read(b []byte) (int, error) {
+ if r.bytesLeft == 0 {
+ return 0, io.EOF
+ }
+ if int64(len(b)) > r.bytesLeft {
+ b = b[:r.bytesLeft]
+ }
+ n, err := r.r.Read(b)
+ r.bytesLeft -= int64(n)
+ if err == io.EOF {
+ err = io.ErrUnexpectedEOF
+ } else if r.bytesLeft == 0 && err == nil {
+ err = io.EOF
+ }
+ return n, err
+}
+
+// BackupStreamWriter writes a stream compatible with the BackupWrite Win32 API.
+type BackupStreamWriter struct {
+ w io.Writer
+ bytesLeft int64
+}
+
+// NewBackupStreamWriter produces a BackupStreamWriter on top of an io.Writer.
+func NewBackupStreamWriter(w io.Writer) *BackupStreamWriter {
+ return &BackupStreamWriter{w, 0}
+}
+
+// WriteHeader writes the next backup stream header and prepares for calls to Write().
+func (w *BackupStreamWriter) WriteHeader(hdr *BackupHeader) error {
+ if w.bytesLeft != 0 {
+ return fmt.Errorf("missing %d bytes", w.bytesLeft)
+ }
+ name := utf16.Encode([]rune(hdr.Name))
+ wsi := win32StreamId{
+ StreamId: hdr.Id,
+ Attributes: hdr.Attributes,
+ Size: uint64(hdr.Size),
+ NameSize: uint32(len(name) * 2),
+ }
+ if hdr.Id == BackupSparseBlock {
+ // Include space for the int64 block offset
+ wsi.Size += 8
+ }
+ if err := binary.Write(w.w, binary.LittleEndian, &wsi); err != nil {
+ return err
+ }
+ if len(name) != 0 {
+ if err := binary.Write(w.w, binary.LittleEndian, name); err != nil {
+ return err
+ }
+ }
+ if hdr.Id == BackupSparseBlock {
+ if err := binary.Write(w.w, binary.LittleEndian, hdr.Offset); err != nil {
+ return err
+ }
+ }
+ w.bytesLeft = hdr.Size
+ return nil
+}
+
+// Write writes to the current backup stream.
+func (w *BackupStreamWriter) Write(b []byte) (int, error) {
+ if w.bytesLeft < int64(len(b)) {
+ return 0, fmt.Errorf("too many bytes by %d", int64(len(b))-w.bytesLeft)
+ }
+ n, err := w.w.Write(b)
+ w.bytesLeft -= int64(n)
+ return n, err
+}
+
+// BackupFileReader provides an io.ReadCloser interface on top of the BackupRead Win32 API.
+type BackupFileReader struct {
+ f *os.File
+ includeSecurity bool
+ ctx uintptr
+}
+
+// NewBackupFileReader returns a new BackupFileReader from a file handle. If includeSecurity is true,
+// Read will attempt to read the security descriptor of the file.
+func NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileReader {
+ r := &BackupFileReader{f, includeSecurity, 0}
+ return r
+}
+
+// Read reads a backup stream from the file by calling the Win32 API BackupRead().
+func (r *BackupFileReader) Read(b []byte) (int, error) {
+ var bytesRead uint32
+ err := backupRead(syscall.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx)
+ if err != nil {
+ return 0, &os.PathError{"BackupRead", r.f.Name(), err}
+ }
+ runtime.KeepAlive(r.f)
+ if bytesRead == 0 {
+ return 0, io.EOF
+ }
+ return int(bytesRead), nil
+}
+
+// Close frees Win32 resources associated with the BackupFileReader. It does not close
+// the underlying file.
+func (r *BackupFileReader) Close() error {
+ if r.ctx != 0 {
+ backupRead(syscall.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx)
+ runtime.KeepAlive(r.f)
+ r.ctx = 0
+ }
+ return nil
+}
+
+// BackupFileWriter provides an io.WriteCloser interface on top of the BackupWrite Win32 API.
+type BackupFileWriter struct {
+ f *os.File
+ includeSecurity bool
+ ctx uintptr
+}
+
+// NewBackupFileWriter returns a new BackupFileWriter from a file handle. If includeSecurity is true,
+// Write() will attempt to restore the security descriptor from the stream.
+func NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWriter {
+ w := &BackupFileWriter{f, includeSecurity, 0}
+ return w
+}
+
+// Write restores a portion of the file using the provided backup stream.
+func (w *BackupFileWriter) Write(b []byte) (int, error) {
+ var bytesWritten uint32
+ err := backupWrite(syscall.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx)
+ if err != nil {
+ return 0, &os.PathError{"BackupWrite", w.f.Name(), err}
+ }
+ runtime.KeepAlive(w.f)
+ if int(bytesWritten) != len(b) {
+ return int(bytesWritten), errors.New("not all bytes could be written")
+ }
+ return len(b), nil
+}
+
+// Close frees Win32 resources associated with the BackupFileWriter. It does not
+// close the underlying file.
+func (w *BackupFileWriter) Close() error {
+ if w.ctx != 0 {
+ backupWrite(syscall.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx)
+ runtime.KeepAlive(w.f)
+ w.ctx = 0
+ }
+ return nil
+}
+
+// OpenForBackup opens a file or directory, potentially skipping access checks if the backup
+// or restore privileges have been acquired.
+//
+// If the file opened was a directory, it cannot be used with Readdir().
+func OpenForBackup(path string, access uint32, share uint32, createmode uint32) (*os.File, error) {
+ winPath, err := syscall.UTF16FromString(path)
+ if err != nil {
+ return nil, err
+ }
+ h, err := syscall.CreateFile(&winPath[0], access, share, nil, createmode, syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OPEN_REPARSE_POINT, 0)
+ if err != nil {
+ err = &os.PathError{Op: "open", Path: path, Err: err}
+ return nil, err
+ }
+ return os.NewFile(uintptr(h), path), nil
+}
diff --git a/vendor/github.com/Microsoft/go-winio/ea.go b/vendor/github.com/Microsoft/go-winio/ea.go
new file mode 100644
index 00000000..4051c1b3
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/ea.go
@@ -0,0 +1,137 @@
+package winio
+
+import (
+ "bytes"
+ "encoding/binary"
+ "errors"
+)
+
+type fileFullEaInformation struct {
+ NextEntryOffset uint32
+ Flags uint8
+ NameLength uint8
+ ValueLength uint16
+}
+
+var (
+ fileFullEaInformationSize = binary.Size(&fileFullEaInformation{})
+
+ errInvalidEaBuffer = errors.New("invalid extended attribute buffer")
+ errEaNameTooLarge = errors.New("extended attribute name too large")
+ errEaValueTooLarge = errors.New("extended attribute value too large")
+)
+
+// ExtendedAttribute represents a single Windows EA.
+type ExtendedAttribute struct {
+ Name string
+ Value []byte
+ Flags uint8
+}
+
+func parseEa(b []byte) (ea ExtendedAttribute, nb []byte, err error) {
+ var info fileFullEaInformation
+ err = binary.Read(bytes.NewReader(b), binary.LittleEndian, &info)
+ if err != nil {
+ err = errInvalidEaBuffer
+ return
+ }
+
+ nameOffset := fileFullEaInformationSize
+ nameLen := int(info.NameLength)
+ valueOffset := nameOffset + int(info.NameLength) + 1
+ valueLen := int(info.ValueLength)
+ nextOffset := int(info.NextEntryOffset)
+ if valueLen+valueOffset > len(b) || nextOffset < 0 || nextOffset > len(b) {
+ err = errInvalidEaBuffer
+ return
+ }
+
+ ea.Name = string(b[nameOffset : nameOffset+nameLen])
+ ea.Value = b[valueOffset : valueOffset+valueLen]
+ ea.Flags = info.Flags
+ if info.NextEntryOffset != 0 {
+ nb = b[info.NextEntryOffset:]
+ }
+ return
+}
+
+// DecodeExtendedAttributes decodes a list of EAs from a FILE_FULL_EA_INFORMATION
+// buffer retrieved from BackupRead, ZwQueryEaFile, etc.
+func DecodeExtendedAttributes(b []byte) (eas []ExtendedAttribute, err error) {
+ for len(b) != 0 {
+ ea, nb, err := parseEa(b)
+ if err != nil {
+ return nil, err
+ }
+
+ eas = append(eas, ea)
+ b = nb
+ }
+ return
+}
+
+func writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error {
+ if int(uint8(len(ea.Name))) != len(ea.Name) {
+ return errEaNameTooLarge
+ }
+ if int(uint16(len(ea.Value))) != len(ea.Value) {
+ return errEaValueTooLarge
+ }
+ entrySize := uint32(fileFullEaInformationSize + len(ea.Name) + 1 + len(ea.Value))
+ withPadding := (entrySize + 3) &^ 3
+ nextOffset := uint32(0)
+ if !last {
+ nextOffset = withPadding
+ }
+ info := fileFullEaInformation{
+ NextEntryOffset: nextOffset,
+ Flags: ea.Flags,
+ NameLength: uint8(len(ea.Name)),
+ ValueLength: uint16(len(ea.Value)),
+ }
+
+ err := binary.Write(buf, binary.LittleEndian, &info)
+ if err != nil {
+ return err
+ }
+
+ _, err = buf.Write([]byte(ea.Name))
+ if err != nil {
+ return err
+ }
+
+ err = buf.WriteByte(0)
+ if err != nil {
+ return err
+ }
+
+ _, err = buf.Write(ea.Value)
+ if err != nil {
+ return err
+ }
+
+ _, err = buf.Write([]byte{0, 0, 0}[0 : withPadding-entrySize])
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// EncodeExtendedAttributes encodes a list of EAs into a FILE_FULL_EA_INFORMATION
+// buffer for use with BackupWrite, ZwSetEaFile, etc.
+func EncodeExtendedAttributes(eas []ExtendedAttribute) ([]byte, error) {
+ var buf bytes.Buffer
+ for i := range eas {
+ last := false
+ if i == len(eas)-1 {
+ last = true
+ }
+
+ err := writeEa(&buf, &eas[i], last)
+ if err != nil {
+ return nil, err
+ }
+ }
+ return buf.Bytes(), nil
+}
diff --git a/vendor/github.com/Microsoft/go-winio/file.go b/vendor/github.com/Microsoft/go-winio/file.go
new file mode 100644
index 00000000..0385e410
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/file.go
@@ -0,0 +1,323 @@
+// +build windows
+
+package winio
+
+import (
+ "errors"
+ "io"
+ "runtime"
+ "sync"
+ "sync/atomic"
+ "syscall"
+ "time"
+)
+
+//sys cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) = CancelIoEx
+//sys createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) = CreateIoCompletionPort
+//sys getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus
+//sys setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes
+//sys wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult
+
+type atomicBool int32
+
+func (b *atomicBool) isSet() bool { return atomic.LoadInt32((*int32)(b)) != 0 }
+func (b *atomicBool) setFalse() { atomic.StoreInt32((*int32)(b), 0) }
+func (b *atomicBool) setTrue() { atomic.StoreInt32((*int32)(b), 1) }
+func (b *atomicBool) swap(new bool) bool {
+ var newInt int32
+ if new {
+ newInt = 1
+ }
+ return atomic.SwapInt32((*int32)(b), newInt) == 1
+}
+
+const (
+ cFILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
+ cFILE_SKIP_SET_EVENT_ON_HANDLE = 2
+)
+
+var (
+ ErrFileClosed = errors.New("file has already been closed")
+ ErrTimeout = &timeoutError{}
+)
+
+type timeoutError struct{}
+
+func (e *timeoutError) Error() string { return "i/o timeout" }
+func (e *timeoutError) Timeout() bool { return true }
+func (e *timeoutError) Temporary() bool { return true }
+
+type timeoutChan chan struct{}
+
+var ioInitOnce sync.Once
+var ioCompletionPort syscall.Handle
+
+// ioResult contains the result of an asynchronous IO operation
+type ioResult struct {
+ bytes uint32
+ err error
+}
+
+// ioOperation represents an outstanding asynchronous Win32 IO
+type ioOperation struct {
+ o syscall.Overlapped
+ ch chan ioResult
+}
+
+func initIo() {
+ h, err := createIoCompletionPort(syscall.InvalidHandle, 0, 0, 0xffffffff)
+ if err != nil {
+ panic(err)
+ }
+ ioCompletionPort = h
+ go ioCompletionProcessor(h)
+}
+
+// win32File implements Reader, Writer, and Closer on a Win32 handle without blocking in a syscall.
+// It takes ownership of this handle and will close it if it is garbage collected.
+type win32File struct {
+ handle syscall.Handle
+ wg sync.WaitGroup
+ wgLock sync.RWMutex
+ closing atomicBool
+ socket bool
+ readDeadline deadlineHandler
+ writeDeadline deadlineHandler
+}
+
+type deadlineHandler struct {
+ setLock sync.Mutex
+ channel timeoutChan
+ channelLock sync.RWMutex
+ timer *time.Timer
+ timedout atomicBool
+}
+
+// makeWin32File makes a new win32File from an existing file handle
+func makeWin32File(h syscall.Handle) (*win32File, error) {
+ f := &win32File{handle: h}
+ ioInitOnce.Do(initIo)
+ _, err := createIoCompletionPort(h, ioCompletionPort, 0, 0xffffffff)
+ if err != nil {
+ return nil, err
+ }
+ err = setFileCompletionNotificationModes(h, cFILE_SKIP_COMPLETION_PORT_ON_SUCCESS|cFILE_SKIP_SET_EVENT_ON_HANDLE)
+ if err != nil {
+ return nil, err
+ }
+ f.readDeadline.channel = make(timeoutChan)
+ f.writeDeadline.channel = make(timeoutChan)
+ return f, nil
+}
+
+func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) {
+ // If we return the result of makeWin32File directly, it can result in an
+ // interface-wrapped nil, rather than a nil interface value.
+ f, err := makeWin32File(h)
+ if err != nil {
+ return nil, err
+ }
+ return f, nil
+}
+
+// closeHandle closes the resources associated with a Win32 handle
+func (f *win32File) closeHandle() {
+ f.wgLock.Lock()
+ // Atomically set that we are closing, releasing the resources only once.
+ if !f.closing.swap(true) {
+ f.wgLock.Unlock()
+ // cancel all IO and wait for it to complete
+ cancelIoEx(f.handle, nil)
+ f.wg.Wait()
+ // at this point, no new IO can start
+ syscall.Close(f.handle)
+ f.handle = 0
+ } else {
+ f.wgLock.Unlock()
+ }
+}
+
+// Close closes a win32File.
+func (f *win32File) Close() error {
+ f.closeHandle()
+ return nil
+}
+
+// prepareIo prepares for a new IO operation.
+// The caller must call f.wg.Done() when the IO is finished, prior to Close() returning.
+func (f *win32File) prepareIo() (*ioOperation, error) {
+ f.wgLock.RLock()
+ if f.closing.isSet() {
+ f.wgLock.RUnlock()
+ return nil, ErrFileClosed
+ }
+ f.wg.Add(1)
+ f.wgLock.RUnlock()
+ c := &ioOperation{}
+ c.ch = make(chan ioResult)
+ return c, nil
+}
+
+// ioCompletionProcessor processes completed async IOs forever
+func ioCompletionProcessor(h syscall.Handle) {
+ for {
+ var bytes uint32
+ var key uintptr
+ var op *ioOperation
+ err := getQueuedCompletionStatus(h, &bytes, &key, &op, syscall.INFINITE)
+ if op == nil {
+ panic(err)
+ }
+ op.ch <- ioResult{bytes, err}
+ }
+}
+
+// asyncIo processes the return value from ReadFile or WriteFile, blocking until
+// the operation has actually completed.
+func (f *win32File) asyncIo(c *ioOperation, d *deadlineHandler, bytes uint32, err error) (int, error) {
+ if err != syscall.ERROR_IO_PENDING {
+ return int(bytes), err
+ }
+
+ if f.closing.isSet() {
+ cancelIoEx(f.handle, &c.o)
+ }
+
+ var timeout timeoutChan
+ if d != nil {
+ d.channelLock.Lock()
+ timeout = d.channel
+ d.channelLock.Unlock()
+ }
+
+ var r ioResult
+ select {
+ case r = <-c.ch:
+ err = r.err
+ if err == syscall.ERROR_OPERATION_ABORTED {
+ if f.closing.isSet() {
+ err = ErrFileClosed
+ }
+ } else if err != nil && f.socket {
+ // err is from Win32. Query the overlapped structure to get the winsock error.
+ var bytes, flags uint32
+ err = wsaGetOverlappedResult(f.handle, &c.o, &bytes, false, &flags)
+ }
+ case <-timeout:
+ cancelIoEx(f.handle, &c.o)
+ r = <-c.ch
+ err = r.err
+ if err == syscall.ERROR_OPERATION_ABORTED {
+ err = ErrTimeout
+ }
+ }
+
+ // runtime.KeepAlive is needed, as c is passed via native
+ // code to ioCompletionProcessor, c must remain alive
+ // until the channel read is complete.
+ runtime.KeepAlive(c)
+ return int(r.bytes), err
+}
+
+// Read reads from a file handle.
+func (f *win32File) Read(b []byte) (int, error) {
+ c, err := f.prepareIo()
+ if err != nil {
+ return 0, err
+ }
+ defer f.wg.Done()
+
+ if f.readDeadline.timedout.isSet() {
+ return 0, ErrTimeout
+ }
+
+ var bytes uint32
+ err = syscall.ReadFile(f.handle, b, &bytes, &c.o)
+ n, err := f.asyncIo(c, &f.readDeadline, bytes, err)
+ runtime.KeepAlive(b)
+
+ // Handle EOF conditions.
+ if err == nil && n == 0 && len(b) != 0 {
+ return 0, io.EOF
+ } else if err == syscall.ERROR_BROKEN_PIPE {
+ return 0, io.EOF
+ } else {
+ return n, err
+ }
+}
+
+// Write writes to a file handle.
+func (f *win32File) Write(b []byte) (int, error) {
+ c, err := f.prepareIo()
+ if err != nil {
+ return 0, err
+ }
+ defer f.wg.Done()
+
+ if f.writeDeadline.timedout.isSet() {
+ return 0, ErrTimeout
+ }
+
+ var bytes uint32
+ err = syscall.WriteFile(f.handle, b, &bytes, &c.o)
+ n, err := f.asyncIo(c, &f.writeDeadline, bytes, err)
+ runtime.KeepAlive(b)
+ return n, err
+}
+
+func (f *win32File) SetReadDeadline(deadline time.Time) error {
+ return f.readDeadline.set(deadline)
+}
+
+func (f *win32File) SetWriteDeadline(deadline time.Time) error {
+ return f.writeDeadline.set(deadline)
+}
+
+func (f *win32File) Flush() error {
+ return syscall.FlushFileBuffers(f.handle)
+}
+
+func (f *win32File) Fd() uintptr {
+ return uintptr(f.handle)
+}
+
+func (d *deadlineHandler) set(deadline time.Time) error {
+ d.setLock.Lock()
+ defer d.setLock.Unlock()
+
+ if d.timer != nil {
+ if !d.timer.Stop() {
+ <-d.channel
+ }
+ d.timer = nil
+ }
+ d.timedout.setFalse()
+
+ select {
+ case <-d.channel:
+ d.channelLock.Lock()
+ d.channel = make(chan struct{})
+ d.channelLock.Unlock()
+ default:
+ }
+
+ if deadline.IsZero() {
+ return nil
+ }
+
+ timeoutIO := func() {
+ d.timedout.setTrue()
+ close(d.channel)
+ }
+
+ now := time.Now()
+ duration := deadline.Sub(now)
+ if deadline.After(now) {
+ // Deadline is in the future, set a timer to wait
+ d.timer = time.AfterFunc(duration, timeoutIO)
+ } else {
+ // Deadline is in the past. Cancel all pending IO now.
+ timeoutIO()
+ }
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/go-winio/fileinfo.go b/vendor/github.com/Microsoft/go-winio/fileinfo.go
new file mode 100644
index 00000000..3ab6bff6
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/fileinfo.go
@@ -0,0 +1,73 @@
+// +build windows
+
+package winio
+
+import (
+ "os"
+ "runtime"
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+// FileBasicInfo contains file access time and file attributes information.
+type FileBasicInfo struct {
+ CreationTime, LastAccessTime, LastWriteTime, ChangeTime windows.Filetime
+ FileAttributes uint32
+ pad uint32 // padding
+}
+
+// GetFileBasicInfo retrieves times and attributes for a file.
+func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) {
+ bi := &FileBasicInfo{}
+ if err := windows.GetFileInformationByHandleEx(windows.Handle(f.Fd()), windows.FileBasicInfo, (*byte)(unsafe.Pointer(bi)), uint32(unsafe.Sizeof(*bi))); err != nil {
+ return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err}
+ }
+ runtime.KeepAlive(f)
+ return bi, nil
+}
+
+// SetFileBasicInfo sets times and attributes for a file.
+func SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error {
+ if err := windows.SetFileInformationByHandle(windows.Handle(f.Fd()), windows.FileBasicInfo, (*byte)(unsafe.Pointer(bi)), uint32(unsafe.Sizeof(*bi))); err != nil {
+ return &os.PathError{Op: "SetFileInformationByHandle", Path: f.Name(), Err: err}
+ }
+ runtime.KeepAlive(f)
+ return nil
+}
+
+// FileStandardInfo contains extended information for the file.
+// FILE_STANDARD_INFO in WinBase.h
+// https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_standard_info
+type FileStandardInfo struct {
+ AllocationSize, EndOfFile int64
+ NumberOfLinks uint32
+ DeletePending, Directory bool
+}
+
+// GetFileStandardInfo retrieves ended information for the file.
+func GetFileStandardInfo(f *os.File) (*FileStandardInfo, error) {
+ si := &FileStandardInfo{}
+ if err := windows.GetFileInformationByHandleEx(windows.Handle(f.Fd()), windows.FileStandardInfo, (*byte)(unsafe.Pointer(si)), uint32(unsafe.Sizeof(*si))); err != nil {
+ return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err}
+ }
+ runtime.KeepAlive(f)
+ return si, nil
+}
+
+// FileIDInfo contains the volume serial number and file ID for a file. This pair should be
+// unique on a system.
+type FileIDInfo struct {
+ VolumeSerialNumber uint64
+ FileID [16]byte
+}
+
+// GetFileID retrieves the unique (volume, file ID) pair for a file.
+func GetFileID(f *os.File) (*FileIDInfo, error) {
+ fileID := &FileIDInfo{}
+ if err := windows.GetFileInformationByHandleEx(windows.Handle(f.Fd()), windows.FileIdInfo, (*byte)(unsafe.Pointer(fileID)), uint32(unsafe.Sizeof(*fileID))); err != nil {
+ return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err}
+ }
+ runtime.KeepAlive(f)
+ return fileID, nil
+}
diff --git a/vendor/github.com/Microsoft/go-winio/go.mod b/vendor/github.com/Microsoft/go-winio/go.mod
new file mode 100644
index 00000000..98a8dea0
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/go.mod
@@ -0,0 +1,9 @@
+module github.com/Microsoft/go-winio
+
+go 1.12
+
+require (
+ github.com/pkg/errors v0.9.1
+ github.com/sirupsen/logrus v1.7.0
+ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c
+)
diff --git a/vendor/github.com/Microsoft/go-winio/go.sum b/vendor/github.com/Microsoft/go-winio/go.sum
new file mode 100644
index 00000000..aa6ad3b5
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/go.sum
@@ -0,0 +1,14 @@
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
diff --git a/vendor/github.com/Microsoft/go-winio/hvsock.go b/vendor/github.com/Microsoft/go-winio/hvsock.go
new file mode 100644
index 00000000..b632f8f8
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/hvsock.go
@@ -0,0 +1,307 @@
+// +build windows
+
+package winio
+
+import (
+ "fmt"
+ "io"
+ "net"
+ "os"
+ "syscall"
+ "time"
+ "unsafe"
+
+ "github.com/Microsoft/go-winio/pkg/guid"
+)
+
+//sys bind(s syscall.Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socketError] = ws2_32.bind
+
+const (
+ afHvSock = 34 // AF_HYPERV
+
+ socketError = ^uintptr(0)
+)
+
+// An HvsockAddr is an address for a AF_HYPERV socket.
+type HvsockAddr struct {
+ VMID guid.GUID
+ ServiceID guid.GUID
+}
+
+type rawHvsockAddr struct {
+ Family uint16
+ _ uint16
+ VMID guid.GUID
+ ServiceID guid.GUID
+}
+
+// Network returns the address's network name, "hvsock".
+func (addr *HvsockAddr) Network() string {
+ return "hvsock"
+}
+
+func (addr *HvsockAddr) String() string {
+ return fmt.Sprintf("%s:%s", &addr.VMID, &addr.ServiceID)
+}
+
+// VsockServiceID returns an hvsock service ID corresponding to the specified AF_VSOCK port.
+func VsockServiceID(port uint32) guid.GUID {
+ g, _ := guid.FromString("00000000-facb-11e6-bd58-64006a7986d3")
+ g.Data1 = port
+ return g
+}
+
+func (addr *HvsockAddr) raw() rawHvsockAddr {
+ return rawHvsockAddr{
+ Family: afHvSock,
+ VMID: addr.VMID,
+ ServiceID: addr.ServiceID,
+ }
+}
+
+func (addr *HvsockAddr) fromRaw(raw *rawHvsockAddr) {
+ addr.VMID = raw.VMID
+ addr.ServiceID = raw.ServiceID
+}
+
+// HvsockListener is a socket listener for the AF_HYPERV address family.
+type HvsockListener struct {
+ sock *win32File
+ addr HvsockAddr
+}
+
+// HvsockConn is a connected socket of the AF_HYPERV address family.
+type HvsockConn struct {
+ sock *win32File
+ local, remote HvsockAddr
+}
+
+func newHvSocket() (*win32File, error) {
+ fd, err := syscall.Socket(afHvSock, syscall.SOCK_STREAM, 1)
+ if err != nil {
+ return nil, os.NewSyscallError("socket", err)
+ }
+ f, err := makeWin32File(fd)
+ if err != nil {
+ syscall.Close(fd)
+ return nil, err
+ }
+ f.socket = true
+ return f, nil
+}
+
+// ListenHvsock listens for connections on the specified hvsock address.
+func ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) {
+ l := &HvsockListener{addr: *addr}
+ sock, err := newHvSocket()
+ if err != nil {
+ return nil, l.opErr("listen", err)
+ }
+ sa := addr.raw()
+ err = bind(sock.handle, unsafe.Pointer(&sa), int32(unsafe.Sizeof(sa)))
+ if err != nil {
+ return nil, l.opErr("listen", os.NewSyscallError("socket", err))
+ }
+ err = syscall.Listen(sock.handle, 16)
+ if err != nil {
+ return nil, l.opErr("listen", os.NewSyscallError("listen", err))
+ }
+ return &HvsockListener{sock: sock, addr: *addr}, nil
+}
+
+func (l *HvsockListener) opErr(op string, err error) error {
+ return &net.OpError{Op: op, Net: "hvsock", Addr: &l.addr, Err: err}
+}
+
+// Addr returns the listener's network address.
+func (l *HvsockListener) Addr() net.Addr {
+ return &l.addr
+}
+
+// Accept waits for the next connection and returns it.
+func (l *HvsockListener) Accept() (_ net.Conn, err error) {
+ sock, err := newHvSocket()
+ if err != nil {
+ return nil, l.opErr("accept", err)
+ }
+ defer func() {
+ if sock != nil {
+ sock.Close()
+ }
+ }()
+ c, err := l.sock.prepareIo()
+ if err != nil {
+ return nil, l.opErr("accept", err)
+ }
+ defer l.sock.wg.Done()
+
+ // AcceptEx, per documentation, requires an extra 16 bytes per address.
+ const addrlen = uint32(16 + unsafe.Sizeof(rawHvsockAddr{}))
+ var addrbuf [addrlen * 2]byte
+
+ var bytes uint32
+ err = syscall.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0, addrlen, addrlen, &bytes, &c.o)
+ _, err = l.sock.asyncIo(c, nil, bytes, err)
+ if err != nil {
+ return nil, l.opErr("accept", os.NewSyscallError("acceptex", err))
+ }
+ conn := &HvsockConn{
+ sock: sock,
+ }
+ conn.local.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[0])))
+ conn.remote.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[addrlen])))
+ sock = nil
+ return conn, nil
+}
+
+// Close closes the listener, causing any pending Accept calls to fail.
+func (l *HvsockListener) Close() error {
+ return l.sock.Close()
+}
+
+/* Need to finish ConnectEx handling
+func DialHvsock(ctx context.Context, addr *HvsockAddr) (*HvsockConn, error) {
+ sock, err := newHvSocket()
+ if err != nil {
+ return nil, err
+ }
+ defer func() {
+ if sock != nil {
+ sock.Close()
+ }
+ }()
+ c, err := sock.prepareIo()
+ if err != nil {
+ return nil, err
+ }
+ defer sock.wg.Done()
+ var bytes uint32
+ err = windows.ConnectEx(windows.Handle(sock.handle), sa, nil, 0, &bytes, &c.o)
+ _, err = sock.asyncIo(ctx, c, nil, bytes, err)
+ if err != nil {
+ return nil, err
+ }
+ conn := &HvsockConn{
+ sock: sock,
+ remote: *addr,
+ }
+ sock = nil
+ return conn, nil
+}
+*/
+
+func (conn *HvsockConn) opErr(op string, err error) error {
+ return &net.OpError{Op: op, Net: "hvsock", Source: &conn.local, Addr: &conn.remote, Err: err}
+}
+
+func (conn *HvsockConn) Read(b []byte) (int, error) {
+ c, err := conn.sock.prepareIo()
+ if err != nil {
+ return 0, conn.opErr("read", err)
+ }
+ defer conn.sock.wg.Done()
+ buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))}
+ var flags, bytes uint32
+ err = syscall.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil)
+ n, err := conn.sock.asyncIo(c, &conn.sock.readDeadline, bytes, err)
+ if err != nil {
+ if _, ok := err.(syscall.Errno); ok {
+ err = os.NewSyscallError("wsarecv", err)
+ }
+ return 0, conn.opErr("read", err)
+ } else if n == 0 {
+ err = io.EOF
+ }
+ return n, err
+}
+
+func (conn *HvsockConn) Write(b []byte) (int, error) {
+ t := 0
+ for len(b) != 0 {
+ n, err := conn.write(b)
+ if err != nil {
+ return t + n, err
+ }
+ t += n
+ b = b[n:]
+ }
+ return t, nil
+}
+
+func (conn *HvsockConn) write(b []byte) (int, error) {
+ c, err := conn.sock.prepareIo()
+ if err != nil {
+ return 0, conn.opErr("write", err)
+ }
+ defer conn.sock.wg.Done()
+ buf := syscall.WSABuf{Buf: &b[0], Len: uint32(len(b))}
+ var bytes uint32
+ err = syscall.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil)
+ n, err := conn.sock.asyncIo(c, &conn.sock.writeDeadline, bytes, err)
+ if err != nil {
+ if _, ok := err.(syscall.Errno); ok {
+ err = os.NewSyscallError("wsasend", err)
+ }
+ return 0, conn.opErr("write", err)
+ }
+ return n, err
+}
+
+// Close closes the socket connection, failing any pending read or write calls.
+func (conn *HvsockConn) Close() error {
+ return conn.sock.Close()
+}
+
+func (conn *HvsockConn) shutdown(how int) error {
+ err := syscall.Shutdown(conn.sock.handle, syscall.SHUT_RD)
+ if err != nil {
+ return os.NewSyscallError("shutdown", err)
+ }
+ return nil
+}
+
+// CloseRead shuts down the read end of the socket.
+func (conn *HvsockConn) CloseRead() error {
+ err := conn.shutdown(syscall.SHUT_RD)
+ if err != nil {
+ return conn.opErr("close", err)
+ }
+ return nil
+}
+
+// CloseWrite shuts down the write end of the socket, notifying the other endpoint that
+// no more data will be written.
+func (conn *HvsockConn) CloseWrite() error {
+ err := conn.shutdown(syscall.SHUT_WR)
+ if err != nil {
+ return conn.opErr("close", err)
+ }
+ return nil
+}
+
+// LocalAddr returns the local address of the connection.
+func (conn *HvsockConn) LocalAddr() net.Addr {
+ return &conn.local
+}
+
+// RemoteAddr returns the remote address of the connection.
+func (conn *HvsockConn) RemoteAddr() net.Addr {
+ return &conn.remote
+}
+
+// SetDeadline implements the net.Conn SetDeadline method.
+func (conn *HvsockConn) SetDeadline(t time.Time) error {
+ conn.SetReadDeadline(t)
+ conn.SetWriteDeadline(t)
+ return nil
+}
+
+// SetReadDeadline implements the net.Conn SetReadDeadline method.
+func (conn *HvsockConn) SetReadDeadline(t time.Time) error {
+ return conn.sock.SetReadDeadline(t)
+}
+
+// SetWriteDeadline implements the net.Conn SetWriteDeadline method.
+func (conn *HvsockConn) SetWriteDeadline(t time.Time) error {
+ return conn.sock.SetWriteDeadline(t)
+}
diff --git a/vendor/github.com/Microsoft/go-winio/pipe.go b/vendor/github.com/Microsoft/go-winio/pipe.go
new file mode 100644
index 00000000..96700a73
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/pipe.go
@@ -0,0 +1,517 @@
+// +build windows
+
+package winio
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "io"
+ "net"
+ "os"
+ "runtime"
+ "syscall"
+ "time"
+ "unsafe"
+)
+
+//sys connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) = ConnectNamedPipe
+//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) [failretval==syscall.InvalidHandle] = CreateNamedPipeW
+//sys createFile(name string, access uint32, mode uint32, sa *syscall.SecurityAttributes, createmode uint32, attrs uint32, templatefile syscall.Handle) (handle syscall.Handle, err error) [failretval==syscall.InvalidHandle] = CreateFileW
+//sys getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo
+//sys getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
+//sys localAlloc(uFlags uint32, length uint32) (ptr uintptr) = LocalAlloc
+//sys ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntstatus) = ntdll.NtCreateNamedPipeFile
+//sys rtlNtStatusToDosError(status ntstatus) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb
+//sys rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntstatus) = ntdll.RtlDosPathNameToNtPathName_U
+//sys rtlDefaultNpAcl(dacl *uintptr) (status ntstatus) = ntdll.RtlDefaultNpAcl
+
+type ioStatusBlock struct {
+ Status, Information uintptr
+}
+
+type objectAttributes struct {
+ Length uintptr
+ RootDirectory uintptr
+ ObjectName *unicodeString
+ Attributes uintptr
+ SecurityDescriptor *securityDescriptor
+ SecurityQoS uintptr
+}
+
+type unicodeString struct {
+ Length uint16
+ MaximumLength uint16
+ Buffer uintptr
+}
+
+type securityDescriptor struct {
+ Revision byte
+ Sbz1 byte
+ Control uint16
+ Owner uintptr
+ Group uintptr
+ Sacl uintptr
+ Dacl uintptr
+}
+
+type ntstatus int32
+
+func (status ntstatus) Err() error {
+ if status >= 0 {
+ return nil
+ }
+ return rtlNtStatusToDosError(status)
+}
+
+const (
+ cERROR_PIPE_BUSY = syscall.Errno(231)
+ cERROR_NO_DATA = syscall.Errno(232)
+ cERROR_PIPE_CONNECTED = syscall.Errno(535)
+ cERROR_SEM_TIMEOUT = syscall.Errno(121)
+
+ cSECURITY_SQOS_PRESENT = 0x100000
+ cSECURITY_ANONYMOUS = 0
+
+ cPIPE_TYPE_MESSAGE = 4
+
+ cPIPE_READMODE_MESSAGE = 2
+
+ cFILE_OPEN = 1
+ cFILE_CREATE = 2
+
+ cFILE_PIPE_MESSAGE_TYPE = 1
+ cFILE_PIPE_REJECT_REMOTE_CLIENTS = 2
+
+ cSE_DACL_PRESENT = 4
+)
+
+var (
+ // ErrPipeListenerClosed is returned for pipe operations on listeners that have been closed.
+ // This error should match net.errClosing since docker takes a dependency on its text.
+ ErrPipeListenerClosed = errors.New("use of closed network connection")
+
+ errPipeWriteClosed = errors.New("pipe has been closed for write")
+)
+
+type win32Pipe struct {
+ *win32File
+ path string
+}
+
+type win32MessageBytePipe struct {
+ win32Pipe
+ writeClosed bool
+ readEOF bool
+}
+
+type pipeAddress string
+
+func (f *win32Pipe) LocalAddr() net.Addr {
+ return pipeAddress(f.path)
+}
+
+func (f *win32Pipe) RemoteAddr() net.Addr {
+ return pipeAddress(f.path)
+}
+
+func (f *win32Pipe) SetDeadline(t time.Time) error {
+ f.SetReadDeadline(t)
+ f.SetWriteDeadline(t)
+ return nil
+}
+
+// CloseWrite closes the write side of a message pipe in byte mode.
+func (f *win32MessageBytePipe) CloseWrite() error {
+ if f.writeClosed {
+ return errPipeWriteClosed
+ }
+ err := f.win32File.Flush()
+ if err != nil {
+ return err
+ }
+ _, err = f.win32File.Write(nil)
+ if err != nil {
+ return err
+ }
+ f.writeClosed = true
+ return nil
+}
+
+// Write writes bytes to a message pipe in byte mode. Zero-byte writes are ignored, since
+// they are used to implement CloseWrite().
+func (f *win32MessageBytePipe) Write(b []byte) (int, error) {
+ if f.writeClosed {
+ return 0, errPipeWriteClosed
+ }
+ if len(b) == 0 {
+ return 0, nil
+ }
+ return f.win32File.Write(b)
+}
+
+// Read reads bytes from a message pipe in byte mode. A read of a zero-byte message on a message
+// mode pipe will return io.EOF, as will all subsequent reads.
+func (f *win32MessageBytePipe) Read(b []byte) (int, error) {
+ if f.readEOF {
+ return 0, io.EOF
+ }
+ n, err := f.win32File.Read(b)
+ if err == io.EOF {
+ // If this was the result of a zero-byte read, then
+ // it is possible that the read was due to a zero-size
+ // message. Since we are simulating CloseWrite with a
+ // zero-byte message, ensure that all future Read() calls
+ // also return EOF.
+ f.readEOF = true
+ } else if err == syscall.ERROR_MORE_DATA {
+ // ERROR_MORE_DATA indicates that the pipe's read mode is message mode
+ // and the message still has more bytes. Treat this as a success, since
+ // this package presents all named pipes as byte streams.
+ err = nil
+ }
+ return n, err
+}
+
+func (s pipeAddress) Network() string {
+ return "pipe"
+}
+
+func (s pipeAddress) String() string {
+ return string(s)
+}
+
+// tryDialPipe attempts to dial the pipe at `path` until `ctx` cancellation or timeout.
+func tryDialPipe(ctx context.Context, path *string, access uint32) (syscall.Handle, error) {
+ for {
+
+ select {
+ case <-ctx.Done():
+ return syscall.Handle(0), ctx.Err()
+ default:
+ h, err := createFile(*path, access, 0, nil, syscall.OPEN_EXISTING, syscall.FILE_FLAG_OVERLAPPED|cSECURITY_SQOS_PRESENT|cSECURITY_ANONYMOUS, 0)
+ if err == nil {
+ return h, nil
+ }
+ if err != cERROR_PIPE_BUSY {
+ return h, &os.PathError{Err: err, Op: "open", Path: *path}
+ }
+ // Wait 10 msec and try again. This is a rather simplistic
+ // view, as we always try each 10 milliseconds.
+ time.Sleep(10 * time.Millisecond)
+ }
+ }
+}
+
+// DialPipe connects to a named pipe by path, timing out if the connection
+// takes longer than the specified duration. If timeout is nil, then we use
+// a default timeout of 2 seconds. (We do not use WaitNamedPipe.)
+func DialPipe(path string, timeout *time.Duration) (net.Conn, error) {
+ var absTimeout time.Time
+ if timeout != nil {
+ absTimeout = time.Now().Add(*timeout)
+ } else {
+ absTimeout = time.Now().Add(2 * time.Second)
+ }
+ ctx, _ := context.WithDeadline(context.Background(), absTimeout)
+ conn, err := DialPipeContext(ctx, path)
+ if err == context.DeadlineExceeded {
+ return nil, ErrTimeout
+ }
+ return conn, err
+}
+
+// DialPipeContext attempts to connect to a named pipe by `path` until `ctx`
+// cancellation or timeout.
+func DialPipeContext(ctx context.Context, path string) (net.Conn, error) {
+ return DialPipeAccess(ctx, path, syscall.GENERIC_READ|syscall.GENERIC_WRITE)
+}
+
+// DialPipeAccess attempts to connect to a named pipe by `path` with `access` until `ctx`
+// cancellation or timeout.
+func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, error) {
+ var err error
+ var h syscall.Handle
+ h, err = tryDialPipe(ctx, &path, access)
+ if err != nil {
+ return nil, err
+ }
+
+ var flags uint32
+ err = getNamedPipeInfo(h, &flags, nil, nil, nil)
+ if err != nil {
+ return nil, err
+ }
+
+ f, err := makeWin32File(h)
+ if err != nil {
+ syscall.Close(h)
+ return nil, err
+ }
+
+ // If the pipe is in message mode, return a message byte pipe, which
+ // supports CloseWrite().
+ if flags&cPIPE_TYPE_MESSAGE != 0 {
+ return &win32MessageBytePipe{
+ win32Pipe: win32Pipe{win32File: f, path: path},
+ }, nil
+ }
+ return &win32Pipe{win32File: f, path: path}, nil
+}
+
+type acceptResponse struct {
+ f *win32File
+ err error
+}
+
+type win32PipeListener struct {
+ firstHandle syscall.Handle
+ path string
+ config PipeConfig
+ acceptCh chan (chan acceptResponse)
+ closeCh chan int
+ doneCh chan int
+}
+
+func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (syscall.Handle, error) {
+ path16, err := syscall.UTF16FromString(path)
+ if err != nil {
+ return 0, &os.PathError{Op: "open", Path: path, Err: err}
+ }
+
+ var oa objectAttributes
+ oa.Length = unsafe.Sizeof(oa)
+
+ var ntPath unicodeString
+ if err := rtlDosPathNameToNtPathName(&path16[0], &ntPath, 0, 0).Err(); err != nil {
+ return 0, &os.PathError{Op: "open", Path: path, Err: err}
+ }
+ defer localFree(ntPath.Buffer)
+ oa.ObjectName = &ntPath
+
+ // The security descriptor is only needed for the first pipe.
+ if first {
+ if sd != nil {
+ len := uint32(len(sd))
+ sdb := localAlloc(0, len)
+ defer localFree(sdb)
+ copy((*[0xffff]byte)(unsafe.Pointer(sdb))[:], sd)
+ oa.SecurityDescriptor = (*securityDescriptor)(unsafe.Pointer(sdb))
+ } else {
+ // Construct the default named pipe security descriptor.
+ var dacl uintptr
+ if err := rtlDefaultNpAcl(&dacl).Err(); err != nil {
+ return 0, fmt.Errorf("getting default named pipe ACL: %s", err)
+ }
+ defer localFree(dacl)
+
+ sdb := &securityDescriptor{
+ Revision: 1,
+ Control: cSE_DACL_PRESENT,
+ Dacl: dacl,
+ }
+ oa.SecurityDescriptor = sdb
+ }
+ }
+
+ typ := uint32(cFILE_PIPE_REJECT_REMOTE_CLIENTS)
+ if c.MessageMode {
+ typ |= cFILE_PIPE_MESSAGE_TYPE
+ }
+
+ disposition := uint32(cFILE_OPEN)
+ access := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE | syscall.SYNCHRONIZE)
+ if first {
+ disposition = cFILE_CREATE
+ // By not asking for read or write access, the named pipe file system
+ // will put this pipe into an initially disconnected state, blocking
+ // client connections until the next call with first == false.
+ access = syscall.SYNCHRONIZE
+ }
+
+ timeout := int64(-50 * 10000) // 50ms
+
+ var (
+ h syscall.Handle
+ iosb ioStatusBlock
+ )
+ err = ntCreateNamedPipeFile(&h, access, &oa, &iosb, syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE, disposition, 0, typ, 0, 0, 0xffffffff, uint32(c.InputBufferSize), uint32(c.OutputBufferSize), &timeout).Err()
+ if err != nil {
+ return 0, &os.PathError{Op: "open", Path: path, Err: err}
+ }
+
+ runtime.KeepAlive(ntPath)
+ return h, nil
+}
+
+func (l *win32PipeListener) makeServerPipe() (*win32File, error) {
+ h, err := makeServerPipeHandle(l.path, nil, &l.config, false)
+ if err != nil {
+ return nil, err
+ }
+ f, err := makeWin32File(h)
+ if err != nil {
+ syscall.Close(h)
+ return nil, err
+ }
+ return f, nil
+}
+
+func (l *win32PipeListener) makeConnectedServerPipe() (*win32File, error) {
+ p, err := l.makeServerPipe()
+ if err != nil {
+ return nil, err
+ }
+
+ // Wait for the client to connect.
+ ch := make(chan error)
+ go func(p *win32File) {
+ ch <- connectPipe(p)
+ }(p)
+
+ select {
+ case err = <-ch:
+ if err != nil {
+ p.Close()
+ p = nil
+ }
+ case <-l.closeCh:
+ // Abort the connect request by closing the handle.
+ p.Close()
+ p = nil
+ err = <-ch
+ if err == nil || err == ErrFileClosed {
+ err = ErrPipeListenerClosed
+ }
+ }
+ return p, err
+}
+
+func (l *win32PipeListener) listenerRoutine() {
+ closed := false
+ for !closed {
+ select {
+ case <-l.closeCh:
+ closed = true
+ case responseCh := <-l.acceptCh:
+ var (
+ p *win32File
+ err error
+ )
+ for {
+ p, err = l.makeConnectedServerPipe()
+ // If the connection was immediately closed by the client, try
+ // again.
+ if err != cERROR_NO_DATA {
+ break
+ }
+ }
+ responseCh <- acceptResponse{p, err}
+ closed = err == ErrPipeListenerClosed
+ }
+ }
+ syscall.Close(l.firstHandle)
+ l.firstHandle = 0
+ // Notify Close() and Accept() callers that the handle has been closed.
+ close(l.doneCh)
+}
+
+// PipeConfig contain configuration for the pipe listener.
+type PipeConfig struct {
+ // SecurityDescriptor contains a Windows security descriptor in SDDL format.
+ SecurityDescriptor string
+
+ // MessageMode determines whether the pipe is in byte or message mode. In either
+ // case the pipe is read in byte mode by default. The only practical difference in
+ // this implementation is that CloseWrite() is only supported for message mode pipes;
+ // CloseWrite() is implemented as a zero-byte write, but zero-byte writes are only
+ // transferred to the reader (and returned as io.EOF in this implementation)
+ // when the pipe is in message mode.
+ MessageMode bool
+
+ // InputBufferSize specifies the size of the input buffer, in bytes.
+ InputBufferSize int32
+
+ // OutputBufferSize specifies the size of the output buffer, in bytes.
+ OutputBufferSize int32
+}
+
+// ListenPipe creates a listener on a Windows named pipe path, e.g. \\.\pipe\mypipe.
+// The pipe must not already exist.
+func ListenPipe(path string, c *PipeConfig) (net.Listener, error) {
+ var (
+ sd []byte
+ err error
+ )
+ if c == nil {
+ c = &PipeConfig{}
+ }
+ if c.SecurityDescriptor != "" {
+ sd, err = SddlToSecurityDescriptor(c.SecurityDescriptor)
+ if err != nil {
+ return nil, err
+ }
+ }
+ h, err := makeServerPipeHandle(path, sd, c, true)
+ if err != nil {
+ return nil, err
+ }
+ l := &win32PipeListener{
+ firstHandle: h,
+ path: path,
+ config: *c,
+ acceptCh: make(chan (chan acceptResponse)),
+ closeCh: make(chan int),
+ doneCh: make(chan int),
+ }
+ go l.listenerRoutine()
+ return l, nil
+}
+
+func connectPipe(p *win32File) error {
+ c, err := p.prepareIo()
+ if err != nil {
+ return err
+ }
+ defer p.wg.Done()
+
+ err = connectNamedPipe(p.handle, &c.o)
+ _, err = p.asyncIo(c, nil, 0, err)
+ if err != nil && err != cERROR_PIPE_CONNECTED {
+ return err
+ }
+ return nil
+}
+
+func (l *win32PipeListener) Accept() (net.Conn, error) {
+ ch := make(chan acceptResponse)
+ select {
+ case l.acceptCh <- ch:
+ response := <-ch
+ err := response.err
+ if err != nil {
+ return nil, err
+ }
+ if l.config.MessageMode {
+ return &win32MessageBytePipe{
+ win32Pipe: win32Pipe{win32File: response.f, path: l.path},
+ }, nil
+ }
+ return &win32Pipe{win32File: response.f, path: l.path}, nil
+ case <-l.doneCh:
+ return nil, ErrPipeListenerClosed
+ }
+}
+
+func (l *win32PipeListener) Close() error {
+ select {
+ case l.closeCh <- 1:
+ <-l.doneCh
+ case <-l.doneCh:
+ }
+ return nil
+}
+
+func (l *win32PipeListener) Addr() net.Addr {
+ return pipeAddress(l.path)
+}
diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go
new file mode 100644
index 00000000..f497c0e3
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go
@@ -0,0 +1,237 @@
+// +build windows
+
+// Package guid provides a GUID type. The backing structure for a GUID is
+// identical to that used by the golang.org/x/sys/windows GUID type.
+// There are two main binary encodings used for a GUID, the big-endian encoding,
+// and the Windows (mixed-endian) encoding. See here for details:
+// https://en.wikipedia.org/wiki/Universally_unique_identifier#Encoding
+package guid
+
+import (
+ "crypto/rand"
+ "crypto/sha1"
+ "encoding"
+ "encoding/binary"
+ "fmt"
+ "strconv"
+
+ "golang.org/x/sys/windows"
+)
+
+// Variant specifies which GUID variant (or "type") of the GUID. It determines
+// how the entirety of the rest of the GUID is interpreted.
+type Variant uint8
+
+// The variants specified by RFC 4122.
+const (
+ // VariantUnknown specifies a GUID variant which does not conform to one of
+ // the variant encodings specified in RFC 4122.
+ VariantUnknown Variant = iota
+ VariantNCS
+ VariantRFC4122
+ VariantMicrosoft
+ VariantFuture
+)
+
+// Version specifies how the bits in the GUID were generated. For instance, a
+// version 4 GUID is randomly generated, and a version 5 is generated from the
+// hash of an input string.
+type Version uint8
+
+var _ = (encoding.TextMarshaler)(GUID{})
+var _ = (encoding.TextUnmarshaler)(&GUID{})
+
+// GUID represents a GUID/UUID. It has the same structure as
+// golang.org/x/sys/windows.GUID so that it can be used with functions expecting
+// that type. It is defined as its own type so that stringification and
+// marshaling can be supported. The representation matches that used by native
+// Windows code.
+type GUID windows.GUID
+
+// NewV4 returns a new version 4 (pseudorandom) GUID, as defined by RFC 4122.
+func NewV4() (GUID, error) {
+ var b [16]byte
+ if _, err := rand.Read(b[:]); err != nil {
+ return GUID{}, err
+ }
+
+ g := FromArray(b)
+ g.setVersion(4) // Version 4 means randomly generated.
+ g.setVariant(VariantRFC4122)
+
+ return g, nil
+}
+
+// NewV5 returns a new version 5 (generated from a string via SHA-1 hashing)
+// GUID, as defined by RFC 4122. The RFC is unclear on the encoding of the name,
+// and the sample code treats it as a series of bytes, so we do the same here.
+//
+// Some implementations, such as those found on Windows, treat the name as a
+// big-endian UTF16 stream of bytes. If that is desired, the string can be
+// encoded as such before being passed to this function.
+func NewV5(namespace GUID, name []byte) (GUID, error) {
+ b := sha1.New()
+ namespaceBytes := namespace.ToArray()
+ b.Write(namespaceBytes[:])
+ b.Write(name)
+
+ a := [16]byte{}
+ copy(a[:], b.Sum(nil))
+
+ g := FromArray(a)
+ g.setVersion(5) // Version 5 means generated from a string.
+ g.setVariant(VariantRFC4122)
+
+ return g, nil
+}
+
+func fromArray(b [16]byte, order binary.ByteOrder) GUID {
+ var g GUID
+ g.Data1 = order.Uint32(b[0:4])
+ g.Data2 = order.Uint16(b[4:6])
+ g.Data3 = order.Uint16(b[6:8])
+ copy(g.Data4[:], b[8:16])
+ return g
+}
+
+func (g GUID) toArray(order binary.ByteOrder) [16]byte {
+ b := [16]byte{}
+ order.PutUint32(b[0:4], g.Data1)
+ order.PutUint16(b[4:6], g.Data2)
+ order.PutUint16(b[6:8], g.Data3)
+ copy(b[8:16], g.Data4[:])
+ return b
+}
+
+// FromArray constructs a GUID from a big-endian encoding array of 16 bytes.
+func FromArray(b [16]byte) GUID {
+ return fromArray(b, binary.BigEndian)
+}
+
+// ToArray returns an array of 16 bytes representing the GUID in big-endian
+// encoding.
+func (g GUID) ToArray() [16]byte {
+ return g.toArray(binary.BigEndian)
+}
+
+// FromWindowsArray constructs a GUID from a Windows encoding array of bytes.
+func FromWindowsArray(b [16]byte) GUID {
+ return fromArray(b, binary.LittleEndian)
+}
+
+// ToWindowsArray returns an array of 16 bytes representing the GUID in Windows
+// encoding.
+func (g GUID) ToWindowsArray() [16]byte {
+ return g.toArray(binary.LittleEndian)
+}
+
+func (g GUID) String() string {
+ return fmt.Sprintf(
+ "%08x-%04x-%04x-%04x-%012x",
+ g.Data1,
+ g.Data2,
+ g.Data3,
+ g.Data4[:2],
+ g.Data4[2:])
+}
+
+// FromString parses a string containing a GUID and returns the GUID. The only
+// format currently supported is the `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
+// format.
+func FromString(s string) (GUID, error) {
+ if len(s) != 36 {
+ return GUID{}, fmt.Errorf("invalid GUID %q", s)
+ }
+ if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {
+ return GUID{}, fmt.Errorf("invalid GUID %q", s)
+ }
+
+ var g GUID
+
+ data1, err := strconv.ParseUint(s[0:8], 16, 32)
+ if err != nil {
+ return GUID{}, fmt.Errorf("invalid GUID %q", s)
+ }
+ g.Data1 = uint32(data1)
+
+ data2, err := strconv.ParseUint(s[9:13], 16, 16)
+ if err != nil {
+ return GUID{}, fmt.Errorf("invalid GUID %q", s)
+ }
+ g.Data2 = uint16(data2)
+
+ data3, err := strconv.ParseUint(s[14:18], 16, 16)
+ if err != nil {
+ return GUID{}, fmt.Errorf("invalid GUID %q", s)
+ }
+ g.Data3 = uint16(data3)
+
+ for i, x := range []int{19, 21, 24, 26, 28, 30, 32, 34} {
+ v, err := strconv.ParseUint(s[x:x+2], 16, 8)
+ if err != nil {
+ return GUID{}, fmt.Errorf("invalid GUID %q", s)
+ }
+ g.Data4[i] = uint8(v)
+ }
+
+ return g, nil
+}
+
+func (g *GUID) setVariant(v Variant) {
+ d := g.Data4[0]
+ switch v {
+ case VariantNCS:
+ d = (d & 0x7f)
+ case VariantRFC4122:
+ d = (d & 0x3f) | 0x80
+ case VariantMicrosoft:
+ d = (d & 0x1f) | 0xc0
+ case VariantFuture:
+ d = (d & 0x0f) | 0xe0
+ case VariantUnknown:
+ fallthrough
+ default:
+ panic(fmt.Sprintf("invalid variant: %d", v))
+ }
+ g.Data4[0] = d
+}
+
+// Variant returns the GUID variant, as defined in RFC 4122.
+func (g GUID) Variant() Variant {
+ b := g.Data4[0]
+ if b&0x80 == 0 {
+ return VariantNCS
+ } else if b&0xc0 == 0x80 {
+ return VariantRFC4122
+ } else if b&0xe0 == 0xc0 {
+ return VariantMicrosoft
+ } else if b&0xe0 == 0xe0 {
+ return VariantFuture
+ }
+ return VariantUnknown
+}
+
+func (g *GUID) setVersion(v Version) {
+ g.Data3 = (g.Data3 & 0x0fff) | (uint16(v) << 12)
+}
+
+// Version returns the GUID version, as defined in RFC 4122.
+func (g GUID) Version() Version {
+ return Version((g.Data3 & 0xF000) >> 12)
+}
+
+// MarshalText returns the textual representation of the GUID.
+func (g GUID) MarshalText() ([]byte, error) {
+ return []byte(g.String()), nil
+}
+
+// UnmarshalText takes the textual representation of a GUID, and unmarhals it
+// into this GUID.
+func (g *GUID) UnmarshalText(text []byte) error {
+ g2, err := FromString(string(text))
+ if err != nil {
+ return err
+ }
+ *g = g2
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/go-winio/privilege.go b/vendor/github.com/Microsoft/go-winio/privilege.go
new file mode 100644
index 00000000..9c83d36f
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/privilege.go
@@ -0,0 +1,202 @@
+// +build windows
+
+package winio
+
+import (
+ "bytes"
+ "encoding/binary"
+ "fmt"
+ "runtime"
+ "sync"
+ "syscall"
+ "unicode/utf16"
+
+ "golang.org/x/sys/windows"
+)
+
+//sys adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges
+//sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf
+//sys revertToSelf() (err error) = advapi32.RevertToSelf
+//sys openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken
+//sys getCurrentThread() (h syscall.Handle) = GetCurrentThread
+//sys lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) = advapi32.LookupPrivilegeValueW
+//sys lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) = advapi32.LookupPrivilegeNameW
+//sys lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) = advapi32.LookupPrivilegeDisplayNameW
+
+const (
+ SE_PRIVILEGE_ENABLED = 2
+
+ ERROR_NOT_ALL_ASSIGNED syscall.Errno = 1300
+
+ SeBackupPrivilege = "SeBackupPrivilege"
+ SeRestorePrivilege = "SeRestorePrivilege"
+)
+
+const (
+ securityAnonymous = iota
+ securityIdentification
+ securityImpersonation
+ securityDelegation
+)
+
+var (
+ privNames = make(map[string]uint64)
+ privNameMutex sync.Mutex
+)
+
+// PrivilegeError represents an error enabling privileges.
+type PrivilegeError struct {
+ privileges []uint64
+}
+
+func (e *PrivilegeError) Error() string {
+ s := ""
+ if len(e.privileges) > 1 {
+ s = "Could not enable privileges "
+ } else {
+ s = "Could not enable privilege "
+ }
+ for i, p := range e.privileges {
+ if i != 0 {
+ s += ", "
+ }
+ s += `"`
+ s += getPrivilegeName(p)
+ s += `"`
+ }
+ return s
+}
+
+// RunWithPrivilege enables a single privilege for a function call.
+func RunWithPrivilege(name string, fn func() error) error {
+ return RunWithPrivileges([]string{name}, fn)
+}
+
+// RunWithPrivileges enables privileges for a function call.
+func RunWithPrivileges(names []string, fn func() error) error {
+ privileges, err := mapPrivileges(names)
+ if err != nil {
+ return err
+ }
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+ token, err := newThreadToken()
+ if err != nil {
+ return err
+ }
+ defer releaseThreadToken(token)
+ err = adjustPrivileges(token, privileges, SE_PRIVILEGE_ENABLED)
+ if err != nil {
+ return err
+ }
+ return fn()
+}
+
+func mapPrivileges(names []string) ([]uint64, error) {
+ var privileges []uint64
+ privNameMutex.Lock()
+ defer privNameMutex.Unlock()
+ for _, name := range names {
+ p, ok := privNames[name]
+ if !ok {
+ err := lookupPrivilegeValue("", name, &p)
+ if err != nil {
+ return nil, err
+ }
+ privNames[name] = p
+ }
+ privileges = append(privileges, p)
+ }
+ return privileges, nil
+}
+
+// EnableProcessPrivileges enables privileges globally for the process.
+func EnableProcessPrivileges(names []string) error {
+ return enableDisableProcessPrivilege(names, SE_PRIVILEGE_ENABLED)
+}
+
+// DisableProcessPrivileges disables privileges globally for the process.
+func DisableProcessPrivileges(names []string) error {
+ return enableDisableProcessPrivilege(names, 0)
+}
+
+func enableDisableProcessPrivilege(names []string, action uint32) error {
+ privileges, err := mapPrivileges(names)
+ if err != nil {
+ return err
+ }
+
+ p, _ := windows.GetCurrentProcess()
+ var token windows.Token
+ err = windows.OpenProcessToken(p, windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, &token)
+ if err != nil {
+ return err
+ }
+
+ defer token.Close()
+ return adjustPrivileges(token, privileges, action)
+}
+
+func adjustPrivileges(token windows.Token, privileges []uint64, action uint32) error {
+ var b bytes.Buffer
+ binary.Write(&b, binary.LittleEndian, uint32(len(privileges)))
+ for _, p := range privileges {
+ binary.Write(&b, binary.LittleEndian, p)
+ binary.Write(&b, binary.LittleEndian, action)
+ }
+ prevState := make([]byte, b.Len())
+ reqSize := uint32(0)
+ success, err := adjustTokenPrivileges(token, false, &b.Bytes()[0], uint32(len(prevState)), &prevState[0], &reqSize)
+ if !success {
+ return err
+ }
+ if err == ERROR_NOT_ALL_ASSIGNED {
+ return &PrivilegeError{privileges}
+ }
+ return nil
+}
+
+func getPrivilegeName(luid uint64) string {
+ var nameBuffer [256]uint16
+ bufSize := uint32(len(nameBuffer))
+ err := lookupPrivilegeName("", &luid, &nameBuffer[0], &bufSize)
+ if err != nil {
+ return fmt.Sprintf("", luid)
+ }
+
+ var displayNameBuffer [256]uint16
+ displayBufSize := uint32(len(displayNameBuffer))
+ var langID uint32
+ err = lookupPrivilegeDisplayName("", &nameBuffer[0], &displayNameBuffer[0], &displayBufSize, &langID)
+ if err != nil {
+ return fmt.Sprintf("", string(utf16.Decode(nameBuffer[:bufSize])))
+ }
+
+ return string(utf16.Decode(displayNameBuffer[:displayBufSize]))
+}
+
+func newThreadToken() (windows.Token, error) {
+ err := impersonateSelf(securityImpersonation)
+ if err != nil {
+ return 0, err
+ }
+
+ var token windows.Token
+ err = openThreadToken(getCurrentThread(), syscall.TOKEN_ADJUST_PRIVILEGES|syscall.TOKEN_QUERY, false, &token)
+ if err != nil {
+ rerr := revertToSelf()
+ if rerr != nil {
+ panic(rerr)
+ }
+ return 0, err
+ }
+ return token, nil
+}
+
+func releaseThreadToken(h windows.Token) {
+ err := revertToSelf()
+ if err != nil {
+ panic(err)
+ }
+ h.Close()
+}
diff --git a/vendor/github.com/Microsoft/go-winio/reparse.go b/vendor/github.com/Microsoft/go-winio/reparse.go
new file mode 100644
index 00000000..fc1ee4d3
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/reparse.go
@@ -0,0 +1,128 @@
+package winio
+
+import (
+ "bytes"
+ "encoding/binary"
+ "fmt"
+ "strings"
+ "unicode/utf16"
+ "unsafe"
+)
+
+const (
+ reparseTagMountPoint = 0xA0000003
+ reparseTagSymlink = 0xA000000C
+)
+
+type reparseDataBuffer struct {
+ ReparseTag uint32
+ ReparseDataLength uint16
+ Reserved uint16
+ SubstituteNameOffset uint16
+ SubstituteNameLength uint16
+ PrintNameOffset uint16
+ PrintNameLength uint16
+}
+
+// ReparsePoint describes a Win32 symlink or mount point.
+type ReparsePoint struct {
+ Target string
+ IsMountPoint bool
+}
+
+// UnsupportedReparsePointError is returned when trying to decode a non-symlink or
+// mount point reparse point.
+type UnsupportedReparsePointError struct {
+ Tag uint32
+}
+
+func (e *UnsupportedReparsePointError) Error() string {
+ return fmt.Sprintf("unsupported reparse point %x", e.Tag)
+}
+
+// DecodeReparsePoint decodes a Win32 REPARSE_DATA_BUFFER structure containing either a symlink
+// or a mount point.
+func DecodeReparsePoint(b []byte) (*ReparsePoint, error) {
+ tag := binary.LittleEndian.Uint32(b[0:4])
+ return DecodeReparsePointData(tag, b[8:])
+}
+
+func DecodeReparsePointData(tag uint32, b []byte) (*ReparsePoint, error) {
+ isMountPoint := false
+ switch tag {
+ case reparseTagMountPoint:
+ isMountPoint = true
+ case reparseTagSymlink:
+ default:
+ return nil, &UnsupportedReparsePointError{tag}
+ }
+ nameOffset := 8 + binary.LittleEndian.Uint16(b[4:6])
+ if !isMountPoint {
+ nameOffset += 4
+ }
+ nameLength := binary.LittleEndian.Uint16(b[6:8])
+ name := make([]uint16, nameLength/2)
+ err := binary.Read(bytes.NewReader(b[nameOffset:nameOffset+nameLength]), binary.LittleEndian, &name)
+ if err != nil {
+ return nil, err
+ }
+ return &ReparsePoint{string(utf16.Decode(name)), isMountPoint}, nil
+}
+
+func isDriveLetter(c byte) bool {
+ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
+}
+
+// EncodeReparsePoint encodes a Win32 REPARSE_DATA_BUFFER structure describing a symlink or
+// mount point.
+func EncodeReparsePoint(rp *ReparsePoint) []byte {
+ // Generate an NT path and determine if this is a relative path.
+ var ntTarget string
+ relative := false
+ if strings.HasPrefix(rp.Target, `\\?\`) {
+ ntTarget = `\??\` + rp.Target[4:]
+ } else if strings.HasPrefix(rp.Target, `\\`) {
+ ntTarget = `\??\UNC\` + rp.Target[2:]
+ } else if len(rp.Target) >= 2 && isDriveLetter(rp.Target[0]) && rp.Target[1] == ':' {
+ ntTarget = `\??\` + rp.Target
+ } else {
+ ntTarget = rp.Target
+ relative = true
+ }
+
+ // The paths must be NUL-terminated even though they are counted strings.
+ target16 := utf16.Encode([]rune(rp.Target + "\x00"))
+ ntTarget16 := utf16.Encode([]rune(ntTarget + "\x00"))
+
+ size := int(unsafe.Sizeof(reparseDataBuffer{})) - 8
+ size += len(ntTarget16)*2 + len(target16)*2
+
+ tag := uint32(reparseTagMountPoint)
+ if !rp.IsMountPoint {
+ tag = reparseTagSymlink
+ size += 4 // Add room for symlink flags
+ }
+
+ data := reparseDataBuffer{
+ ReparseTag: tag,
+ ReparseDataLength: uint16(size),
+ SubstituteNameOffset: 0,
+ SubstituteNameLength: uint16((len(ntTarget16) - 1) * 2),
+ PrintNameOffset: uint16(len(ntTarget16) * 2),
+ PrintNameLength: uint16((len(target16) - 1) * 2),
+ }
+
+ var b bytes.Buffer
+ binary.Write(&b, binary.LittleEndian, &data)
+ if !rp.IsMountPoint {
+ flags := uint32(0)
+ if relative {
+ flags |= 1
+ }
+ binary.Write(&b, binary.LittleEndian, flags)
+ }
+
+ binary.Write(&b, binary.LittleEndian, ntTarget16)
+ binary.Write(&b, binary.LittleEndian, target16)
+ return b.Bytes()
+}
diff --git a/vendor/github.com/Microsoft/go-winio/sd.go b/vendor/github.com/Microsoft/go-winio/sd.go
new file mode 100644
index 00000000..db1b370a
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/sd.go
@@ -0,0 +1,98 @@
+// +build windows
+
+package winio
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+//sys lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountNameW
+//sys convertSidToStringSid(sid *byte, str **uint16) (err error) = advapi32.ConvertSidToStringSidW
+//sys convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW
+//sys convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW
+//sys localFree(mem uintptr) = LocalFree
+//sys getSecurityDescriptorLength(sd uintptr) (len uint32) = advapi32.GetSecurityDescriptorLength
+
+const (
+ cERROR_NONE_MAPPED = syscall.Errno(1332)
+)
+
+type AccountLookupError struct {
+ Name string
+ Err error
+}
+
+func (e *AccountLookupError) Error() string {
+ if e.Name == "" {
+ return "lookup account: empty account name specified"
+ }
+ var s string
+ switch e.Err {
+ case cERROR_NONE_MAPPED:
+ s = "not found"
+ default:
+ s = e.Err.Error()
+ }
+ return "lookup account " + e.Name + ": " + s
+}
+
+type SddlConversionError struct {
+ Sddl string
+ Err error
+}
+
+func (e *SddlConversionError) Error() string {
+ return "convert " + e.Sddl + ": " + e.Err.Error()
+}
+
+// LookupSidByName looks up the SID of an account by name
+func LookupSidByName(name string) (sid string, err error) {
+ if name == "" {
+ return "", &AccountLookupError{name, cERROR_NONE_MAPPED}
+ }
+
+ var sidSize, sidNameUse, refDomainSize uint32
+ err = lookupAccountName(nil, name, nil, &sidSize, nil, &refDomainSize, &sidNameUse)
+ if err != nil && err != syscall.ERROR_INSUFFICIENT_BUFFER {
+ return "", &AccountLookupError{name, err}
+ }
+ sidBuffer := make([]byte, sidSize)
+ refDomainBuffer := make([]uint16, refDomainSize)
+ err = lookupAccountName(nil, name, &sidBuffer[0], &sidSize, &refDomainBuffer[0], &refDomainSize, &sidNameUse)
+ if err != nil {
+ return "", &AccountLookupError{name, err}
+ }
+ var strBuffer *uint16
+ err = convertSidToStringSid(&sidBuffer[0], &strBuffer)
+ if err != nil {
+ return "", &AccountLookupError{name, err}
+ }
+ sid = syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:])
+ localFree(uintptr(unsafe.Pointer(strBuffer)))
+ return sid, nil
+}
+
+func SddlToSecurityDescriptor(sddl string) ([]byte, error) {
+ var sdBuffer uintptr
+ err := convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &sdBuffer, nil)
+ if err != nil {
+ return nil, &SddlConversionError{sddl, err}
+ }
+ defer localFree(sdBuffer)
+ sd := make([]byte, getSecurityDescriptorLength(sdBuffer))
+ copy(sd, (*[0xffff]byte)(unsafe.Pointer(sdBuffer))[:len(sd)])
+ return sd, nil
+}
+
+func SecurityDescriptorToSddl(sd []byte) (string, error) {
+ var sddl *uint16
+ // The returned string length seems to including an aribtrary number of terminating NULs.
+ // Don't use it.
+ err := convertSecurityDescriptorToStringSecurityDescriptor(&sd[0], 1, 0xff, &sddl, nil)
+ if err != nil {
+ return "", err
+ }
+ defer localFree(uintptr(unsafe.Pointer(sddl)))
+ return syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(sddl))[:]), nil
+}
diff --git a/vendor/github.com/Microsoft/go-winio/syscall.go b/vendor/github.com/Microsoft/go-winio/syscall.go
new file mode 100644
index 00000000..5955c99f
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/syscall.go
@@ -0,0 +1,3 @@
+package winio
+
+//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go file.go pipe.go sd.go fileinfo.go privilege.go backup.go hvsock.go
diff --git a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
new file mode 100644
index 00000000..176ff75e
--- /dev/null
+++ b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
@@ -0,0 +1,427 @@
+// Code generated by 'go generate'; DO NOT EDIT.
+
+package winio
+
+import (
+ "syscall"
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+var _ unsafe.Pointer
+
+// Do the interface allocations only once for common
+// Errno values.
+const (
+ errnoERROR_IO_PENDING = 997
+)
+
+var (
+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
+ errERROR_EINVAL error = syscall.EINVAL
+)
+
+// errnoErr returns common boxed Errno values, to prevent
+// allocations at runtime.
+func errnoErr(e syscall.Errno) error {
+ switch e {
+ case 0:
+ return errERROR_EINVAL
+ case errnoERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ }
+ // TODO: add more here, after collecting data on the common
+ // error values see on Windows. (perhaps when running
+ // all.bat?)
+ return e
+}
+
+var (
+ modadvapi32 = windows.NewLazySystemDLL("advapi32.dll")
+ modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
+ modntdll = windows.NewLazySystemDLL("ntdll.dll")
+ modws2_32 = windows.NewLazySystemDLL("ws2_32.dll")
+
+ procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges")
+ procConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc("ConvertSecurityDescriptorToStringSecurityDescriptorW")
+ procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW")
+ procConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc("ConvertStringSecurityDescriptorToSecurityDescriptorW")
+ procGetSecurityDescriptorLength = modadvapi32.NewProc("GetSecurityDescriptorLength")
+ procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf")
+ procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW")
+ procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW")
+ procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW")
+ procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW")
+ procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken")
+ procRevertToSelf = modadvapi32.NewProc("RevertToSelf")
+ procBackupRead = modkernel32.NewProc("BackupRead")
+ procBackupWrite = modkernel32.NewProc("BackupWrite")
+ procCancelIoEx = modkernel32.NewProc("CancelIoEx")
+ procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe")
+ procCreateFileW = modkernel32.NewProc("CreateFileW")
+ procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort")
+ procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW")
+ procGetCurrentThread = modkernel32.NewProc("GetCurrentThread")
+ procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW")
+ procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo")
+ procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus")
+ procLocalAlloc = modkernel32.NewProc("LocalAlloc")
+ procLocalFree = modkernel32.NewProc("LocalFree")
+ procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes")
+ procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile")
+ procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl")
+ procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U")
+ procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
+ procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult")
+ procbind = modws2_32.NewProc("bind")
+)
+
+func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) {
+ var _p0 uint32
+ if releaseAll {
+ _p0 = 1
+ }
+ r0, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize)))
+ success = r0 != 0
+ if true {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func convertSecurityDescriptorToStringSecurityDescriptor(sd *byte, revision uint32, secInfo uint32, sddl **uint16, sddlSize *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(secInfo), uintptr(unsafe.Pointer(sddl)), uintptr(unsafe.Pointer(sddlSize)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func convertSidToStringSid(sid *byte, str **uint16) (err error) {
+ r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd *uintptr, size *uint32) (err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(str)
+ if err != nil {
+ return
+ }
+ return _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size)
+}
+
+func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd *uintptr, size *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func getSecurityDescriptorLength(sd uintptr) (len uint32) {
+ r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(sd), 0, 0)
+ len = uint32(r0)
+ return
+}
+
+func impersonateSelf(level uint32) (err error) {
+ r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(level), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(accountName)
+ if err != nil {
+ return
+ }
+ return _lookupAccountName(systemName, _p0, sid, sidSize, refDomain, refDomainSize, sidNameUse)
+}
+
+func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(systemName)
+ if err != nil {
+ return
+ }
+ return _lookupPrivilegeDisplayName(_p0, name, buffer, size, languageId)
+}
+
+func _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procLookupPrivilegeDisplayNameW.Addr(), 5, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(systemName)
+ if err != nil {
+ return
+ }
+ return _lookupPrivilegeName(_p0, luid, buffer, size)
+}
+
+func _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint16, size *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procLookupPrivilegeNameW.Addr(), 4, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(systemName)
+ if err != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, err = syscall.UTF16PtrFromString(name)
+ if err != nil {
+ return
+ }
+ return _lookupPrivilegeValue(_p0, _p1, luid)
+}
+
+func _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint64) (err error) {
+ r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid)))
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) {
+ var _p0 uint32
+ if openAsSelf {
+ _p0 = 1
+ }
+ r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func revertToSelf() (err error) {
+ r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func backupRead(h syscall.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ var _p1 uint32
+ if abort {
+ _p1 = 1
+ }
+ var _p2 uint32
+ if processSecurity {
+ _p2 = 1
+ }
+ r1, _, e1 := syscall.Syscall9(procBackupRead.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func backupWrite(h syscall.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ var _p1 uint32
+ if abort {
+ _p1 = 1
+ }
+ var _p2 uint32
+ if processSecurity {
+ _p2 = 1
+ }
+ r1, _, e1 := syscall.Syscall9(procBackupWrite.Addr(), 7, uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func cancelIoEx(file syscall.Handle, o *syscall.Overlapped) (err error) {
+ r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(file), uintptr(unsafe.Pointer(o)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) {
+ r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(o)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func createFile(name string, access uint32, mode uint32, sa *syscall.SecurityAttributes, createmode uint32, attrs uint32, templatefile syscall.Handle) (handle syscall.Handle, err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(name)
+ if err != nil {
+ return
+ }
+ return _createFile(_p0, access, mode, sa, createmode, attrs, templatefile)
+}
+
+func _createFile(name *uint16, access uint32, mode uint32, sa *syscall.SecurityAttributes, createmode uint32, attrs uint32, templatefile syscall.Handle) (handle syscall.Handle, err error) {
+ r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0)
+ handle = syscall.Handle(r0)
+ if handle == syscall.InvalidHandle {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) {
+ r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount), 0, 0)
+ newport = syscall.Handle(r0)
+ if newport == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) {
+ var _p0 *uint16
+ _p0, err = syscall.UTF16PtrFromString(name)
+ if err != nil {
+ return
+ }
+ return _createNamedPipe(_p0, flags, pipeMode, maxInstances, outSize, inSize, defaultTimeout, sa)
+}
+
+func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) {
+ r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0)
+ handle = syscall.Handle(r0)
+ if handle == syscall.InvalidHandle {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func getCurrentThread() (h syscall.Handle) {
+ r0, _, _ := syscall.Syscall(procGetCurrentThread.Addr(), 0, 0, 0, 0)
+ h = syscall.Handle(r0)
+ return
+}
+
+func getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) {
+ r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) {
+ r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func localAlloc(uFlags uint32, length uint32) (ptr uintptr) {
+ r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(uFlags), uintptr(length), 0)
+ ptr = uintptr(r0)
+ return
+}
+
+func localFree(mem uintptr) {
+ syscall.Syscall(procLocalFree.Addr(), 1, uintptr(mem), 0, 0)
+ return
+}
+
+func setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) {
+ r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(h), uintptr(flags), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func ntCreateNamedPipeFile(pipe *syscall.Handle, access uint32, oa *objectAttributes, iosb *ioStatusBlock, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntstatus) {
+ r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0)
+ status = ntstatus(r0)
+ return
+}
+
+func rtlDefaultNpAcl(dacl *uintptr) (status ntstatus) {
+ r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(dacl)), 0, 0)
+ status = ntstatus(r0)
+ return
+}
+
+func rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntstatus) {
+ r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved), 0, 0)
+ status = ntstatus(r0)
+ return
+}
+
+func rtlNtStatusToDosError(status ntstatus) (winerr error) {
+ r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(status), 0, 0)
+ if r0 != 0 {
+ winerr = syscall.Errno(r0)
+ }
+ return
+}
+
+func wsaGetOverlappedResult(h syscall.Handle, o *syscall.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) {
+ var _p0 uint32
+ if wait {
+ _p0 = 1
+ }
+ r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func bind(s syscall.Handle, name unsafe.Pointer, namelen int32) (err error) {
+ r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen))
+ if r1 == socketError {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/github.com/containerd/containerd/LICENSE b/vendor/github.com/containerd/containerd/LICENSE
new file mode 100644
index 00000000..584149b6
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/LICENSE
@@ -0,0 +1,191 @@
+
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright The containerd Authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/vendor/github.com/containerd/containerd/NOTICE b/vendor/github.com/containerd/containerd/NOTICE
new file mode 100644
index 00000000..8915f027
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/NOTICE
@@ -0,0 +1,16 @@
+Docker
+Copyright 2012-2015 Docker, Inc.
+
+This product includes software developed at Docker, Inc. (https://www.docker.com).
+
+The following is courtesy of our legal counsel:
+
+
+Use and transfer of Docker may be subject to certain restrictions by the
+United States and other governments.
+It is your responsibility to ensure that your use and/or transfer does not
+violate applicable laws.
+
+For more information, please see https://www.bis.doc.gov
+
+See also https://www.apache.org/dev/crypto.html and/or seek legal counsel.
diff --git a/vendor/github.com/containerd/containerd/errdefs/errors.go b/vendor/github.com/containerd/containerd/errdefs/errors.go
new file mode 100644
index 00000000..05a35228
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/errdefs/errors.go
@@ -0,0 +1,93 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+// Package errdefs defines the common errors used throughout containerd
+// packages.
+//
+// Use with errors.Wrap and error.Wrapf to add context to an error.
+//
+// To detect an error class, use the IsXXX functions to tell whether an error
+// is of a certain type.
+//
+// The functions ToGRPC and FromGRPC can be used to map server-side and
+// client-side errors to the correct types.
+package errdefs
+
+import (
+ "context"
+
+ "github.com/pkg/errors"
+)
+
+// Definitions of common error types used throughout containerd. All containerd
+// errors returned by most packages will map into one of these errors classes.
+// Packages should return errors of these types when they want to instruct a
+// client to take a particular action.
+//
+// For the most part, we just try to provide local grpc errors. Most conditions
+// map very well to those defined by grpc.
+var (
+ ErrUnknown = errors.New("unknown") // used internally to represent a missed mapping.
+ ErrInvalidArgument = errors.New("invalid argument")
+ ErrNotFound = errors.New("not found")
+ ErrAlreadyExists = errors.New("already exists")
+ ErrFailedPrecondition = errors.New("failed precondition")
+ ErrUnavailable = errors.New("unavailable")
+ ErrNotImplemented = errors.New("not implemented") // represents not supported and unimplemented
+)
+
+// IsInvalidArgument returns true if the error is due to an invalid argument
+func IsInvalidArgument(err error) bool {
+ return errors.Is(err, ErrInvalidArgument)
+}
+
+// IsNotFound returns true if the error is due to a missing object
+func IsNotFound(err error) bool {
+ return errors.Is(err, ErrNotFound)
+}
+
+// IsAlreadyExists returns true if the error is due to an already existing
+// metadata item
+func IsAlreadyExists(err error) bool {
+ return errors.Is(err, ErrAlreadyExists)
+}
+
+// IsFailedPrecondition returns true if an operation could not proceed to the
+// lack of a particular condition
+func IsFailedPrecondition(err error) bool {
+ return errors.Is(err, ErrFailedPrecondition)
+}
+
+// IsUnavailable returns true if the error is due to a resource being unavailable
+func IsUnavailable(err error) bool {
+ return errors.Is(err, ErrUnavailable)
+}
+
+// IsNotImplemented returns true if the error is due to not being implemented
+func IsNotImplemented(err error) bool {
+ return errors.Is(err, ErrNotImplemented)
+}
+
+// IsCanceled returns true if the error is due to `context.Canceled`.
+func IsCanceled(err error) bool {
+ return errors.Is(err, context.Canceled)
+}
+
+// IsDeadlineExceeded returns true if the error is due to
+// `context.DeadlineExceeded`.
+func IsDeadlineExceeded(err error) bool {
+ return errors.Is(err, context.DeadlineExceeded)
+}
diff --git a/vendor/github.com/containerd/containerd/errdefs/grpc.go b/vendor/github.com/containerd/containerd/errdefs/grpc.go
new file mode 100644
index 00000000..209f63bd
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/errdefs/grpc.go
@@ -0,0 +1,147 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package errdefs
+
+import (
+ "context"
+ "strings"
+
+ "github.com/pkg/errors"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+)
+
+// ToGRPC will attempt to map the backend containerd error into a grpc error,
+// using the original error message as a description.
+//
+// Further information may be extracted from certain errors depending on their
+// type.
+//
+// If the error is unmapped, the original error will be returned to be handled
+// by the regular grpc error handling stack.
+func ToGRPC(err error) error {
+ if err == nil {
+ return nil
+ }
+
+ if isGRPCError(err) {
+ // error has already been mapped to grpc
+ return err
+ }
+
+ switch {
+ case IsInvalidArgument(err):
+ return status.Errorf(codes.InvalidArgument, err.Error())
+ case IsNotFound(err):
+ return status.Errorf(codes.NotFound, err.Error())
+ case IsAlreadyExists(err):
+ return status.Errorf(codes.AlreadyExists, err.Error())
+ case IsFailedPrecondition(err):
+ return status.Errorf(codes.FailedPrecondition, err.Error())
+ case IsUnavailable(err):
+ return status.Errorf(codes.Unavailable, err.Error())
+ case IsNotImplemented(err):
+ return status.Errorf(codes.Unimplemented, err.Error())
+ case IsCanceled(err):
+ return status.Errorf(codes.Canceled, err.Error())
+ case IsDeadlineExceeded(err):
+ return status.Errorf(codes.DeadlineExceeded, err.Error())
+ }
+
+ return err
+}
+
+// ToGRPCf maps the error to grpc error codes, assembling the formatting string
+// and combining it with the target error string.
+//
+// This is equivalent to errors.ToGRPC(errors.Wrapf(err, format, args...))
+func ToGRPCf(err error, format string, args ...interface{}) error {
+ return ToGRPC(errors.Wrapf(err, format, args...))
+}
+
+// FromGRPC returns the underlying error from a grpc service based on the grpc error code
+func FromGRPC(err error) error {
+ if err == nil {
+ return nil
+ }
+
+ var cls error // divide these into error classes, becomes the cause
+
+ switch code(err) {
+ case codes.InvalidArgument:
+ cls = ErrInvalidArgument
+ case codes.AlreadyExists:
+ cls = ErrAlreadyExists
+ case codes.NotFound:
+ cls = ErrNotFound
+ case codes.Unavailable:
+ cls = ErrUnavailable
+ case codes.FailedPrecondition:
+ cls = ErrFailedPrecondition
+ case codes.Unimplemented:
+ cls = ErrNotImplemented
+ case codes.Canceled:
+ cls = context.Canceled
+ case codes.DeadlineExceeded:
+ cls = context.DeadlineExceeded
+ default:
+ cls = ErrUnknown
+ }
+
+ msg := rebaseMessage(cls, err)
+ if msg != "" {
+ err = errors.Wrap(cls, msg)
+ } else {
+ err = errors.WithStack(cls)
+ }
+
+ return err
+}
+
+// rebaseMessage removes the repeats for an error at the end of an error
+// string. This will happen when taking an error over grpc then remapping it.
+//
+// Effectively, we just remove the string of cls from the end of err if it
+// appears there.
+func rebaseMessage(cls error, err error) string {
+ desc := errDesc(err)
+ clss := cls.Error()
+ if desc == clss {
+ return ""
+ }
+
+ return strings.TrimSuffix(desc, ": "+clss)
+}
+
+func isGRPCError(err error) bool {
+ _, ok := status.FromError(err)
+ return ok
+}
+
+func code(err error) codes.Code {
+ if s, ok := status.FromError(err); ok {
+ return s.Code()
+ }
+ return codes.Unknown
+}
+
+func errDesc(err error) string {
+ if s, ok := status.FromError(err); ok {
+ return s.Message()
+ }
+ return err.Error()
+}
diff --git a/vendor/github.com/containerd/containerd/log/context.go b/vendor/github.com/containerd/containerd/log/context.go
new file mode 100644
index 00000000..37b6a7d1
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/log/context.go
@@ -0,0 +1,68 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package log
+
+import (
+ "context"
+
+ "github.com/sirupsen/logrus"
+)
+
+var (
+ // G is an alias for GetLogger.
+ //
+ // We may want to define this locally to a package to get package tagged log
+ // messages.
+ G = GetLogger
+
+ // L is an alias for the standard logger.
+ L = logrus.NewEntry(logrus.StandardLogger())
+)
+
+type (
+ loggerKey struct{}
+)
+
+const (
+ // RFC3339NanoFixed is time.RFC3339Nano with nanoseconds padded using zeros to
+ // ensure the formatted time is always the same number of characters.
+ RFC3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00"
+
+ // TextFormat represents the text logging format
+ TextFormat = "text"
+
+ // JSONFormat represents the JSON logging format
+ JSONFormat = "json"
+)
+
+// WithLogger returns a new context with the provided logger. Use in
+// combination with logger.WithField(s) for great effect.
+func WithLogger(ctx context.Context, logger *logrus.Entry) context.Context {
+ return context.WithValue(ctx, loggerKey{}, logger)
+}
+
+// GetLogger retrieves the current logger from the context. If no logger is
+// available, the default logger is returned.
+func GetLogger(ctx context.Context) *logrus.Entry {
+ logger := ctx.Value(loggerKey{})
+
+ if logger == nil {
+ return L
+ }
+
+ return logger.(*logrus.Entry)
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/compare.go b/vendor/github.com/containerd/containerd/platforms/compare.go
new file mode 100644
index 00000000..c7657e18
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/platforms/compare.go
@@ -0,0 +1,193 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+import (
+ "strconv"
+ "strings"
+
+ specs "github.com/opencontainers/image-spec/specs-go/v1"
+)
+
+// MatchComparer is able to match and compare platforms to
+// filter and sort platforms.
+type MatchComparer interface {
+ Matcher
+
+ Less(specs.Platform, specs.Platform) bool
+}
+
+// platformVector returns an (ordered) vector of appropriate specs.Platform
+// objects to try matching for the given platform object (see platforms.Only).
+func platformVector(platform specs.Platform) []specs.Platform {
+ vector := []specs.Platform{platform}
+
+ switch platform.Architecture {
+ case "amd64":
+ vector = append(vector, specs.Platform{
+ Architecture: "386",
+ OS: platform.OS,
+ OSVersion: platform.OSVersion,
+ OSFeatures: platform.OSFeatures,
+ Variant: platform.Variant,
+ })
+ case "arm":
+ if armVersion, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, "v")); err == nil && armVersion > 5 {
+ for armVersion--; armVersion >= 5; armVersion-- {
+ vector = append(vector, specs.Platform{
+ Architecture: platform.Architecture,
+ OS: platform.OS,
+ OSVersion: platform.OSVersion,
+ OSFeatures: platform.OSFeatures,
+ Variant: "v" + strconv.Itoa(armVersion),
+ })
+ }
+ }
+ case "arm64":
+ variant := platform.Variant
+ if variant == "" {
+ variant = "v8"
+ }
+ vector = append(vector, platformVector(specs.Platform{
+ Architecture: "arm",
+ OS: platform.OS,
+ OSVersion: platform.OSVersion,
+ OSFeatures: platform.OSFeatures,
+ Variant: variant,
+ })...)
+ }
+
+ return vector
+}
+
+// Only returns a match comparer for a single platform
+// using default resolution logic for the platform.
+//
+// For arm/v8, will also match arm/v7, arm/v6 and arm/v5
+// For arm/v7, will also match arm/v6 and arm/v5
+// For arm/v6, will also match arm/v5
+// For amd64, will also match 386
+func Only(platform specs.Platform) MatchComparer {
+ return Ordered(platformVector(Normalize(platform))...)
+}
+
+// OnlyStrict returns a match comparer for a single platform.
+//
+// Unlike Only, OnlyStrict does not match sub platforms.
+// So, "arm/vN" will not match "arm/vM" where M < N,
+// and "amd64" will not also match "386".
+//
+// OnlyStrict matches non-canonical forms.
+// So, "arm64" matches "arm/64/v8".
+func OnlyStrict(platform specs.Platform) MatchComparer {
+ return Ordered(Normalize(platform))
+}
+
+// Ordered returns a platform MatchComparer which matches any of the platforms
+// but orders them in order they are provided.
+func Ordered(platforms ...specs.Platform) MatchComparer {
+ matchers := make([]Matcher, len(platforms))
+ for i := range platforms {
+ matchers[i] = NewMatcher(platforms[i])
+ }
+ return orderedPlatformComparer{
+ matchers: matchers,
+ }
+}
+
+// Any returns a platform MatchComparer which matches any of the platforms
+// with no preference for ordering.
+func Any(platforms ...specs.Platform) MatchComparer {
+ matchers := make([]Matcher, len(platforms))
+ for i := range platforms {
+ matchers[i] = NewMatcher(platforms[i])
+ }
+ return anyPlatformComparer{
+ matchers: matchers,
+ }
+}
+
+// All is a platform MatchComparer which matches all platforms
+// with preference for ordering.
+var All MatchComparer = allPlatformComparer{}
+
+type orderedPlatformComparer struct {
+ matchers []Matcher
+}
+
+func (c orderedPlatformComparer) Match(platform specs.Platform) bool {
+ for _, m := range c.matchers {
+ if m.Match(platform) {
+ return true
+ }
+ }
+ return false
+}
+
+func (c orderedPlatformComparer) Less(p1 specs.Platform, p2 specs.Platform) bool {
+ for _, m := range c.matchers {
+ p1m := m.Match(p1)
+ p2m := m.Match(p2)
+ if p1m && !p2m {
+ return true
+ }
+ if p1m || p2m {
+ return false
+ }
+ }
+ return false
+}
+
+type anyPlatformComparer struct {
+ matchers []Matcher
+}
+
+func (c anyPlatformComparer) Match(platform specs.Platform) bool {
+ for _, m := range c.matchers {
+ if m.Match(platform) {
+ return true
+ }
+ }
+ return false
+}
+
+func (c anyPlatformComparer) Less(p1, p2 specs.Platform) bool {
+ var p1m, p2m bool
+ for _, m := range c.matchers {
+ if !p1m && m.Match(p1) {
+ p1m = true
+ }
+ if !p2m && m.Match(p2) {
+ p2m = true
+ }
+ if p1m && p2m {
+ return false
+ }
+ }
+ // If one matches, and the other does, sort match first
+ return p1m && !p2m
+}
+
+type allPlatformComparer struct{}
+
+func (allPlatformComparer) Match(specs.Platform) bool {
+ return true
+}
+
+func (allPlatformComparer) Less(specs.Platform, specs.Platform) bool {
+ return false
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/cpuinfo.go b/vendor/github.com/containerd/containerd/platforms/cpuinfo.go
new file mode 100644
index 00000000..4a7177e3
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/platforms/cpuinfo.go
@@ -0,0 +1,131 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+import (
+ "bufio"
+ "os"
+ "runtime"
+ "strings"
+ "sync"
+
+ "github.com/containerd/containerd/errdefs"
+ "github.com/containerd/containerd/log"
+ "github.com/pkg/errors"
+)
+
+// Present the ARM instruction set architecture, eg: v7, v8
+// Don't use this value directly; call cpuVariant() instead.
+var cpuVariantValue string
+
+var cpuVariantOnce sync.Once
+
+func cpuVariant() string {
+ cpuVariantOnce.Do(func() {
+ if isArmArch(runtime.GOARCH) {
+ cpuVariantValue = getCPUVariant()
+ }
+ })
+ return cpuVariantValue
+}
+
+// For Linux, the kernel has already detected the ABI, ISA and Features.
+// So we don't need to access the ARM registers to detect platform information
+// by ourselves. We can just parse these information from /proc/cpuinfo
+func getCPUInfo(pattern string) (info string, err error) {
+ if !isLinuxOS(runtime.GOOS) {
+ return "", errors.Wrapf(errdefs.ErrNotImplemented, "getCPUInfo for OS %s", runtime.GOOS)
+ }
+
+ cpuinfo, err := os.Open("/proc/cpuinfo")
+ if err != nil {
+ return "", err
+ }
+ defer cpuinfo.Close()
+
+ // Start to Parse the Cpuinfo line by line. For SMP SoC, we parse
+ // the first core is enough.
+ scanner := bufio.NewScanner(cpuinfo)
+ for scanner.Scan() {
+ newline := scanner.Text()
+ list := strings.Split(newline, ":")
+
+ if len(list) > 1 && strings.EqualFold(strings.TrimSpace(list[0]), pattern) {
+ return strings.TrimSpace(list[1]), nil
+ }
+ }
+
+ // Check whether the scanner encountered errors
+ err = scanner.Err()
+ if err != nil {
+ return "", err
+ }
+
+ return "", errors.Wrapf(errdefs.ErrNotFound, "getCPUInfo for pattern: %s", pattern)
+}
+
+func getCPUVariant() string {
+ if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
+ // Windows/Darwin only supports v7 for ARM32 and v8 for ARM64 and so we can use
+ // runtime.GOARCH to determine the variants
+ var variant string
+ switch runtime.GOARCH {
+ case "arm64":
+ variant = "v8"
+ case "arm":
+ variant = "v7"
+ default:
+ variant = "unknown"
+ }
+
+ return variant
+ }
+
+ variant, err := getCPUInfo("Cpu architecture")
+ if err != nil {
+ log.L.WithError(err).Error("failure getting variant")
+ return ""
+ }
+
+ // handle edge case for Raspberry Pi ARMv6 devices (which due to a kernel quirk, report "CPU architecture: 7")
+ // https://www.raspberrypi.org/forums/viewtopic.php?t=12614
+ if runtime.GOARCH == "arm" && variant == "7" {
+ model, err := getCPUInfo("model name")
+ if err == nil && strings.HasPrefix(strings.ToLower(model), "armv6-compatible") {
+ variant = "6"
+ }
+ }
+
+ switch strings.ToLower(variant) {
+ case "8", "aarch64":
+ variant = "v8"
+ case "7", "7m", "?(12)", "?(13)", "?(14)", "?(15)", "?(16)", "?(17)":
+ variant = "v7"
+ case "6", "6tej":
+ variant = "v6"
+ case "5", "5t", "5te", "5tej":
+ variant = "v5"
+ case "4", "4t":
+ variant = "v4"
+ case "3":
+ variant = "v3"
+ default:
+ variant = "unknown"
+ }
+
+ return variant
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/database.go b/vendor/github.com/containerd/containerd/platforms/database.go
new file mode 100644
index 00000000..6ede9406
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/platforms/database.go
@@ -0,0 +1,114 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+import (
+ "runtime"
+ "strings"
+)
+
+// isLinuxOS returns true if the operating system is Linux.
+//
+// The OS value should be normalized before calling this function.
+func isLinuxOS(os string) bool {
+ return os == "linux"
+}
+
+// These function are generated from https://golang.org/src/go/build/syslist.go.
+//
+// We use switch statements because they are slightly faster than map lookups
+// and use a little less memory.
+
+// isKnownOS returns true if we know about the operating system.
+//
+// The OS value should be normalized before calling this function.
+func isKnownOS(os string) bool {
+ switch os {
+ case "aix", "android", "darwin", "dragonfly", "freebsd", "hurd", "illumos", "js", "linux", "nacl", "netbsd", "openbsd", "plan9", "solaris", "windows", "zos":
+ return true
+ }
+ return false
+}
+
+// isArmArch returns true if the architecture is ARM.
+//
+// The arch value should be normalized before being passed to this function.
+func isArmArch(arch string) bool {
+ switch arch {
+ case "arm", "arm64":
+ return true
+ }
+ return false
+}
+
+// isKnownArch returns true if we know about the architecture.
+//
+// The arch value should be normalized before being passed to this function.
+func isKnownArch(arch string) bool {
+ switch arch {
+ case "386", "amd64", "amd64p32", "arm", "armbe", "arm64", "arm64be", "ppc64", "ppc64le", "mips", "mipsle", "mips64", "mips64le", "mips64p32", "mips64p32le", "ppc", "riscv", "riscv64", "s390", "s390x", "sparc", "sparc64", "wasm":
+ return true
+ }
+ return false
+}
+
+func normalizeOS(os string) string {
+ if os == "" {
+ return runtime.GOOS
+ }
+ os = strings.ToLower(os)
+
+ switch os {
+ case "macos":
+ os = "darwin"
+ }
+ return os
+}
+
+// normalizeArch normalizes the architecture.
+func normalizeArch(arch, variant string) (string, string) {
+ arch, variant = strings.ToLower(arch), strings.ToLower(variant)
+ switch arch {
+ case "i386":
+ arch = "386"
+ variant = ""
+ case "x86_64", "x86-64":
+ arch = "amd64"
+ variant = ""
+ case "aarch64", "arm64":
+ arch = "arm64"
+ switch variant {
+ case "8", "v8":
+ variant = ""
+ }
+ case "armhf":
+ arch = "arm"
+ variant = "v7"
+ case "armel":
+ arch = "arm"
+ variant = "v6"
+ case "arm":
+ switch variant {
+ case "", "7":
+ variant = "v7"
+ case "5", "6", "8":
+ variant = "v" + variant
+ }
+ }
+
+ return arch, variant
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults.go b/vendor/github.com/containerd/containerd/platforms/defaults.go
new file mode 100644
index 00000000..cb77fbc9
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/platforms/defaults.go
@@ -0,0 +1,43 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+import (
+ "runtime"
+
+ specs "github.com/opencontainers/image-spec/specs-go/v1"
+)
+
+// DefaultString returns the default string specifier for the platform.
+func DefaultString() string {
+ return Format(DefaultSpec())
+}
+
+// DefaultSpec returns the current platform's default platform specification.
+func DefaultSpec() specs.Platform {
+ return specs.Platform{
+ OS: runtime.GOOS,
+ Architecture: runtime.GOARCH,
+ // The Variant field will be empty if arch != ARM.
+ Variant: cpuVariant(),
+ }
+}
+
+// DefaultStrict returns strict form of Default.
+func DefaultStrict() MatchComparer {
+ return OnlyStrict(DefaultSpec())
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults_unix.go b/vendor/github.com/containerd/containerd/platforms/defaults_unix.go
new file mode 100644
index 00000000..e8a7d5ff
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/platforms/defaults_unix.go
@@ -0,0 +1,24 @@
+// +build !windows
+
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+// Default returns the default matcher for the platform.
+func Default() MatchComparer {
+ return Only(DefaultSpec())
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/defaults_windows.go b/vendor/github.com/containerd/containerd/platforms/defaults_windows.go
new file mode 100644
index 00000000..0c380e3b
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/platforms/defaults_windows.go
@@ -0,0 +1,81 @@
+// +build windows
+
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package platforms
+
+import (
+ "fmt"
+ "runtime"
+ "strconv"
+ "strings"
+
+ imagespec "github.com/opencontainers/image-spec/specs-go/v1"
+ specs "github.com/opencontainers/image-spec/specs-go/v1"
+ "golang.org/x/sys/windows"
+)
+
+type matchComparer struct {
+ defaults Matcher
+ osVersionPrefix string
+}
+
+// Match matches platform with the same windows major, minor
+// and build version.
+func (m matchComparer) Match(p imagespec.Platform) bool {
+ if m.defaults.Match(p) {
+ // TODO(windows): Figure out whether OSVersion is deprecated.
+ return strings.HasPrefix(p.OSVersion, m.osVersionPrefix)
+ }
+ return false
+}
+
+// Less sorts matched platforms in front of other platforms.
+// For matched platforms, it puts platforms with larger revision
+// number in front.
+func (m matchComparer) Less(p1, p2 imagespec.Platform) bool {
+ m1, m2 := m.Match(p1), m.Match(p2)
+ if m1 && m2 {
+ r1, r2 := revision(p1.OSVersion), revision(p2.OSVersion)
+ return r1 > r2
+ }
+ return m1 && !m2
+}
+
+func revision(v string) int {
+ parts := strings.Split(v, ".")
+ if len(parts) < 4 {
+ return 0
+ }
+ r, err := strconv.Atoi(parts[3])
+ if err != nil {
+ return 0
+ }
+ return r
+}
+
+// Default returns the current platform's default platform specification.
+func Default() MatchComparer {
+ major, minor, build := windows.RtlGetNtVersionNumbers()
+ return matchComparer{
+ defaults: Ordered(DefaultSpec(), specs.Platform{
+ OS: "linux",
+ Architecture: runtime.GOARCH,
+ }),
+ osVersionPrefix: fmt.Sprintf("%d.%d.%d", major, minor, build),
+ }
+}
diff --git a/vendor/github.com/containerd/containerd/platforms/platforms.go b/vendor/github.com/containerd/containerd/platforms/platforms.go
new file mode 100644
index 00000000..088bdea0
--- /dev/null
+++ b/vendor/github.com/containerd/containerd/platforms/platforms.go
@@ -0,0 +1,278 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+// Package platforms provides a toolkit for normalizing, matching and
+// specifying container platforms.
+//
+// Centered around OCI platform specifications, we define a string-based
+// specifier syntax that can be used for user input. With a specifier, users
+// only need to specify the parts of the platform that are relevant to their
+// context, providing an operating system or architecture or both.
+//
+// How do I use this package?
+//
+// The vast majority of use cases should simply use the match function with
+// user input. The first step is to parse a specifier into a matcher:
+//
+// m, err := Parse("linux")
+// if err != nil { ... }
+//
+// Once you have a matcher, use it to match against the platform declared by a
+// component, typically from an image or runtime. Since extracting an images
+// platform is a little more involved, we'll use an example against the
+// platform default:
+//
+// if ok := m.Match(Default()); !ok { /* doesn't match */ }
+//
+// This can be composed in loops for resolving runtimes or used as a filter for
+// fetch and select images.
+//
+// More details of the specifier syntax and platform spec follow.
+//
+// Declaring Platform Support
+//
+// Components that have strict platform requirements should use the OCI
+// platform specification to declare their support. Typically, this will be
+// images and runtimes that should make these declaring which platform they
+// support specifically. This looks roughly as follows:
+//
+// type Platform struct {
+// Architecture string
+// OS string
+// Variant string
+// }
+//
+// Most images and runtimes should at least set Architecture and OS, according
+// to their GOARCH and GOOS values, respectively (follow the OCI image
+// specification when in doubt). ARM should set variant under certain
+// discussions, which are outlined below.
+//
+// Platform Specifiers
+//
+// While the OCI platform specifications provide a tool for components to
+// specify structured information, user input typically doesn't need the full
+// context and much can be inferred. To solve this problem, we introduced
+// "specifiers". A specifier has the format
+// `||/[/]`. The user can provide either the
+// operating system or the architecture or both.
+//
+// An example of a common specifier is `linux/amd64`. If the host has a default
+// of runtime that matches this, the user can simply provide the component that
+// matters. For example, if a image provides amd64 and arm64 support, the
+// operating system, `linux` can be inferred, so they only have to provide
+// `arm64` or `amd64`. Similar behavior is implemented for operating systems,
+// where the architecture may be known but a runtime may support images from
+// different operating systems.
+//
+// Normalization
+//
+// Because not all users are familiar with the way the Go runtime represents
+// platforms, several normalizations have been provided to make this package
+// easier to user.
+//
+// The following are performed for architectures:
+//
+// Value Normalized
+// aarch64 arm64
+// armhf arm
+// armel arm/v6
+// i386 386
+// x86_64 amd64
+// x86-64 amd64
+//
+// We also normalize the operating system `macos` to `darwin`.
+//
+// ARM Support
+//
+// To qualify ARM architecture, the Variant field is used to qualify the arm
+// version. The most common arm version, v7, is represented without the variant
+// unless it is explicitly provided. This is treated as equivalent to armhf. A
+// previous architecture, armel, will be normalized to arm/v6.
+//
+// While these normalizations are provided, their support on arm platforms has
+// not yet been fully implemented and tested.
+package platforms
+
+import (
+ "regexp"
+ "runtime"
+ "strconv"
+ "strings"
+
+ "github.com/containerd/containerd/errdefs"
+ specs "github.com/opencontainers/image-spec/specs-go/v1"
+ "github.com/pkg/errors"
+)
+
+var (
+ specifierRe = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)
+)
+
+// Matcher matches platforms specifications, provided by an image or runtime.
+type Matcher interface {
+ Match(platform specs.Platform) bool
+}
+
+// NewMatcher returns a simple matcher based on the provided platform
+// specification. The returned matcher only looks for equality based on os,
+// architecture and variant.
+//
+// One may implement their own matcher if this doesn't provide the required
+// functionality.
+//
+// Applications should opt to use `Match` over directly parsing specifiers.
+func NewMatcher(platform specs.Platform) Matcher {
+ return &matcher{
+ Platform: Normalize(platform),
+ }
+}
+
+type matcher struct {
+ specs.Platform
+}
+
+func (m *matcher) Match(platform specs.Platform) bool {
+ normalized := Normalize(platform)
+ return m.OS == normalized.OS &&
+ m.Architecture == normalized.Architecture &&
+ m.Variant == normalized.Variant
+}
+
+func (m *matcher) String() string {
+ return Format(m.Platform)
+}
+
+// Parse parses the platform specifier syntax into a platform declaration.
+//
+// Platform specifiers are in the format `||/[/]`.
+// The minimum required information for a platform specifier is the operating
+// system or architecture. If there is only a single string (no slashes), the
+// value will be matched against the known set of operating systems, then fall
+// back to the known set of architectures. The missing component will be
+// inferred based on the local environment.
+func Parse(specifier string) (specs.Platform, error) {
+ if strings.Contains(specifier, "*") {
+ // TODO(stevvooe): need to work out exact wildcard handling
+ return specs.Platform{}, errors.Wrapf(errdefs.ErrInvalidArgument, "%q: wildcards not yet supported", specifier)
+ }
+
+ parts := strings.Split(specifier, "/")
+
+ for _, part := range parts {
+ if !specifierRe.MatchString(part) {
+ return specs.Platform{}, errors.Wrapf(errdefs.ErrInvalidArgument, "%q is an invalid component of %q: platform specifier component must match %q", part, specifier, specifierRe.String())
+ }
+ }
+
+ var p specs.Platform
+ switch len(parts) {
+ case 1:
+ // in this case, we will test that the value might be an OS, then look
+ // it up. If it is not known, we'll treat it as an architecture. Since
+ // we have very little information about the platform here, we are
+ // going to be a little more strict if we don't know about the argument
+ // value.
+ p.OS = normalizeOS(parts[0])
+ if isKnownOS(p.OS) {
+ // picks a default architecture
+ p.Architecture = runtime.GOARCH
+ if p.Architecture == "arm" && cpuVariant() != "v7" {
+ p.Variant = cpuVariant()
+ }
+
+ return p, nil
+ }
+
+ p.Architecture, p.Variant = normalizeArch(parts[0], "")
+ if p.Architecture == "arm" && p.Variant == "v7" {
+ p.Variant = ""
+ }
+ if isKnownArch(p.Architecture) {
+ p.OS = runtime.GOOS
+ return p, nil
+ }
+
+ return specs.Platform{}, errors.Wrapf(errdefs.ErrInvalidArgument, "%q: unknown operating system or architecture", specifier)
+ case 2:
+ // In this case, we treat as a regular os/arch pair. We don't care
+ // about whether or not we know of the platform.
+ p.OS = normalizeOS(parts[0])
+ p.Architecture, p.Variant = normalizeArch(parts[1], "")
+ if p.Architecture == "arm" && p.Variant == "v7" {
+ p.Variant = ""
+ }
+
+ return p, nil
+ case 3:
+ // we have a fully specified variant, this is rare
+ p.OS = normalizeOS(parts[0])
+ p.Architecture, p.Variant = normalizeArch(parts[1], parts[2])
+ if p.Architecture == "arm64" && p.Variant == "" {
+ p.Variant = "v8"
+ }
+
+ return p, nil
+ }
+
+ return specs.Platform{}, errors.Wrapf(errdefs.ErrInvalidArgument, "%q: cannot parse platform specifier", specifier)
+}
+
+// MustParse is like Parses but panics if the specifier cannot be parsed.
+// Simplifies initialization of global variables.
+func MustParse(specifier string) specs.Platform {
+ p, err := Parse(specifier)
+ if err != nil {
+ panic("platform: Parse(" + strconv.Quote(specifier) + "): " + err.Error())
+ }
+ return p
+}
+
+// Format returns a string specifier from the provided platform specification.
+func Format(platform specs.Platform) string {
+ if platform.OS == "" {
+ return "unknown"
+ }
+
+ return joinNotEmpty(platform.OS, platform.Architecture, platform.Variant)
+}
+
+func joinNotEmpty(s ...string) string {
+ var ss []string
+ for _, s := range s {
+ if s == "" {
+ continue
+ }
+
+ ss = append(ss, s)
+ }
+
+ return strings.Join(ss, "/")
+}
+
+// Normalize validates and translate the platform to the canonical value.
+//
+// For example, if "Aarch64" is encountered, we change it to "arm64" or if
+// "x86_64" is encountered, it becomes "amd64".
+func Normalize(platform specs.Platform) specs.Platform {
+ platform.OS = normalizeOS(platform.OS)
+ platform.Architecture, platform.Variant = normalizeArch(platform.Architecture, platform.Variant)
+
+ // these fields are deprecated, remove them
+ platform.OSFeatures = nil
+ platform.OSVersion = ""
+
+ return platform
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/.gitignore b/vendor/github.com/cucumber/gherkin-go/v11/.gitignore
new file mode 100644
index 00000000..8d5dc492
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/.gitignore
@@ -0,0 +1,15 @@
+.built
+.compared
+.deps
+.dist
+.dist-compressed
+.go-get
+.gofmt
+.linted
+.tested*
+acceptance/
+bin/
+dist/
+dist_compressed/
+*.bin
+*.iml
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/.rsync b/vendor/github.com/cucumber/gherkin-go/v11/.rsync
new file mode 100644
index 00000000..852478f6
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/.rsync
@@ -0,0 +1,7 @@
+../LICENSE LICENSE
+../../.templates/github/ .github/
+../../.templates/go/ .
+../testdata/ testdata/
+../gherkin.berp gherkin.berp
+../bin/ berp/
+../gherkin-languages.json gherkin-languages.json
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/.subrepo b/vendor/github.com/cucumber/gherkin-go/v11/.subrepo
new file mode 100644
index 00000000..ff24855f
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/.subrepo
@@ -0,0 +1 @@
+cucumber/gherkin-go
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/LICENSE b/vendor/github.com/cucumber/gherkin-go/v11/LICENSE
new file mode 100644
index 00000000..29e13610
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Cucumber Ltd, Gaspar Nagy, Björn Rasmusson, Peter Sergeant
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/Makefile b/vendor/github.com/cucumber/gherkin-go/v11/Makefile
new file mode 100644
index 00000000..bfadd905
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/Makefile
@@ -0,0 +1,108 @@
+include default.mk
+
+GHERKIN_DIALECTS := $(shell cat gherkin-languages.json | jq --compact-output --sort-keys . | base64 | tr -d '\n')
+GOX_LDFLAGS := "-X 'main.version=${NEW_VERSION}' -X 'main.gherkinDialects=${GHERKIN_DIALECTS}'"
+
+GOOD_FEATURE_FILES = $(shell find testdata/good -name "*.feature")
+BAD_FEATURE_FILES = $(shell find testdata/bad -name "*.feature")
+
+TOKENS_GOLDEN = $(patsubst testdata/%.feature,testdata/%.feature.tokens,$(GOOD_FEATURE_FILES))
+ASTS_GOLDEN = $(patsubst testdata/%.feature,testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES))
+PICKLES_GOLDEN = $(patsubst testdata/%.feature,testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES))
+SOURCES_GOLDEN = $(patsubst testdata/%.feature,testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES))
+ERRORS_GOLDEN = $(patsubst testdata/%.feature,testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES))
+
+TOKENS = $(patsubst testdata/%.feature,acceptance/testdata/%.feature.tokens,$(GOOD_FEATURE_FILES))
+ASTS = $(patsubst testdata/%.feature,acceptance/testdata/%.feature.ast.ndjson,$(GOOD_FEATURE_FILES))
+PICKLES = $(patsubst testdata/%.feature,acceptance/testdata/%.feature.pickles.ndjson,$(GOOD_FEATURE_FILES))
+SOURCES = $(patsubst testdata/%.feature,acceptance/testdata/%.feature.source.ndjson,$(GOOD_FEATURE_FILES))
+ERRORS = $(patsubst testdata/%.feature,acceptance/testdata/%.feature.errors.ndjson,$(BAD_FEATURE_FILES))
+
+.DELETE_ON_ERROR:
+
+default: .compared
+
+.compared: bin/gherkin-generate-tokens $(EXE) $(TOKENS) $(ASTS) $(PICKLES) $(SOURCES) $(ERRORS)
+ touch $@
+
+.tested: parser.go dialects_builtin.go
+
+# The golden target regenerates the golden master
+golden: bin/gherkin-generate-tokens $(EXE) $(TOKENS_GOLDEN) $(ASTS_GOLDEN) $(PICKLES_GOLDEN) $(SOURCES_GOLDEN) $(ERRORS_GOLDEN)
+
+bin/gherkin-generate-tokens: .deps $(GO_SOURCE_FILES) parser.go dialects_builtin.go
+ go build -o $@ ./gherkin-generate-tokens
+
+$(EXE): parser.go dialects_builtin.go
+
+testdata/%.feature.tokens: testdata/%.feature
+ifdef GOLDEN
+ mkdir -p `dirname $@`
+ bin/gherkin-generate-tokens $< > $@
+endif
+
+acceptance/testdata/%.feature.tokens: testdata/%.feature testdata/%.feature.tokens bin/gherkin-generate-tokens
+ mkdir -p `dirname $@`
+ bin/gherkin-generate-tokens $< > $@
+ diff --unified $<.tokens $@
+
+testdata/%.feature.ast.ndjson: testdata/%.feature $(EXE)
+ifdef GOLDEN
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-source --no-pickles $< | jq --sort-keys -f remove_empty.jq > $@
+endif
+
+acceptance/testdata/%.feature.ast.ndjson: testdata/%.feature testdata/%.feature.ast.ndjson $(EXE)
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-source --no-pickles $< | jq --sort-keys --compact-output -f remove_empty.jq > $@
+ -diff --unified <(jq "." $<.ast.ndjson) <(jq "." $@)
+
+testdata/%.feature.errors.ndjson: testdata/%.feature $(EXE)
+ifdef GOLDEN
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-source $< | jq --sort-keys -f remove_empty.jq > $@
+endif
+
+acceptance/testdata/%.feature.errors.ndjson: testdata/%.feature testdata/%.feature.errors.ndjson $(EXE)
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-source $< | jq --sort-keys --compact-output -f remove_empty.jq > $@
+ diff --unified <(jq "." $<.errors.ndjson) <(jq "." $@)
+
+testdata/%.feature.source.ndjson: testdata/%.feature $(EXE)
+ifdef GOLDEN
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-ast --no-pickles $< | jq --sort-keys -f remove_empty.jq > $@
+endif
+
+acceptance/testdata/%.feature.source.ndjson: testdata/%.feature testdata/%.feature.source.ndjson $(EXE)
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-ast --no-pickles $< | jq --sort-keys --compact-output -f remove_empty.jq > $@
+ diff --unified <(jq "." $<.source.ndjson) <(jq "." $@)
+
+testdata/%.feature.pickles.ndjson: testdata/%.feature $(EXE)
+ifdef GOLDEN
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-source --no-ast $< | jq --sort-keys -f remove_empty.jq > $@
+endif
+
+acceptance/testdata/%.feature.pickles.ndjson: testdata/%.feature testdata/%.feature.pickles.ndjson $(EXE)
+ mkdir -p `dirname $@`
+ $(EXE) --predictable-ids --format ndjson --no-source --no-ast $< | jq --sort-keys --compact-output -f remove_empty.jq > $@
+ diff --unified <(jq "." $<.pickles.ndjson) <(jq "." $@)
+
+parser.go: gherkin.berp parser.go.razor berp/berp.exe
+ # We're allowing mono to fail. The monorepo build runs in a docker image which
+ # doesn't have mono installed. This looks like it will be fixed post Alpine 3.9:
+ # https://pkgs.alpinelinux.org/packages?name=mono&branch=edge
+ -mono berp/berp.exe -g gherkin.berp -t parser.go.razor -o $@
+ # Remove BOM
+ awk 'NR==1{sub(/^\xef\xbb\xbf/,"")}{print}' < $@ > $@.nobom
+ mv $@.nobom $@
+ gofmt -w $@
+
+dialects_builtin.go: gherkin-languages.json dialects_builtin.go.jq
+ cat $< | jq --sort-keys --from-file dialects_builtin.go.jq --raw-output --compact-output > $@
+ gofmt -w $@
+
+clean:
+ rm -rf .compared bin/
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/README.md b/vendor/github.com/cucumber/gherkin-go/v11/README.md
new file mode 100644
index 00000000..5f035c27
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/README.md
@@ -0,0 +1,36 @@
+[![Build Status](https://secure.travis-ci.org/cucumber/gherkin-go.svg)](http://travis-ci.org/cucumber/gherkin-go) [![GoDoc](https://godoc.org/github.com/cucumber/gherkin-go?status.svg)](http://godoc.org/github.com/cucumber/gherkin-go) [![Go Report Card](https://goreportcard.com/badge/github.com/cucumber/gherkin-go)](https://goreportcard.com/report/github.com/cucumber/gherkin-go)
+
+Gherkin parser/compiler for Go. Please see [Gherkin](https://github.com/cucumber/gherkin) for details.
+
+## Building
+
+You need Go installed (obviously). You also need to make sure your `PATH`
+points to where Go installs packages:
+
+```bash
+# Add go bin to path
+export PATH=$(go env GOPATH)/bin:${PATH}
+```
+
+Now build it:
+
+```
+make .dist
+```
+
+You should have cross-compiled binaries in `./dist/`.
+
+## Compress binaries
+
+You need [upx](https://upx.github.io/) installed.
+
+```
+make .dist
+make .dist-compressed
+```
+
+Your `./dist_compressed/` directory should now have compressed binaries.
+Compression fails for some binaries, so you likely won't have a full set.
+
+The build copies the successfully compressed binaries back to `./dist/`.
+
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/astbuilder.go b/vendor/github.com/cucumber/gherkin-go/v11/astbuilder.go
new file mode 100644
index 00000000..26a4d243
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/astbuilder.go
@@ -0,0 +1,450 @@
+package gherkin
+
+import (
+ "github.com/cucumber/messages-go/v10"
+ "strings"
+)
+
+type AstBuilder interface {
+ Builder
+ GetGherkinDocument() *messages.GherkinDocument
+}
+
+type astBuilder struct {
+ stack []*astNode
+ comments []*messages.GherkinDocument_Comment
+ newId func() string
+}
+
+func (t *astBuilder) Reset() {
+ t.comments = []*messages.GherkinDocument_Comment{}
+ t.stack = []*astNode{}
+ t.push(newAstNode(RuleTypeNone))
+}
+
+func (t *astBuilder) GetGherkinDocument() *messages.GherkinDocument {
+ res := t.currentNode().getSingle(RuleTypeGherkinDocument)
+ if val, ok := res.(*messages.GherkinDocument); ok {
+ return val
+ }
+ return nil
+}
+
+type astNode struct {
+ ruleType RuleType
+ subNodes map[RuleType][]interface{}
+}
+
+func (a *astNode) add(rt RuleType, obj interface{}) {
+ a.subNodes[rt] = append(a.subNodes[rt], obj)
+}
+
+func (a *astNode) getSingle(rt RuleType) interface{} {
+ if val, ok := a.subNodes[rt]; ok {
+ for i := range val {
+ return val[i]
+ }
+ }
+ return nil
+}
+
+func (a *astNode) getItems(rt RuleType) []interface{} {
+ var res []interface{}
+ if val, ok := a.subNodes[rt]; ok {
+ for i := range val {
+ res = append(res, val[i])
+ }
+ }
+ return res
+}
+
+func (a *astNode) getToken(tt TokenType) *Token {
+ if val, ok := a.getSingle(tt.RuleType()).(*Token); ok {
+ return val
+ }
+ return nil
+}
+
+func (a *astNode) getTokens(tt TokenType) []*Token {
+ var items = a.getItems(tt.RuleType())
+ var tokens []*Token
+ for i := range items {
+ if val, ok := items[i].(*Token); ok {
+ tokens = append(tokens, val)
+ }
+ }
+ return tokens
+}
+
+func (t *astBuilder) currentNode() *astNode {
+ if len(t.stack) > 0 {
+ return t.stack[len(t.stack)-1]
+ }
+ return nil
+}
+
+func newAstNode(rt RuleType) *astNode {
+ return &astNode{
+ ruleType: rt,
+ subNodes: make(map[RuleType][]interface{}),
+ }
+}
+
+func NewAstBuilder(newId func() string) AstBuilder {
+ builder := new(astBuilder)
+ builder.newId = newId
+ builder.comments = []*messages.GherkinDocument_Comment{}
+ builder.push(newAstNode(RuleTypeNone))
+ return builder
+}
+
+func (t *astBuilder) push(n *astNode) {
+ t.stack = append(t.stack, n)
+}
+
+func (t *astBuilder) pop() *astNode {
+ x := t.stack[len(t.stack)-1]
+ t.stack = t.stack[:len(t.stack)-1]
+ return x
+}
+
+func (t *astBuilder) Build(tok *Token) (bool, error) {
+ if tok.Type == TokenTypeComment {
+ comment := &messages.GherkinDocument_Comment{
+ Location: astLocation(tok),
+ Text: tok.Text,
+ }
+ t.comments = append(t.comments, comment)
+ } else {
+ t.currentNode().add(tok.Type.RuleType(), tok)
+ }
+ return true, nil
+}
+
+func (t *astBuilder) StartRule(r RuleType) (bool, error) {
+ t.push(newAstNode(r))
+ return true, nil
+}
+
+func (t *astBuilder) EndRule(r RuleType) (bool, error) {
+ node := t.pop()
+ transformedNode, err := t.transformNode(node)
+ t.currentNode().add(node.ruleType, transformedNode)
+ return true, err
+}
+
+func (t *astBuilder) transformNode(node *astNode) (interface{}, error) {
+ switch node.ruleType {
+
+ case RuleTypeStep:
+ stepLine := node.getToken(TokenTypeStepLine)
+
+ step := &messages.GherkinDocument_Feature_Step{
+ Location: astLocation(stepLine),
+ Keyword: stepLine.Keyword,
+ Text: stepLine.Text,
+ Id: t.newId(),
+ }
+ dataTable := node.getSingle(RuleTypeDataTable)
+ if dataTable != nil {
+ step.Argument = &messages.GherkinDocument_Feature_Step_DataTable_{
+ DataTable: dataTable.(*messages.GherkinDocument_Feature_Step_DataTable),
+ }
+ } else {
+ docString := node.getSingle(RuleTypeDocString)
+ if docString != nil {
+ step.Argument = &messages.GherkinDocument_Feature_Step_DocString_{DocString: docString.(*messages.GherkinDocument_Feature_Step_DocString)}
+ }
+ }
+
+ return step, nil
+
+ case RuleTypeDocString:
+ separatorToken := node.getToken(TokenTypeDocStringSeparator)
+ lineTokens := node.getTokens(TokenTypeOther)
+ var text string
+ for i := range lineTokens {
+ if i > 0 {
+ text += "\n"
+ }
+ text += lineTokens[i].Text
+ }
+ ds := &messages.GherkinDocument_Feature_Step_DocString{
+ Location: astLocation(separatorToken),
+ MediaType: separatorToken.Text,
+ Content: text,
+ Delimiter: separatorToken.Keyword,
+ }
+ return ds, nil
+
+ case RuleTypeDataTable:
+ rows, err := astTableRows(node, t.newId)
+ dt := &messages.GherkinDocument_Feature_Step_DataTable{
+ Location: rows[0].Location,
+ Rows: rows,
+ }
+ return dt, err
+
+ case RuleTypeBackground:
+ backgroundLine := node.getToken(TokenTypeBackgroundLine)
+ description, _ := node.getSingle(RuleTypeDescription).(string)
+ bg := &messages.GherkinDocument_Feature_Background{
+ Location: astLocation(backgroundLine),
+ Keyword: backgroundLine.Keyword,
+ Name: backgroundLine.Text,
+ Description: description,
+ Steps: astSteps(node),
+ }
+ return bg, nil
+
+ case RuleTypeScenarioDefinition:
+ tags := astTags(node, t.newId)
+ scenarioNode, _ := node.getSingle(RuleTypeScenario).(*astNode)
+
+ scenarioLine := scenarioNode.getToken(TokenTypeScenarioLine)
+ description, _ := scenarioNode.getSingle(RuleTypeDescription).(string)
+ sc := &messages.GherkinDocument_Feature_Scenario{
+ Id: t.newId(),
+ Tags: tags,
+ Location: astLocation(scenarioLine),
+ Keyword: scenarioLine.Keyword,
+ Name: scenarioLine.Text,
+ Description: description,
+ Steps: astSteps(scenarioNode),
+ Examples: astExamples(scenarioNode),
+ }
+
+ return sc, nil
+
+ case RuleTypeExamplesDefinition:
+ tags := astTags(node, t.newId)
+ examplesNode, _ := node.getSingle(RuleTypeExamples).(*astNode)
+ examplesLine := examplesNode.getToken(TokenTypeExamplesLine)
+ description, _ := examplesNode.getSingle(RuleTypeDescription).(string)
+ examplesTable := examplesNode.getSingle(RuleTypeExamplesTable)
+
+ // TODO: Is this mutation style ok?
+ ex := &messages.GherkinDocument_Feature_Scenario_Examples{}
+ ex.Tags = tags
+ ex.Location = astLocation(examplesLine)
+ ex.Keyword = examplesLine.Keyword
+ ex.Name = examplesLine.Text
+ ex.Description = description
+ ex.TableHeader = nil
+ ex.TableBody = nil
+ if examplesTable != nil {
+ allRows, _ := examplesTable.([]*messages.GherkinDocument_Feature_TableRow)
+ ex.TableHeader = allRows[0]
+ ex.TableBody = allRows[1:]
+ }
+ return ex, nil
+
+ case RuleTypeExamplesTable:
+ allRows, err := astTableRows(node, t.newId)
+ return allRows, err
+
+ case RuleTypeDescription:
+ lineTokens := node.getTokens(TokenTypeOther)
+ // Trim trailing empty lines
+ end := len(lineTokens)
+ for end > 0 && strings.TrimSpace(lineTokens[end-1].Text) == "" {
+ end--
+ }
+ var desc []string
+ for i := range lineTokens[0:end] {
+ desc = append(desc, lineTokens[i].Text)
+ }
+ return strings.Join(desc, "\n"), nil
+
+ case RuleTypeFeature:
+ header, ok := node.getSingle(RuleTypeFeatureHeader).(*astNode)
+ if !ok {
+ return nil, nil
+ }
+ tags := astTags(header, t.newId)
+ featureLine := header.getToken(TokenTypeFeatureLine)
+ if featureLine == nil {
+ return nil, nil
+ }
+
+ var children []*messages.GherkinDocument_Feature_FeatureChild
+ background, _ := node.getSingle(RuleTypeBackground).(*messages.GherkinDocument_Feature_Background)
+ if background != nil {
+ children = append(children, &messages.GherkinDocument_Feature_FeatureChild{
+ Value: &messages.GherkinDocument_Feature_FeatureChild_Background{Background: background},
+ })
+ }
+ scenarios := node.getItems(RuleTypeScenarioDefinition)
+ for i := range scenarios {
+ scenario := scenarios[i].(*messages.GherkinDocument_Feature_Scenario)
+ children = append(children, &messages.GherkinDocument_Feature_FeatureChild{
+ Value: &messages.GherkinDocument_Feature_FeatureChild_Scenario{Scenario: scenario},
+ })
+ }
+ rules := node.getItems(RuleTypeRule)
+ for i := range rules {
+ rule := rules[i].(*messages.GherkinDocument_Feature_FeatureChild_Rule)
+ children = append(children, &messages.GherkinDocument_Feature_FeatureChild{
+ Value: &messages.GherkinDocument_Feature_FeatureChild_Rule_{
+ Rule: rule,
+ },
+ })
+ }
+
+ description, _ := header.getSingle(RuleTypeDescription).(string)
+
+ feat := &messages.GherkinDocument_Feature{}
+ feat.Tags = tags
+ feat.Location = astLocation(featureLine)
+ feat.Language = featureLine.GherkinDialect
+ feat.Keyword = featureLine.Keyword
+ feat.Name = featureLine.Text
+ feat.Description = description
+ feat.Children = children
+ return feat, nil
+
+ case RuleTypeRule:
+ header, ok := node.getSingle(RuleTypeRuleHeader).(*astNode)
+ if !ok {
+ return nil, nil
+ }
+ ruleLine := header.getToken(TokenTypeRuleLine)
+ if ruleLine == nil {
+ return nil, nil
+ }
+
+ var children []*messages.GherkinDocument_Feature_FeatureChild_RuleChild
+ background, _ := node.getSingle(RuleTypeBackground).(*messages.GherkinDocument_Feature_Background)
+
+ if background != nil {
+ children = append(children, &messages.GherkinDocument_Feature_FeatureChild_RuleChild{
+ Value: &messages.GherkinDocument_Feature_FeatureChild_RuleChild_Background{Background: background},
+ })
+ }
+ scenarios := node.getItems(RuleTypeScenarioDefinition)
+ for i := range scenarios {
+ scenario := scenarios[i].(*messages.GherkinDocument_Feature_Scenario)
+ children = append(children, &messages.GherkinDocument_Feature_FeatureChild_RuleChild{
+ Value: &messages.GherkinDocument_Feature_FeatureChild_RuleChild_Scenario{Scenario: scenario},
+ })
+ }
+
+ description, _ := header.getSingle(RuleTypeDescription).(string)
+
+ rule := &messages.GherkinDocument_Feature_FeatureChild_Rule{}
+ rule.Location = astLocation(ruleLine)
+ rule.Keyword = ruleLine.Keyword
+ rule.Name = ruleLine.Text
+ rule.Description = description
+ rule.Children = children
+ return rule, nil
+
+ case RuleTypeGherkinDocument:
+ feature, _ := node.getSingle(RuleTypeFeature).(*messages.GherkinDocument_Feature)
+
+ doc := &messages.GherkinDocument{}
+ if feature != nil {
+ doc.Feature = feature
+ }
+ doc.Comments = t.comments
+ return doc, nil
+ }
+ return node, nil
+}
+
+func astLocation(t *Token) *messages.Location {
+ return &messages.Location{
+ Line: uint32(t.Location.Line),
+ Column: uint32(t.Location.Column),
+ }
+}
+
+func astTableRows(t *astNode, newId func() string) (rows []*messages.GherkinDocument_Feature_TableRow, err error) {
+ rows = []*messages.GherkinDocument_Feature_TableRow{}
+ tokens := t.getTokens(TokenTypeTableRow)
+ for i := range tokens {
+ row := &messages.GherkinDocument_Feature_TableRow{
+ Id: newId(),
+ Location: astLocation(tokens[i]),
+ Cells: astTableCells(tokens[i]),
+ }
+ rows = append(rows, row)
+ }
+ err = ensureCellCount(rows)
+ return
+}
+
+func ensureCellCount(rows []*messages.GherkinDocument_Feature_TableRow) error {
+ if len(rows) <= 1 {
+ return nil
+ }
+ cellCount := len(rows[0].Cells)
+ for i := range rows {
+ if cellCount != len(rows[i].Cells) {
+ return &parseError{"inconsistent cell count within the table", &Location{
+ Line: int(rows[i].Location.Line),
+ Column: int(rows[i].Location.Column),
+ }}
+ }
+ }
+ return nil
+}
+
+func astTableCells(t *Token) (cells []*messages.GherkinDocument_Feature_TableRow_TableCell) {
+ cells = []*messages.GherkinDocument_Feature_TableRow_TableCell{}
+ for i := range t.Items {
+ item := t.Items[i]
+ cell := &messages.GherkinDocument_Feature_TableRow_TableCell{}
+ cell.Location = &messages.Location{
+ Line: uint32(t.Location.Line),
+ Column: uint32(item.Column),
+ }
+ cell.Value = item.Text
+ cells = append(cells, cell)
+ }
+ return
+}
+
+func astSteps(t *astNode) (steps []*messages.GherkinDocument_Feature_Step) {
+ steps = []*messages.GherkinDocument_Feature_Step{}
+ tokens := t.getItems(RuleTypeStep)
+ for i := range tokens {
+ step, _ := tokens[i].(*messages.GherkinDocument_Feature_Step)
+ steps = append(steps, step)
+ }
+ return
+}
+
+func astExamples(t *astNode) (examples []*messages.GherkinDocument_Feature_Scenario_Examples) {
+ examples = []*messages.GherkinDocument_Feature_Scenario_Examples{}
+ tokens := t.getItems(RuleTypeExamplesDefinition)
+ for i := range tokens {
+ example, _ := tokens[i].(*messages.GherkinDocument_Feature_Scenario_Examples)
+ examples = append(examples, example)
+ }
+ return
+}
+
+func astTags(node *astNode, newId func() string) (tags []*messages.GherkinDocument_Feature_Tag) {
+ tags = []*messages.GherkinDocument_Feature_Tag{}
+ tagsNode, ok := node.getSingle(RuleTypeTags).(*astNode)
+ if !ok {
+ return
+ }
+ tokens := tagsNode.getTokens(TokenTypeTagLine)
+ for i := range tokens {
+ token := tokens[i]
+ for k := range token.Items {
+ item := token.Items[k]
+ tag := &messages.GherkinDocument_Feature_Tag{}
+ tag.Location = &messages.Location{
+ Line: uint32(token.Location.Line),
+ Column: uint32(item.Column),
+ }
+ tag.Name = item.Text
+ tag.Id = newId()
+ tags = append(tags, tag)
+ }
+ }
+ return
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/default.mk b/vendor/github.com/cucumber/gherkin-go/v11/default.mk
new file mode 100644
index 00000000..7383846d
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/default.mk
@@ -0,0 +1,123 @@
+SHELL := /usr/bin/env bash
+GOPATH := $(shell go env GOPATH)
+PATH := $(PATH):$(GOPATH)/bin
+GO_SOURCE_FILES := $(shell find . -name "*.go" | sort)
+LIBNAME := $(shell basename $$(dirname $$(pwd)))
+EXE_BASE_NAME := cucumber-$(LIBNAME)
+GOX_LDFLAGS := "-X main.version=${NEW_VERSION}"
+EXES := $(shell find dist -name '$(EXE_BASE_NAME)-*')
+UPX_EXES = $(patsubst dist/$(EXE_BASE_NAME)-%,dist_compressed/$(EXE_BASE_NAME)-%,$(EXES))
+# Determine if we're on linux or osx (ignoring other OSes as we're not building on them)
+OS := $(shell [[ "$$(uname)" == "Darwin" ]] && echo "darwin" || echo "linux")
+# Determine if we're on 386 or amd64 (ignoring other processors as we're not building on them)
+ARCH := $(shell [[ "$$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "386")
+EXE = dist/$(EXE_BASE_NAME)-$(OS)-$(ARCH)
+REPLACEMENTS := $(shell sed -n "/^\s*github.com\/cucumber/p" go.mod | perl -wpe 's/\s*(github.com\/cucumber\/(.*)-go\/v\d+).*/q{replace } . $$1 . q{ => ..\/..\/} . $$2 . q{\/go}/eg')
+CURRENT_MAJOR := $(shell sed -n "/^module/p" go.mod | awk '{ print $$0 "/v1" }' | cut -d'/' -f4 | cut -d'v' -f2)
+NEW_MAJOR := $(shell echo ${NEW_VERSION} | awk -F'.' '{print $$1}')
+
+default: .linted .tested
+.PHONY: default
+
+# Run the .dist target if there is a main file
+ifneq (,$(wildcard ./cmd/main.go))
+default: dist
+endif
+
+.deps:
+ touch $@
+
+dist: $(EXE)
+ifndef NO_UPX_COMPRESSION
+ make .dist-compressed
+endif
+ touch $@
+
+$(EXE): .deps $(GO_SOURCE_FILES)
+ mkdir -p dist
+ifndef NO_CROSS_COMPILE
+ # Cross-compile executable for many platforms
+ go get github.com/aslakhellesoy/gox
+ gox -buildmode=exe -ldflags $(GOX_LDFLAGS) -output "dist/$(EXE_BASE_NAME)-{{.OS}}-{{.Arch}}" -rebuild ./cmd
+else
+ # Compile executable for the local platform only
+ go build -ldflags $(GOX_LDFLAGS) -o $@ ./cmd
+endif
+
+.dist-compressed: $(UPX_EXES)
+ touch $@
+
+update-dependencies:
+ go get -u && go mod tidy
+.PHONY: update-dependencies
+
+pre-release: remove-replaces update-version update-dependencies clean default
+.PHONY: pre-release
+
+update-version: update-major
+ # no-op
+.PHONY: update-version
+
+ifneq (,$(wildcard ./cmd/main.go))
+publish: dist
+ifdef NEW_VERSION
+ ./scripts/github-release $(NEW_VERSION)
+else
+ @echo -e "\033[0;31mNEW_VERSION is not defined. Can't publish :-(\033[0m"
+ exit 1
+endif
+else
+publish:
+ # no-op
+endif
+.PHONY: publish
+
+dist_compressed/$(EXE_BASE_NAME)-%: dist/$(EXE_BASE_NAME)-%
+ mkdir -p dist_compressed
+ # requires upx in PATH to compress supported binaries
+ # may produce an error ARCH not supported
+ -upx $< -o $@
+
+ # Test the integrity
+ if [ -f "$@" ]; then upx -t $@ && cp $@ $< || rm $@; fi
+
+.linted: $(GO_SOURCE_FILES)
+ gofmt -w $^
+ touch $@
+
+.tested: .deps $(GO_SOURCE_FILES)
+ go test ./...
+ touch $@
+
+post-release: add-replaces
+.PHONY: post-release
+
+clean: clean-go
+.PHONY: clean
+
+clean-go:
+ rm -rf .deps .tested* .linted dist/ .dist-compressed dist_compressed/ acceptance/
+.PHONY: clean-go
+
+remove-replaces:
+ sed -i '/^replace/d' go.mod
+ sed -i 'N;/^\n$$/D;P;D;' go.mod
+.PHONY: remove-replaces
+
+add-replaces:
+ifeq ($(shell sed -n "/^\s*github.com\/cucumber/p" go.mod | wc -l), 0)
+ # No replacements here
+else
+ sed -i '/^go .*/i $(REPLACEMENTS)\n' go.mod
+endif
+.PHONY: add-replaces
+
+update-major:
+ifeq ($(CURRENT_MAJOR), $(NEW_MAJOR))
+ # echo "No major version change"
+else
+ echo "Updating major from $(CURRENT_MAJOR) to $(NEW_MAJOR)"
+ sed -Ei "s/$(LIBNAME)-go(\/v$(CURRENT_MAJOR))?/$(LIBNAME)-go\/v$(NEW_MAJOR)/" go.mod
+ sed -Ei "s/$(LIBNAME)-go(\/v$(CURRENT_MAJOR))?/$(LIBNAME)-go\/v$(NEW_MAJOR)/" $(shell find . -name "*.go")
+endif
+.PHONY: update-major
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/dialect.go b/vendor/github.com/cucumber/gherkin-go/v11/dialect.go
new file mode 100644
index 00000000..0fd781af
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/dialect.go
@@ -0,0 +1,51 @@
+package gherkin
+
+type GherkinDialect struct {
+ Language string
+ Name string
+ Native string
+ Keywords map[string][]string
+}
+
+func (g *GherkinDialect) FeatureKeywords() []string {
+ return g.Keywords["feature"]
+}
+
+func (g *GherkinDialect) RuleKeywords() []string {
+ return g.Keywords["rule"]
+}
+
+func (g *GherkinDialect) ScenarioKeywords() []string {
+ return g.Keywords["scenario"]
+}
+
+func (g *GherkinDialect) StepKeywords() []string {
+ result := g.Keywords["given"]
+ result = append(result, g.Keywords["when"]...)
+ result = append(result, g.Keywords["then"]...)
+ result = append(result, g.Keywords["and"]...)
+ result = append(result, g.Keywords["but"]...)
+ return result
+}
+
+func (g *GherkinDialect) BackgroundKeywords() []string {
+ return g.Keywords["background"]
+}
+
+func (g *GherkinDialect) ScenarioOutlineKeywords() []string {
+ return g.Keywords["scenarioOutline"]
+}
+
+func (g *GherkinDialect) ExamplesKeywords() []string {
+ return g.Keywords["examples"]
+}
+
+type GherkinDialectProvider interface {
+ GetDialect(language string) *GherkinDialect
+}
+
+type gherkinDialectMap map[string]*GherkinDialect
+
+func (g gherkinDialectMap) GetDialect(language string) *GherkinDialect {
+ return g[language]
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/dialects_builtin.go b/vendor/github.com/cucumber/gherkin-go/v11/dialects_builtin.go
new file mode 100644
index 00000000..b534f959
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/dialects_builtin.go
@@ -0,0 +1,3646 @@
+package gherkin
+
+// Builtin dialects for af (Afrikaans), am (Armenian), an (Aragonese), ar (Arabic), ast (Asturian), az (Azerbaijani), bg (Bulgarian), bm (Malay), bs (Bosnian), ca (Catalan), cs (Czech), cy-GB (Welsh), da (Danish), de (German), el (Greek), em (Emoji), en (English), en-Scouse (Scouse), en-au (Australian), en-lol (LOLCAT), en-old (Old English), en-pirate (Pirate), eo (Esperanto), es (Spanish), et (Estonian), fa (Persian), fi (Finnish), fr (French), ga (Irish), gj (Gujarati), gl (Galician), he (Hebrew), hi (Hindi), hr (Croatian), ht (Creole), hu (Hungarian), id (Indonesian), is (Icelandic), it (Italian), ja (Japanese), jv (Javanese), ka (Georgian), kn (Kannada), ko (Korean), lt (Lithuanian), lu (Luxemburgish), lv (Latvian), mk-Cyrl (Macedonian), mk-Latn (Macedonian (Latin)), mn (Mongolian), ne (Nepali), nl (Dutch), no (Norwegian), pa (Panjabi), pl (Polish), pt (Portuguese), ro (Romanian), ru (Russian), sk (Slovak), sl (Slovenian), sr-Cyrl (Serbian), sr-Latn (Serbian (Latin)), sv (Swedish), ta (Tamil), th (Thai), tl (Telugu), tlh (Klingon), tr (Turkish), tt (Tatar), uk (Ukrainian), ur (Urdu), uz (Uzbek), vi (Vietnamese), zh-CN (Chinese simplified), zh-TW (Chinese traditional), mr (Marathi)
+func GherkinDialectsBuildin() GherkinDialectProvider {
+ return buildinDialects
+}
+
+const (
+ feature = "feature"
+ rule = "rule"
+ background = "background"
+ scenario = "scenario"
+ scenarioOutline = "scenarioOutline"
+ examples = "examples"
+ given = "given"
+ when = "when"
+ then = "then"
+ and = "and"
+ but = "but"
+)
+
+var buildinDialects = gherkinDialectMap{
+ "af": &GherkinDialect{
+ "af", "Afrikaans", "Afrikaans", map[string][]string{
+ feature: []string{
+ "Funksie",
+ "Besigheid Behoefte",
+ "Vermoë",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Agtergrond",
+ },
+ scenario: []string{
+ "Voorbeeld",
+ "Situasie",
+ },
+ scenarioOutline: []string{
+ "Situasie Uiteensetting",
+ },
+ examples: []string{
+ "Voorbeelde",
+ },
+ given: []string{
+ "* ",
+ "Gegewe ",
+ },
+ when: []string{
+ "* ",
+ "Wanneer ",
+ },
+ then: []string{
+ "* ",
+ "Dan ",
+ },
+ and: []string{
+ "* ",
+ "En ",
+ },
+ but: []string{
+ "* ",
+ "Maar ",
+ },
+ },
+ },
+ "am": &GherkinDialect{
+ "am", "Armenian", "հայերեն", map[string][]string{
+ feature: []string{
+ "Ֆունկցիոնալություն",
+ "Հատկություն",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Կոնտեքստ",
+ },
+ scenario: []string{
+ "Օրինակ",
+ "Սցենար",
+ },
+ scenarioOutline: []string{
+ "Սցենարի կառուցվացքը",
+ },
+ examples: []string{
+ "Օրինակներ",
+ },
+ given: []string{
+ "* ",
+ "Դիցուք ",
+ },
+ when: []string{
+ "* ",
+ "Եթե ",
+ "Երբ ",
+ },
+ then: []string{
+ "* ",
+ "Ապա ",
+ },
+ and: []string{
+ "* ",
+ "Եվ ",
+ },
+ but: []string{
+ "* ",
+ "Բայց ",
+ },
+ },
+ },
+ "an": &GherkinDialect{
+ "an", "Aragonese", "Aragonés", map[string][]string{
+ feature: []string{
+ "Caracteristica",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Antecedents",
+ },
+ scenario: []string{
+ "Eixemplo",
+ "Caso",
+ },
+ scenarioOutline: []string{
+ "Esquema del caso",
+ },
+ examples: []string{
+ "Eixemplos",
+ },
+ given: []string{
+ "* ",
+ "Dau ",
+ "Dada ",
+ "Daus ",
+ "Dadas ",
+ },
+ when: []string{
+ "* ",
+ "Cuan ",
+ },
+ then: []string{
+ "* ",
+ "Alavez ",
+ "Allora ",
+ "Antonces ",
+ },
+ and: []string{
+ "* ",
+ "Y ",
+ "E ",
+ },
+ but: []string{
+ "* ",
+ "Pero ",
+ },
+ },
+ },
+ "ar": &GherkinDialect{
+ "ar", "Arabic", "العربية", map[string][]string{
+ feature: []string{
+ "خاصية",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "الخلفية",
+ },
+ scenario: []string{
+ "مثال",
+ "سيناريو",
+ },
+ scenarioOutline: []string{
+ "سيناريو مخطط",
+ },
+ examples: []string{
+ "امثلة",
+ },
+ given: []string{
+ "* ",
+ "بفرض ",
+ },
+ when: []string{
+ "* ",
+ "متى ",
+ "عندما ",
+ },
+ then: []string{
+ "* ",
+ "اذاً ",
+ "ثم ",
+ },
+ and: []string{
+ "* ",
+ "و ",
+ },
+ but: []string{
+ "* ",
+ "لكن ",
+ },
+ },
+ },
+ "ast": &GherkinDialect{
+ "ast", "Asturian", "asturianu", map[string][]string{
+ feature: []string{
+ "Carauterística",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Antecedentes",
+ },
+ scenario: []string{
+ "Exemplo",
+ "Casu",
+ },
+ scenarioOutline: []string{
+ "Esbozu del casu",
+ },
+ examples: []string{
+ "Exemplos",
+ },
+ given: []string{
+ "* ",
+ "Dáu ",
+ "Dada ",
+ "Daos ",
+ "Daes ",
+ },
+ when: []string{
+ "* ",
+ "Cuando ",
+ },
+ then: []string{
+ "* ",
+ "Entós ",
+ },
+ and: []string{
+ "* ",
+ "Y ",
+ "Ya ",
+ },
+ but: []string{
+ "* ",
+ "Peru ",
+ },
+ },
+ },
+ "az": &GherkinDialect{
+ "az", "Azerbaijani", "Azərbaycanca", map[string][]string{
+ feature: []string{
+ "Özəllik",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Keçmiş",
+ "Kontekst",
+ },
+ scenario: []string{
+ "Nümunə",
+ "Ssenari",
+ },
+ scenarioOutline: []string{
+ "Ssenarinin strukturu",
+ },
+ examples: []string{
+ "Nümunələr",
+ },
+ given: []string{
+ "* ",
+ "Tutaq ki ",
+ "Verilir ",
+ },
+ when: []string{
+ "* ",
+ "Əgər ",
+ "Nə vaxt ki ",
+ },
+ then: []string{
+ "* ",
+ "O halda ",
+ },
+ and: []string{
+ "* ",
+ "Və ",
+ "Həm ",
+ },
+ but: []string{
+ "* ",
+ "Amma ",
+ "Ancaq ",
+ },
+ },
+ },
+ "bg": &GherkinDialect{
+ "bg", "Bulgarian", "български", map[string][]string{
+ feature: []string{
+ "Функционалност",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Предистория",
+ },
+ scenario: []string{
+ "Пример",
+ "Сценарий",
+ },
+ scenarioOutline: []string{
+ "Рамка на сценарий",
+ },
+ examples: []string{
+ "Примери",
+ },
+ given: []string{
+ "* ",
+ "Дадено ",
+ },
+ when: []string{
+ "* ",
+ "Когато ",
+ },
+ then: []string{
+ "* ",
+ "То ",
+ },
+ and: []string{
+ "* ",
+ "И ",
+ },
+ but: []string{
+ "* ",
+ "Но ",
+ },
+ },
+ },
+ "bm": &GherkinDialect{
+ "bm", "Malay", "Bahasa Melayu", map[string][]string{
+ feature: []string{
+ "Fungsi",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Latar Belakang",
+ },
+ scenario: []string{
+ "Senario",
+ "Situasi",
+ "Keadaan",
+ },
+ scenarioOutline: []string{
+ "Kerangka Senario",
+ "Kerangka Situasi",
+ "Kerangka Keadaan",
+ "Garis Panduan Senario",
+ },
+ examples: []string{
+ "Contoh",
+ },
+ given: []string{
+ "* ",
+ "Diberi ",
+ "Bagi ",
+ },
+ when: []string{
+ "* ",
+ "Apabila ",
+ },
+ then: []string{
+ "* ",
+ "Maka ",
+ "Kemudian ",
+ },
+ and: []string{
+ "* ",
+ "Dan ",
+ },
+ but: []string{
+ "* ",
+ "Tetapi ",
+ "Tapi ",
+ },
+ },
+ },
+ "bs": &GherkinDialect{
+ "bs", "Bosnian", "Bosanski", map[string][]string{
+ feature: []string{
+ "Karakteristika",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Pozadina",
+ },
+ scenario: []string{
+ "Primjer",
+ "Scenariju",
+ "Scenario",
+ },
+ scenarioOutline: []string{
+ "Scenariju-obris",
+ "Scenario-outline",
+ },
+ examples: []string{
+ "Primjeri",
+ },
+ given: []string{
+ "* ",
+ "Dato ",
+ },
+ when: []string{
+ "* ",
+ "Kada ",
+ },
+ then: []string{
+ "* ",
+ "Zatim ",
+ },
+ and: []string{
+ "* ",
+ "I ",
+ "A ",
+ },
+ but: []string{
+ "* ",
+ "Ali ",
+ },
+ },
+ },
+ "ca": &GherkinDialect{
+ "ca", "Catalan", "català", map[string][]string{
+ feature: []string{
+ "Característica",
+ "Funcionalitat",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Rerefons",
+ "Antecedents",
+ },
+ scenario: []string{
+ "Exemple",
+ "Escenari",
+ },
+ scenarioOutline: []string{
+ "Esquema de l'escenari",
+ },
+ examples: []string{
+ "Exemples",
+ },
+ given: []string{
+ "* ",
+ "Donat ",
+ "Donada ",
+ "Atès ",
+ "Atesa ",
+ },
+ when: []string{
+ "* ",
+ "Quan ",
+ },
+ then: []string{
+ "* ",
+ "Aleshores ",
+ "Cal ",
+ },
+ and: []string{
+ "* ",
+ "I ",
+ },
+ but: []string{
+ "* ",
+ "Però ",
+ },
+ },
+ },
+ "cs": &GherkinDialect{
+ "cs", "Czech", "Česky", map[string][]string{
+ feature: []string{
+ "Požadavek",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Pozadí",
+ "Kontext",
+ },
+ scenario: []string{
+ "Příklad",
+ "Scénář",
+ },
+ scenarioOutline: []string{
+ "Náčrt Scénáře",
+ "Osnova scénáře",
+ },
+ examples: []string{
+ "Příklady",
+ },
+ given: []string{
+ "* ",
+ "Pokud ",
+ "Za předpokladu ",
+ },
+ when: []string{
+ "* ",
+ "Když ",
+ },
+ then: []string{
+ "* ",
+ "Pak ",
+ },
+ and: []string{
+ "* ",
+ "A také ",
+ "A ",
+ },
+ but: []string{
+ "* ",
+ "Ale ",
+ },
+ },
+ },
+ "cy-GB": &GherkinDialect{
+ "cy-GB", "Welsh", "Cymraeg", map[string][]string{
+ feature: []string{
+ "Arwedd",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Cefndir",
+ },
+ scenario: []string{
+ "Enghraifft",
+ "Scenario",
+ },
+ scenarioOutline: []string{
+ "Scenario Amlinellol",
+ },
+ examples: []string{
+ "Enghreifftiau",
+ },
+ given: []string{
+ "* ",
+ "Anrhegedig a ",
+ },
+ when: []string{
+ "* ",
+ "Pryd ",
+ },
+ then: []string{
+ "* ",
+ "Yna ",
+ },
+ and: []string{
+ "* ",
+ "A ",
+ },
+ but: []string{
+ "* ",
+ "Ond ",
+ },
+ },
+ },
+ "da": &GherkinDialect{
+ "da", "Danish", "dansk", map[string][]string{
+ feature: []string{
+ "Egenskab",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Baggrund",
+ },
+ scenario: []string{
+ "Eksempel",
+ "Scenarie",
+ },
+ scenarioOutline: []string{
+ "Abstrakt Scenario",
+ },
+ examples: []string{
+ "Eksempler",
+ },
+ given: []string{
+ "* ",
+ "Givet ",
+ },
+ when: []string{
+ "* ",
+ "Når ",
+ },
+ then: []string{
+ "* ",
+ "Så ",
+ },
+ and: []string{
+ "* ",
+ "Og ",
+ },
+ but: []string{
+ "* ",
+ "Men ",
+ },
+ },
+ },
+ "de": &GherkinDialect{
+ "de", "German", "Deutsch", map[string][]string{
+ feature: []string{
+ "Funktionalität",
+ "Funktion",
+ },
+ rule: []string{
+ "Rule",
+ "Regel",
+ },
+ background: []string{
+ "Grundlage",
+ "Hintergrund",
+ "Voraussetzungen",
+ "Vorbedingungen",
+ },
+ scenario: []string{
+ "Beispiel",
+ "Szenario",
+ },
+ scenarioOutline: []string{
+ "Szenariogrundriss",
+ "Szenarien",
+ },
+ examples: []string{
+ "Beispiele",
+ },
+ given: []string{
+ "* ",
+ "Angenommen ",
+ "Gegeben sei ",
+ "Gegeben seien ",
+ },
+ when: []string{
+ "* ",
+ "Wenn ",
+ },
+ then: []string{
+ "* ",
+ "Dann ",
+ },
+ and: []string{
+ "* ",
+ "Und ",
+ },
+ but: []string{
+ "* ",
+ "Aber ",
+ },
+ },
+ },
+ "el": &GherkinDialect{
+ "el", "Greek", "Ελληνικά", map[string][]string{
+ feature: []string{
+ "Δυνατότητα",
+ "Λειτουργία",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Υπόβαθρο",
+ },
+ scenario: []string{
+ "Παράδειγμα",
+ "Σενάριο",
+ },
+ scenarioOutline: []string{
+ "Περιγραφή Σεναρίου",
+ "Περίγραμμα Σεναρίου",
+ },
+ examples: []string{
+ "Παραδείγματα",
+ "Σενάρια",
+ },
+ given: []string{
+ "* ",
+ "Δεδομένου ",
+ },
+ when: []string{
+ "* ",
+ "Όταν ",
+ },
+ then: []string{
+ "* ",
+ "Τότε ",
+ },
+ and: []string{
+ "* ",
+ "Και ",
+ },
+ but: []string{
+ "* ",
+ "Αλλά ",
+ },
+ },
+ },
+ "em": &GherkinDialect{
+ "em", "Emoji", "😀", map[string][]string{
+ feature: []string{
+ "📚",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "💤",
+ },
+ scenario: []string{
+ "🥒",
+ "📕",
+ },
+ scenarioOutline: []string{
+ "📖",
+ },
+ examples: []string{
+ "📓",
+ },
+ given: []string{
+ "* ",
+ "😐",
+ },
+ when: []string{
+ "* ",
+ "🎬",
+ },
+ then: []string{
+ "* ",
+ "🙏",
+ },
+ and: []string{
+ "* ",
+ "😂",
+ },
+ but: []string{
+ "* ",
+ "😔",
+ },
+ },
+ },
+ "en": &GherkinDialect{
+ "en", "English", "English", map[string][]string{
+ feature: []string{
+ "Feature",
+ "Business Need",
+ "Ability",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Background",
+ },
+ scenario: []string{
+ "Example",
+ "Scenario",
+ },
+ scenarioOutline: []string{
+ "Scenario Outline",
+ "Scenario Template",
+ },
+ examples: []string{
+ "Examples",
+ "Scenarios",
+ },
+ given: []string{
+ "* ",
+ "Given ",
+ },
+ when: []string{
+ "* ",
+ "When ",
+ },
+ then: []string{
+ "* ",
+ "Then ",
+ },
+ and: []string{
+ "* ",
+ "And ",
+ },
+ but: []string{
+ "* ",
+ "But ",
+ },
+ },
+ },
+ "en-Scouse": &GherkinDialect{
+ "en-Scouse", "Scouse", "Scouse", map[string][]string{
+ feature: []string{
+ "Feature",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Dis is what went down",
+ },
+ scenario: []string{
+ "The thing of it is",
+ },
+ scenarioOutline: []string{
+ "Wharrimean is",
+ },
+ examples: []string{
+ "Examples",
+ },
+ given: []string{
+ "* ",
+ "Givun ",
+ "Youse know when youse got ",
+ },
+ when: []string{
+ "* ",
+ "Wun ",
+ "Youse know like when ",
+ },
+ then: []string{
+ "* ",
+ "Dun ",
+ "Den youse gotta ",
+ },
+ and: []string{
+ "* ",
+ "An ",
+ },
+ but: []string{
+ "* ",
+ "Buh ",
+ },
+ },
+ },
+ "en-au": &GherkinDialect{
+ "en-au", "Australian", "Australian", map[string][]string{
+ feature: []string{
+ "Pretty much",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "First off",
+ },
+ scenario: []string{
+ "Awww, look mate",
+ },
+ scenarioOutline: []string{
+ "Reckon it's like",
+ },
+ examples: []string{
+ "You'll wanna",
+ },
+ given: []string{
+ "* ",
+ "Y'know ",
+ },
+ when: []string{
+ "* ",
+ "It's just unbelievable ",
+ },
+ then: []string{
+ "* ",
+ "But at the end of the day I reckon ",
+ },
+ and: []string{
+ "* ",
+ "Too right ",
+ },
+ but: []string{
+ "* ",
+ "Yeah nah ",
+ },
+ },
+ },
+ "en-lol": &GherkinDialect{
+ "en-lol", "LOLCAT", "LOLCAT", map[string][]string{
+ feature: []string{
+ "OH HAI",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "B4",
+ },
+ scenario: []string{
+ "MISHUN",
+ },
+ scenarioOutline: []string{
+ "MISHUN SRSLY",
+ },
+ examples: []string{
+ "EXAMPLZ",
+ },
+ given: []string{
+ "* ",
+ "I CAN HAZ ",
+ },
+ when: []string{
+ "* ",
+ "WEN ",
+ },
+ then: []string{
+ "* ",
+ "DEN ",
+ },
+ and: []string{
+ "* ",
+ "AN ",
+ },
+ but: []string{
+ "* ",
+ "BUT ",
+ },
+ },
+ },
+ "en-old": &GherkinDialect{
+ "en-old", "Old English", "Englisc", map[string][]string{
+ feature: []string{
+ "Hwaet",
+ "Hwæt",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Aer",
+ "Ær",
+ },
+ scenario: []string{
+ "Swa",
+ },
+ scenarioOutline: []string{
+ "Swa hwaer swa",
+ "Swa hwær swa",
+ },
+ examples: []string{
+ "Se the",
+ "Se þe",
+ "Se ðe",
+ },
+ given: []string{
+ "* ",
+ "Thurh ",
+ "Þurh ",
+ "Ðurh ",
+ },
+ when: []string{
+ "* ",
+ "Tha ",
+ "Þa ",
+ "Ða ",
+ },
+ then: []string{
+ "* ",
+ "Tha ",
+ "Þa ",
+ "Ða ",
+ "Tha the ",
+ "Þa þe ",
+ "Ða ðe ",
+ },
+ and: []string{
+ "* ",
+ "Ond ",
+ "7 ",
+ },
+ but: []string{
+ "* ",
+ "Ac ",
+ },
+ },
+ },
+ "en-pirate": &GherkinDialect{
+ "en-pirate", "Pirate", "Pirate", map[string][]string{
+ feature: []string{
+ "Ahoy matey!",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Yo-ho-ho",
+ },
+ scenario: []string{
+ "Heave to",
+ },
+ scenarioOutline: []string{
+ "Shiver me timbers",
+ },
+ examples: []string{
+ "Dead men tell no tales",
+ },
+ given: []string{
+ "* ",
+ "Gangway! ",
+ },
+ when: []string{
+ "* ",
+ "Blimey! ",
+ },
+ then: []string{
+ "* ",
+ "Let go and haul ",
+ },
+ and: []string{
+ "* ",
+ "Aye ",
+ },
+ but: []string{
+ "* ",
+ "Avast! ",
+ },
+ },
+ },
+ "eo": &GherkinDialect{
+ "eo", "Esperanto", "Esperanto", map[string][]string{
+ feature: []string{
+ "Trajto",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Fono",
+ },
+ scenario: []string{
+ "Ekzemplo",
+ "Scenaro",
+ "Kazo",
+ },
+ scenarioOutline: []string{
+ "Konturo de la scenaro",
+ "Skizo",
+ "Kazo-skizo",
+ },
+ examples: []string{
+ "Ekzemploj",
+ },
+ given: []string{
+ "* ",
+ "Donitaĵo ",
+ "Komence ",
+ },
+ when: []string{
+ "* ",
+ "Se ",
+ },
+ then: []string{
+ "* ",
+ "Do ",
+ },
+ and: []string{
+ "* ",
+ "Kaj ",
+ },
+ but: []string{
+ "* ",
+ "Sed ",
+ },
+ },
+ },
+ "es": &GherkinDialect{
+ "es", "Spanish", "español", map[string][]string{
+ feature: []string{
+ "Característica",
+ },
+ rule: []string{
+ "Regla",
+ },
+ background: []string{
+ "Antecedentes",
+ },
+ scenario: []string{
+ "Ejemplo",
+ "Escenario",
+ },
+ scenarioOutline: []string{
+ "Esquema del escenario",
+ },
+ examples: []string{
+ "Ejemplos",
+ },
+ given: []string{
+ "* ",
+ "Dado ",
+ "Dada ",
+ "Dados ",
+ "Dadas ",
+ },
+ when: []string{
+ "* ",
+ "Cuando ",
+ },
+ then: []string{
+ "* ",
+ "Entonces ",
+ },
+ and: []string{
+ "* ",
+ "Y ",
+ "E ",
+ },
+ but: []string{
+ "* ",
+ "Pero ",
+ },
+ },
+ },
+ "et": &GherkinDialect{
+ "et", "Estonian", "eesti keel", map[string][]string{
+ feature: []string{
+ "Omadus",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Taust",
+ },
+ scenario: []string{
+ "Juhtum",
+ "Stsenaarium",
+ },
+ scenarioOutline: []string{
+ "Raamstjuhtum",
+ "Raamstsenaarium",
+ },
+ examples: []string{
+ "Juhtumid",
+ },
+ given: []string{
+ "* ",
+ "Eeldades ",
+ },
+ when: []string{
+ "* ",
+ "Kui ",
+ },
+ then: []string{
+ "* ",
+ "Siis ",
+ },
+ and: []string{
+ "* ",
+ "Ja ",
+ },
+ but: []string{
+ "* ",
+ "Kuid ",
+ },
+ },
+ },
+ "fa": &GherkinDialect{
+ "fa", "Persian", "فارسی", map[string][]string{
+ feature: []string{
+ "وِیژگی",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "زمینه",
+ },
+ scenario: []string{
+ "مثال",
+ "سناریو",
+ },
+ scenarioOutline: []string{
+ "الگوی سناریو",
+ },
+ examples: []string{
+ "نمونه ها",
+ },
+ given: []string{
+ "* ",
+ "با فرض ",
+ },
+ when: []string{
+ "* ",
+ "هنگامی ",
+ },
+ then: []string{
+ "* ",
+ "آنگاه ",
+ },
+ and: []string{
+ "* ",
+ "و ",
+ },
+ but: []string{
+ "* ",
+ "اما ",
+ },
+ },
+ },
+ "fi": &GherkinDialect{
+ "fi", "Finnish", "suomi", map[string][]string{
+ feature: []string{
+ "Ominaisuus",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Tausta",
+ },
+ scenario: []string{
+ "Tapaus",
+ },
+ scenarioOutline: []string{
+ "Tapausaihio",
+ },
+ examples: []string{
+ "Tapaukset",
+ },
+ given: []string{
+ "* ",
+ "Oletetaan ",
+ },
+ when: []string{
+ "* ",
+ "Kun ",
+ },
+ then: []string{
+ "* ",
+ "Niin ",
+ },
+ and: []string{
+ "* ",
+ "Ja ",
+ },
+ but: []string{
+ "* ",
+ "Mutta ",
+ },
+ },
+ },
+ "fr": &GherkinDialect{
+ "fr", "French", "français", map[string][]string{
+ feature: []string{
+ "Fonctionnalité",
+ },
+ rule: []string{
+ "Règle",
+ },
+ background: []string{
+ "Contexte",
+ },
+ scenario: []string{
+ "Exemple",
+ "Scénario",
+ },
+ scenarioOutline: []string{
+ "Plan du scénario",
+ "Plan du Scénario",
+ },
+ examples: []string{
+ "Exemples",
+ },
+ given: []string{
+ "* ",
+ "Soit ",
+ "Sachant que ",
+ "Sachant qu'",
+ "Sachant ",
+ "Etant donné que ",
+ "Etant donné qu'",
+ "Etant donné ",
+ "Etant donnée ",
+ "Etant donnés ",
+ "Etant données ",
+ "Étant donné que ",
+ "Étant donné qu'",
+ "Étant donné ",
+ "Étant donnée ",
+ "Étant donnés ",
+ "Étant données ",
+ },
+ when: []string{
+ "* ",
+ "Quand ",
+ "Lorsque ",
+ "Lorsqu'",
+ },
+ then: []string{
+ "* ",
+ "Alors ",
+ "Donc ",
+ },
+ and: []string{
+ "* ",
+ "Et que ",
+ "Et qu'",
+ "Et ",
+ },
+ but: []string{
+ "* ",
+ "Mais que ",
+ "Mais qu'",
+ "Mais ",
+ },
+ },
+ },
+ "ga": &GherkinDialect{
+ "ga", "Irish", "Gaeilge", map[string][]string{
+ feature: []string{
+ "Gné",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Cúlra",
+ },
+ scenario: []string{
+ "Sampla",
+ "Cás",
+ },
+ scenarioOutline: []string{
+ "Cás Achomair",
+ },
+ examples: []string{
+ "Samplaí",
+ },
+ given: []string{
+ "* ",
+ "Cuir i gcás go",
+ "Cuir i gcás nach",
+ "Cuir i gcás gur",
+ "Cuir i gcás nár",
+ },
+ when: []string{
+ "* ",
+ "Nuair a",
+ "Nuair nach",
+ "Nuair ba",
+ "Nuair nár",
+ },
+ then: []string{
+ "* ",
+ "Ansin",
+ },
+ and: []string{
+ "* ",
+ "Agus",
+ },
+ but: []string{
+ "* ",
+ "Ach",
+ },
+ },
+ },
+ "gj": &GherkinDialect{
+ "gj", "Gujarati", "ગુજરાતી", map[string][]string{
+ feature: []string{
+ "લક્ષણ",
+ "વ્યાપાર જરૂર",
+ "ક્ષમતા",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "બેકગ્રાઉન્ડ",
+ },
+ scenario: []string{
+ "ઉદાહરણ",
+ "સ્થિતિ",
+ },
+ scenarioOutline: []string{
+ "પરિદ્દશ્ય રૂપરેખા",
+ "પરિદ્દશ્ય ઢાંચો",
+ },
+ examples: []string{
+ "ઉદાહરણો",
+ },
+ given: []string{
+ "* ",
+ "આપેલ છે ",
+ },
+ when: []string{
+ "* ",
+ "ક્યારે ",
+ },
+ then: []string{
+ "* ",
+ "પછી ",
+ },
+ and: []string{
+ "* ",
+ "અને ",
+ },
+ but: []string{
+ "* ",
+ "પણ ",
+ },
+ },
+ },
+ "gl": &GherkinDialect{
+ "gl", "Galician", "galego", map[string][]string{
+ feature: []string{
+ "Característica",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Contexto",
+ },
+ scenario: []string{
+ "Exemplo",
+ "Escenario",
+ },
+ scenarioOutline: []string{
+ "Esbozo do escenario",
+ },
+ examples: []string{
+ "Exemplos",
+ },
+ given: []string{
+ "* ",
+ "Dado ",
+ "Dada ",
+ "Dados ",
+ "Dadas ",
+ },
+ when: []string{
+ "* ",
+ "Cando ",
+ },
+ then: []string{
+ "* ",
+ "Entón ",
+ "Logo ",
+ },
+ and: []string{
+ "* ",
+ "E ",
+ },
+ but: []string{
+ "* ",
+ "Mais ",
+ "Pero ",
+ },
+ },
+ },
+ "he": &GherkinDialect{
+ "he", "Hebrew", "עברית", map[string][]string{
+ feature: []string{
+ "תכונה",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "רקע",
+ },
+ scenario: []string{
+ "דוגמא",
+ "תרחיש",
+ },
+ scenarioOutline: []string{
+ "תבנית תרחיש",
+ },
+ examples: []string{
+ "דוגמאות",
+ },
+ given: []string{
+ "* ",
+ "בהינתן ",
+ },
+ when: []string{
+ "* ",
+ "כאשר ",
+ },
+ then: []string{
+ "* ",
+ "אז ",
+ "אזי ",
+ },
+ and: []string{
+ "* ",
+ "וגם ",
+ },
+ but: []string{
+ "* ",
+ "אבל ",
+ },
+ },
+ },
+ "hi": &GherkinDialect{
+ "hi", "Hindi", "हिंदी", map[string][]string{
+ feature: []string{
+ "रूप लेख",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "पृष्ठभूमि",
+ },
+ scenario: []string{
+ "परिदृश्य",
+ },
+ scenarioOutline: []string{
+ "परिदृश्य रूपरेखा",
+ },
+ examples: []string{
+ "उदाहरण",
+ },
+ given: []string{
+ "* ",
+ "अगर ",
+ "यदि ",
+ "चूंकि ",
+ },
+ when: []string{
+ "* ",
+ "जब ",
+ "कदा ",
+ },
+ then: []string{
+ "* ",
+ "तब ",
+ "तदा ",
+ },
+ and: []string{
+ "* ",
+ "और ",
+ "तथा ",
+ },
+ but: []string{
+ "* ",
+ "पर ",
+ "परन्तु ",
+ "किन्तु ",
+ },
+ },
+ },
+ "hr": &GherkinDialect{
+ "hr", "Croatian", "hrvatski", map[string][]string{
+ feature: []string{
+ "Osobina",
+ "Mogućnost",
+ "Mogucnost",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Pozadina",
+ },
+ scenario: []string{
+ "Primjer",
+ "Scenarij",
+ },
+ scenarioOutline: []string{
+ "Skica",
+ "Koncept",
+ },
+ examples: []string{
+ "Primjeri",
+ "Scenariji",
+ },
+ given: []string{
+ "* ",
+ "Zadan ",
+ "Zadani ",
+ "Zadano ",
+ "Ukoliko ",
+ },
+ when: []string{
+ "* ",
+ "Kada ",
+ "Kad ",
+ },
+ then: []string{
+ "* ",
+ "Onda ",
+ },
+ and: []string{
+ "* ",
+ "I ",
+ },
+ but: []string{
+ "* ",
+ "Ali ",
+ },
+ },
+ },
+ "ht": &GherkinDialect{
+ "ht", "Creole", "kreyòl", map[string][]string{
+ feature: []string{
+ "Karakteristik",
+ "Mak",
+ "Fonksyonalite",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Kontèks",
+ "Istorik",
+ },
+ scenario: []string{
+ "Senaryo",
+ },
+ scenarioOutline: []string{
+ "Plan senaryo",
+ "Plan Senaryo",
+ "Senaryo deskripsyon",
+ "Senaryo Deskripsyon",
+ "Dyagram senaryo",
+ "Dyagram Senaryo",
+ },
+ examples: []string{
+ "Egzanp",
+ },
+ given: []string{
+ "* ",
+ "Sipoze ",
+ "Sipoze ke ",
+ "Sipoze Ke ",
+ },
+ when: []string{
+ "* ",
+ "Lè ",
+ "Le ",
+ },
+ then: []string{
+ "* ",
+ "Lè sa a ",
+ "Le sa a ",
+ },
+ and: []string{
+ "* ",
+ "Ak ",
+ "Epi ",
+ "E ",
+ },
+ but: []string{
+ "* ",
+ "Men ",
+ },
+ },
+ },
+ "hu": &GherkinDialect{
+ "hu", "Hungarian", "magyar", map[string][]string{
+ feature: []string{
+ "Jellemző",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Háttér",
+ },
+ scenario: []string{
+ "Példa",
+ "Forgatókönyv",
+ },
+ scenarioOutline: []string{
+ "Forgatókönyv vázlat",
+ },
+ examples: []string{
+ "Példák",
+ },
+ given: []string{
+ "* ",
+ "Amennyiben ",
+ "Adott ",
+ },
+ when: []string{
+ "* ",
+ "Majd ",
+ "Ha ",
+ "Amikor ",
+ },
+ then: []string{
+ "* ",
+ "Akkor ",
+ },
+ and: []string{
+ "* ",
+ "És ",
+ },
+ but: []string{
+ "* ",
+ "De ",
+ },
+ },
+ },
+ "id": &GherkinDialect{
+ "id", "Indonesian", "Bahasa Indonesia", map[string][]string{
+ feature: []string{
+ "Fitur",
+ },
+ rule: []string{
+ "Rule",
+ "Aturan",
+ },
+ background: []string{
+ "Dasar",
+ "Latar Belakang",
+ },
+ scenario: []string{
+ "Skenario",
+ },
+ scenarioOutline: []string{
+ "Skenario konsep",
+ "Garis-Besar Skenario",
+ },
+ examples: []string{
+ "Contoh",
+ "Misal",
+ },
+ given: []string{
+ "* ",
+ "Dengan ",
+ "Diketahui ",
+ "Diasumsikan ",
+ "Bila ",
+ "Jika ",
+ },
+ when: []string{
+ "* ",
+ "Ketika ",
+ },
+ then: []string{
+ "* ",
+ "Maka ",
+ "Kemudian ",
+ },
+ and: []string{
+ "* ",
+ "Dan ",
+ },
+ but: []string{
+ "* ",
+ "Tapi ",
+ "Tetapi ",
+ },
+ },
+ },
+ "is": &GherkinDialect{
+ "is", "Icelandic", "Íslenska", map[string][]string{
+ feature: []string{
+ "Eiginleiki",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Bakgrunnur",
+ },
+ scenario: []string{
+ "Atburðarás",
+ },
+ scenarioOutline: []string{
+ "Lýsing Atburðarásar",
+ "Lýsing Dæma",
+ },
+ examples: []string{
+ "Dæmi",
+ "Atburðarásir",
+ },
+ given: []string{
+ "* ",
+ "Ef ",
+ },
+ when: []string{
+ "* ",
+ "Þegar ",
+ },
+ then: []string{
+ "* ",
+ "Þá ",
+ },
+ and: []string{
+ "* ",
+ "Og ",
+ },
+ but: []string{
+ "* ",
+ "En ",
+ },
+ },
+ },
+ "it": &GherkinDialect{
+ "it", "Italian", "italiano", map[string][]string{
+ feature: []string{
+ "Funzionalità",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Contesto",
+ },
+ scenario: []string{
+ "Esempio",
+ "Scenario",
+ },
+ scenarioOutline: []string{
+ "Schema dello scenario",
+ },
+ examples: []string{
+ "Esempi",
+ },
+ given: []string{
+ "* ",
+ "Dato ",
+ "Data ",
+ "Dati ",
+ "Date ",
+ },
+ when: []string{
+ "* ",
+ "Quando ",
+ },
+ then: []string{
+ "* ",
+ "Allora ",
+ },
+ and: []string{
+ "* ",
+ "E ",
+ },
+ but: []string{
+ "* ",
+ "Ma ",
+ },
+ },
+ },
+ "ja": &GherkinDialect{
+ "ja", "Japanese", "日本語", map[string][]string{
+ feature: []string{
+ "フィーチャ",
+ "機能",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "背景",
+ },
+ scenario: []string{
+ "シナリオ",
+ },
+ scenarioOutline: []string{
+ "シナリオアウトライン",
+ "シナリオテンプレート",
+ "テンプレ",
+ "シナリオテンプレ",
+ },
+ examples: []string{
+ "例",
+ "サンプル",
+ },
+ given: []string{
+ "* ",
+ "前提",
+ },
+ when: []string{
+ "* ",
+ "もし",
+ },
+ then: []string{
+ "* ",
+ "ならば",
+ },
+ and: []string{
+ "* ",
+ "かつ",
+ },
+ but: []string{
+ "* ",
+ "しかし",
+ "但し",
+ "ただし",
+ },
+ },
+ },
+ "jv": &GherkinDialect{
+ "jv", "Javanese", "Basa Jawa", map[string][]string{
+ feature: []string{
+ "Fitur",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Dasar",
+ },
+ scenario: []string{
+ "Skenario",
+ },
+ scenarioOutline: []string{
+ "Konsep skenario",
+ },
+ examples: []string{
+ "Conto",
+ "Contone",
+ },
+ given: []string{
+ "* ",
+ "Nalika ",
+ "Nalikaning ",
+ },
+ when: []string{
+ "* ",
+ "Manawa ",
+ "Menawa ",
+ },
+ then: []string{
+ "* ",
+ "Njuk ",
+ "Banjur ",
+ },
+ and: []string{
+ "* ",
+ "Lan ",
+ },
+ but: []string{
+ "* ",
+ "Tapi ",
+ "Nanging ",
+ "Ananging ",
+ },
+ },
+ },
+ "ka": &GherkinDialect{
+ "ka", "Georgian", "ქართველი", map[string][]string{
+ feature: []string{
+ "თვისება",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "კონტექსტი",
+ },
+ scenario: []string{
+ "მაგალითად",
+ "სცენარის",
+ },
+ scenarioOutline: []string{
+ "სცენარის ნიმუში",
+ },
+ examples: []string{
+ "მაგალითები",
+ },
+ given: []string{
+ "* ",
+ "მოცემული",
+ },
+ when: []string{
+ "* ",
+ "როდესაც",
+ },
+ then: []string{
+ "* ",
+ "მაშინ",
+ },
+ and: []string{
+ "* ",
+ "და",
+ },
+ but: []string{
+ "* ",
+ "მაგრამ",
+ },
+ },
+ },
+ "kn": &GherkinDialect{
+ "kn", "Kannada", "ಕನ್ನಡ", map[string][]string{
+ feature: []string{
+ "ಹೆಚ್ಚಳ",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "ಹಿನ್ನೆಲೆ",
+ },
+ scenario: []string{
+ "ಉದಾಹರಣೆ",
+ "ಕಥಾಸಾರಾಂಶ",
+ },
+ scenarioOutline: []string{
+ "ವಿವರಣೆ",
+ },
+ examples: []string{
+ "ಉದಾಹರಣೆಗಳು",
+ },
+ given: []string{
+ "* ",
+ "ನೀಡಿದ ",
+ },
+ when: []string{
+ "* ",
+ "ಸ್ಥಿತಿಯನ್ನು ",
+ },
+ then: []string{
+ "* ",
+ "ನಂತರ ",
+ },
+ and: []string{
+ "* ",
+ "ಮತ್ತು ",
+ },
+ but: []string{
+ "* ",
+ "ಆದರೆ ",
+ },
+ },
+ },
+ "ko": &GherkinDialect{
+ "ko", "Korean", "한국어", map[string][]string{
+ feature: []string{
+ "기능",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "배경",
+ },
+ scenario: []string{
+ "시나리오",
+ },
+ scenarioOutline: []string{
+ "시나리오 개요",
+ },
+ examples: []string{
+ "예",
+ },
+ given: []string{
+ "* ",
+ "조건",
+ "먼저",
+ },
+ when: []string{
+ "* ",
+ "만일",
+ "만약",
+ },
+ then: []string{
+ "* ",
+ "그러면",
+ },
+ and: []string{
+ "* ",
+ "그리고",
+ },
+ but: []string{
+ "* ",
+ "하지만",
+ "단",
+ },
+ },
+ },
+ "lt": &GherkinDialect{
+ "lt", "Lithuanian", "lietuvių kalba", map[string][]string{
+ feature: []string{
+ "Savybė",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Kontekstas",
+ },
+ scenario: []string{
+ "Pavyzdys",
+ "Scenarijus",
+ },
+ scenarioOutline: []string{
+ "Scenarijaus šablonas",
+ },
+ examples: []string{
+ "Pavyzdžiai",
+ "Scenarijai",
+ "Variantai",
+ },
+ given: []string{
+ "* ",
+ "Duota ",
+ },
+ when: []string{
+ "* ",
+ "Kai ",
+ },
+ then: []string{
+ "* ",
+ "Tada ",
+ },
+ and: []string{
+ "* ",
+ "Ir ",
+ },
+ but: []string{
+ "* ",
+ "Bet ",
+ },
+ },
+ },
+ "lu": &GherkinDialect{
+ "lu", "Luxemburgish", "Lëtzebuergesch", map[string][]string{
+ feature: []string{
+ "Funktionalitéit",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Hannergrond",
+ },
+ scenario: []string{
+ "Beispill",
+ "Szenario",
+ },
+ scenarioOutline: []string{
+ "Plang vum Szenario",
+ },
+ examples: []string{
+ "Beispiller",
+ },
+ given: []string{
+ "* ",
+ "ugeholl ",
+ },
+ when: []string{
+ "* ",
+ "wann ",
+ },
+ then: []string{
+ "* ",
+ "dann ",
+ },
+ and: []string{
+ "* ",
+ "an ",
+ "a ",
+ },
+ but: []string{
+ "* ",
+ "awer ",
+ "mä ",
+ },
+ },
+ },
+ "lv": &GherkinDialect{
+ "lv", "Latvian", "latviešu", map[string][]string{
+ feature: []string{
+ "Funkcionalitāte",
+ "Fīča",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Konteksts",
+ "Situācija",
+ },
+ scenario: []string{
+ "Piemērs",
+ "Scenārijs",
+ },
+ scenarioOutline: []string{
+ "Scenārijs pēc parauga",
+ },
+ examples: []string{
+ "Piemēri",
+ "Paraugs",
+ },
+ given: []string{
+ "* ",
+ "Kad ",
+ },
+ when: []string{
+ "* ",
+ "Ja ",
+ },
+ then: []string{
+ "* ",
+ "Tad ",
+ },
+ and: []string{
+ "* ",
+ "Un ",
+ },
+ but: []string{
+ "* ",
+ "Bet ",
+ },
+ },
+ },
+ "mk-Cyrl": &GherkinDialect{
+ "mk-Cyrl", "Macedonian", "Македонски", map[string][]string{
+ feature: []string{
+ "Функционалност",
+ "Бизнис потреба",
+ "Можност",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Контекст",
+ "Содржина",
+ },
+ scenario: []string{
+ "Пример",
+ "Сценарио",
+ "На пример",
+ },
+ scenarioOutline: []string{
+ "Преглед на сценарија",
+ "Скица",
+ "Концепт",
+ },
+ examples: []string{
+ "Примери",
+ "Сценарија",
+ },
+ given: []string{
+ "* ",
+ "Дадено ",
+ "Дадена ",
+ },
+ when: []string{
+ "* ",
+ "Кога ",
+ },
+ then: []string{
+ "* ",
+ "Тогаш ",
+ },
+ and: []string{
+ "* ",
+ "И ",
+ },
+ but: []string{
+ "* ",
+ "Но ",
+ },
+ },
+ },
+ "mk-Latn": &GherkinDialect{
+ "mk-Latn", "Macedonian (Latin)", "Makedonski (Latinica)", map[string][]string{
+ feature: []string{
+ "Funkcionalnost",
+ "Biznis potreba",
+ "Mozhnost",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Kontekst",
+ "Sodrzhina",
+ },
+ scenario: []string{
+ "Scenario",
+ "Na primer",
+ },
+ scenarioOutline: []string{
+ "Pregled na scenarija",
+ "Skica",
+ "Koncept",
+ },
+ examples: []string{
+ "Primeri",
+ "Scenaria",
+ },
+ given: []string{
+ "* ",
+ "Dadeno ",
+ "Dadena ",
+ },
+ when: []string{
+ "* ",
+ "Koga ",
+ },
+ then: []string{
+ "* ",
+ "Togash ",
+ },
+ and: []string{
+ "* ",
+ "I ",
+ },
+ but: []string{
+ "* ",
+ "No ",
+ },
+ },
+ },
+ "mn": &GherkinDialect{
+ "mn", "Mongolian", "монгол", map[string][]string{
+ feature: []string{
+ "Функц",
+ "Функционал",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Агуулга",
+ },
+ scenario: []string{
+ "Сценар",
+ },
+ scenarioOutline: []string{
+ "Сценарын төлөвлөгөө",
+ },
+ examples: []string{
+ "Тухайлбал",
+ },
+ given: []string{
+ "* ",
+ "Өгөгдсөн нь ",
+ "Анх ",
+ },
+ when: []string{
+ "* ",
+ "Хэрэв ",
+ },
+ then: []string{
+ "* ",
+ "Тэгэхэд ",
+ "Үүний дараа ",
+ },
+ and: []string{
+ "* ",
+ "Мөн ",
+ "Тэгээд ",
+ },
+ but: []string{
+ "* ",
+ "Гэхдээ ",
+ "Харин ",
+ },
+ },
+ },
+ "ne": &GherkinDialect{
+ "ne", "Nepali", "नेपाली", map[string][]string{
+ feature: []string{
+ "सुविधा",
+ "विशेषता",
+ },
+ rule: []string{
+ "नियम",
+ },
+ background: []string{
+ "पृष्ठभूमी",
+ },
+ scenario: []string{
+ "परिदृश्य",
+ },
+ scenarioOutline: []string{
+ "परिदृश्य रूपरेखा",
+ },
+ examples: []string{
+ "उदाहरण",
+ "उदाहरणहरु",
+ },
+ given: []string{
+ "* ",
+ "दिइएको ",
+ "दिएको ",
+ "यदि ",
+ },
+ when: []string{
+ "* ",
+ "जब ",
+ },
+ then: []string{
+ "* ",
+ "त्यसपछि ",
+ "अनी ",
+ },
+ and: []string{
+ "* ",
+ "र ",
+ "अनी ",
+ },
+ but: []string{
+ "* ",
+ "तर ",
+ },
+ },
+ },
+ "nl": &GherkinDialect{
+ "nl", "Dutch", "Nederlands", map[string][]string{
+ feature: []string{
+ "Functionaliteit",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Achtergrond",
+ },
+ scenario: []string{
+ "Voorbeeld",
+ "Scenario",
+ },
+ scenarioOutline: []string{
+ "Abstract Scenario",
+ },
+ examples: []string{
+ "Voorbeelden",
+ },
+ given: []string{
+ "* ",
+ "Gegeven ",
+ "Stel ",
+ },
+ when: []string{
+ "* ",
+ "Als ",
+ "Wanneer ",
+ },
+ then: []string{
+ "* ",
+ "Dan ",
+ },
+ and: []string{
+ "* ",
+ "En ",
+ },
+ but: []string{
+ "* ",
+ "Maar ",
+ },
+ },
+ },
+ "no": &GherkinDialect{
+ "no", "Norwegian", "norsk", map[string][]string{
+ feature: []string{
+ "Egenskap",
+ },
+ rule: []string{
+ "Regel",
+ },
+ background: []string{
+ "Bakgrunn",
+ },
+ scenario: []string{
+ "Eksempel",
+ "Scenario",
+ },
+ scenarioOutline: []string{
+ "Scenariomal",
+ "Abstrakt Scenario",
+ },
+ examples: []string{
+ "Eksempler",
+ },
+ given: []string{
+ "* ",
+ "Gitt ",
+ },
+ when: []string{
+ "* ",
+ "Når ",
+ },
+ then: []string{
+ "* ",
+ "Så ",
+ },
+ and: []string{
+ "* ",
+ "Og ",
+ },
+ but: []string{
+ "* ",
+ "Men ",
+ },
+ },
+ },
+ "pa": &GherkinDialect{
+ "pa", "Panjabi", "ਪੰਜਾਬੀ", map[string][]string{
+ feature: []string{
+ "ਖਾਸੀਅਤ",
+ "ਮੁਹਾਂਦਰਾ",
+ "ਨਕਸ਼ ਨੁਹਾਰ",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "ਪਿਛੋਕੜ",
+ },
+ scenario: []string{
+ "ਉਦਾਹਰਨ",
+ "ਪਟਕਥਾ",
+ },
+ scenarioOutline: []string{
+ "ਪਟਕਥਾ ਢਾਂਚਾ",
+ "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ",
+ },
+ examples: []string{
+ "ਉਦਾਹਰਨਾਂ",
+ },
+ given: []string{
+ "* ",
+ "ਜੇਕਰ ",
+ "ਜਿਵੇਂ ਕਿ ",
+ },
+ when: []string{
+ "* ",
+ "ਜਦੋਂ ",
+ },
+ then: []string{
+ "* ",
+ "ਤਦ ",
+ },
+ and: []string{
+ "* ",
+ "ਅਤੇ ",
+ },
+ but: []string{
+ "* ",
+ "ਪਰ ",
+ },
+ },
+ },
+ "pl": &GherkinDialect{
+ "pl", "Polish", "polski", map[string][]string{
+ feature: []string{
+ "Właściwość",
+ "Funkcja",
+ "Aspekt",
+ "Potrzeba biznesowa",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Założenia",
+ },
+ scenario: []string{
+ "Przykład",
+ "Scenariusz",
+ },
+ scenarioOutline: []string{
+ "Szablon scenariusza",
+ },
+ examples: []string{
+ "Przykłady",
+ },
+ given: []string{
+ "* ",
+ "Zakładając ",
+ "Mając ",
+ "Zakładając, że ",
+ },
+ when: []string{
+ "* ",
+ "Jeżeli ",
+ "Jeśli ",
+ "Gdy ",
+ "Kiedy ",
+ },
+ then: []string{
+ "* ",
+ "Wtedy ",
+ },
+ and: []string{
+ "* ",
+ "Oraz ",
+ "I ",
+ },
+ but: []string{
+ "* ",
+ "Ale ",
+ },
+ },
+ },
+ "pt": &GherkinDialect{
+ "pt", "Portuguese", "português", map[string][]string{
+ feature: []string{
+ "Funcionalidade",
+ "Característica",
+ "Caracteristica",
+ },
+ rule: []string{
+ "Regra",
+ },
+ background: []string{
+ "Contexto",
+ "Cenário de Fundo",
+ "Cenario de Fundo",
+ "Fundo",
+ },
+ scenario: []string{
+ "Exemplo",
+ "Cenário",
+ "Cenario",
+ },
+ scenarioOutline: []string{
+ "Esquema do Cenário",
+ "Esquema do Cenario",
+ "Delineação do Cenário",
+ "Delineacao do Cenario",
+ },
+ examples: []string{
+ "Exemplos",
+ "Cenários",
+ "Cenarios",
+ },
+ given: []string{
+ "* ",
+ "Dado ",
+ "Dada ",
+ "Dados ",
+ "Dadas ",
+ },
+ when: []string{
+ "* ",
+ "Quando ",
+ },
+ then: []string{
+ "* ",
+ "Então ",
+ "Entao ",
+ },
+ and: []string{
+ "* ",
+ "E ",
+ },
+ but: []string{
+ "* ",
+ "Mas ",
+ },
+ },
+ },
+ "ro": &GherkinDialect{
+ "ro", "Romanian", "română", map[string][]string{
+ feature: []string{
+ "Functionalitate",
+ "Funcționalitate",
+ "Funcţionalitate",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Context",
+ },
+ scenario: []string{
+ "Exemplu",
+ "Scenariu",
+ },
+ scenarioOutline: []string{
+ "Structura scenariu",
+ "Structură scenariu",
+ },
+ examples: []string{
+ "Exemple",
+ },
+ given: []string{
+ "* ",
+ "Date fiind ",
+ "Dat fiind ",
+ "Dată fiind",
+ "Dati fiind ",
+ "Dați fiind ",
+ "Daţi fiind ",
+ },
+ when: []string{
+ "* ",
+ "Cand ",
+ "Când ",
+ },
+ then: []string{
+ "* ",
+ "Atunci ",
+ },
+ and: []string{
+ "* ",
+ "Si ",
+ "Și ",
+ "Şi ",
+ },
+ but: []string{
+ "* ",
+ "Dar ",
+ },
+ },
+ },
+ "ru": &GherkinDialect{
+ "ru", "Russian", "русский", map[string][]string{
+ feature: []string{
+ "Функция",
+ "Функциональность",
+ "Функционал",
+ "Свойство",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Предыстория",
+ "Контекст",
+ },
+ scenario: []string{
+ "Пример",
+ "Сценарий",
+ },
+ scenarioOutline: []string{
+ "Структура сценария",
+ },
+ examples: []string{
+ "Примеры",
+ },
+ given: []string{
+ "* ",
+ "Допустим ",
+ "Дано ",
+ "Пусть ",
+ },
+ when: []string{
+ "* ",
+ "Когда ",
+ "Если ",
+ },
+ then: []string{
+ "* ",
+ "То ",
+ "Затем ",
+ "Тогда ",
+ },
+ and: []string{
+ "* ",
+ "И ",
+ "К тому же ",
+ "Также ",
+ },
+ but: []string{
+ "* ",
+ "Но ",
+ "А ",
+ "Иначе ",
+ },
+ },
+ },
+ "sk": &GherkinDialect{
+ "sk", "Slovak", "Slovensky", map[string][]string{
+ feature: []string{
+ "Požiadavka",
+ "Funkcia",
+ "Vlastnosť",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Pozadie",
+ },
+ scenario: []string{
+ "Príklad",
+ "Scenár",
+ },
+ scenarioOutline: []string{
+ "Náčrt Scenáru",
+ "Náčrt Scenára",
+ "Osnova Scenára",
+ },
+ examples: []string{
+ "Príklady",
+ },
+ given: []string{
+ "* ",
+ "Pokiaľ ",
+ "Za predpokladu ",
+ },
+ when: []string{
+ "* ",
+ "Keď ",
+ "Ak ",
+ },
+ then: []string{
+ "* ",
+ "Tak ",
+ "Potom ",
+ },
+ and: []string{
+ "* ",
+ "A ",
+ "A tiež ",
+ "A taktiež ",
+ "A zároveň ",
+ },
+ but: []string{
+ "* ",
+ "Ale ",
+ },
+ },
+ },
+ "sl": &GherkinDialect{
+ "sl", "Slovenian", "Slovenski", map[string][]string{
+ feature: []string{
+ "Funkcionalnost",
+ "Funkcija",
+ "Možnosti",
+ "Moznosti",
+ "Lastnost",
+ "Značilnost",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Kontekst",
+ "Osnova",
+ "Ozadje",
+ },
+ scenario: []string{
+ "Primer",
+ "Scenarij",
+ },
+ scenarioOutline: []string{
+ "Struktura scenarija",
+ "Skica",
+ "Koncept",
+ "Oris scenarija",
+ "Osnutek",
+ },
+ examples: []string{
+ "Primeri",
+ "Scenariji",
+ },
+ given: []string{
+ "Dano ",
+ "Podano ",
+ "Zaradi ",
+ "Privzeto ",
+ },
+ when: []string{
+ "Ko ",
+ "Ce ",
+ "Če ",
+ "Kadar ",
+ },
+ then: []string{
+ "Nato ",
+ "Potem ",
+ "Takrat ",
+ },
+ and: []string{
+ "In ",
+ "Ter ",
+ },
+ but: []string{
+ "Toda ",
+ "Ampak ",
+ "Vendar ",
+ },
+ },
+ },
+ "sr-Cyrl": &GherkinDialect{
+ "sr-Cyrl", "Serbian", "Српски", map[string][]string{
+ feature: []string{
+ "Функционалност",
+ "Могућност",
+ "Особина",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Контекст",
+ "Основа",
+ "Позадина",
+ },
+ scenario: []string{
+ "Пример",
+ "Сценарио",
+ "Пример",
+ },
+ scenarioOutline: []string{
+ "Структура сценарија",
+ "Скица",
+ "Концепт",
+ },
+ examples: []string{
+ "Примери",
+ "Сценарији",
+ },
+ given: []string{
+ "* ",
+ "За дато ",
+ "За дате ",
+ "За дати ",
+ },
+ when: []string{
+ "* ",
+ "Када ",
+ "Кад ",
+ },
+ then: []string{
+ "* ",
+ "Онда ",
+ },
+ and: []string{
+ "* ",
+ "И ",
+ },
+ but: []string{
+ "* ",
+ "Али ",
+ },
+ },
+ },
+ "sr-Latn": &GherkinDialect{
+ "sr-Latn", "Serbian (Latin)", "Srpski (Latinica)", map[string][]string{
+ feature: []string{
+ "Funkcionalnost",
+ "Mogućnost",
+ "Mogucnost",
+ "Osobina",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Kontekst",
+ "Osnova",
+ "Pozadina",
+ },
+ scenario: []string{
+ "Scenario",
+ "Primer",
+ },
+ scenarioOutline: []string{
+ "Struktura scenarija",
+ "Skica",
+ "Koncept",
+ },
+ examples: []string{
+ "Primeri",
+ "Scenariji",
+ },
+ given: []string{
+ "* ",
+ "Za dato ",
+ "Za date ",
+ "Za dati ",
+ },
+ when: []string{
+ "* ",
+ "Kada ",
+ "Kad ",
+ },
+ then: []string{
+ "* ",
+ "Onda ",
+ },
+ and: []string{
+ "* ",
+ "I ",
+ },
+ but: []string{
+ "* ",
+ "Ali ",
+ },
+ },
+ },
+ "sv": &GherkinDialect{
+ "sv", "Swedish", "Svenska", map[string][]string{
+ feature: []string{
+ "Egenskap",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Bakgrund",
+ },
+ scenario: []string{
+ "Scenario",
+ },
+ scenarioOutline: []string{
+ "Abstrakt Scenario",
+ "Scenariomall",
+ },
+ examples: []string{
+ "Exempel",
+ },
+ given: []string{
+ "* ",
+ "Givet ",
+ },
+ when: []string{
+ "* ",
+ "När ",
+ },
+ then: []string{
+ "* ",
+ "Så ",
+ },
+ and: []string{
+ "* ",
+ "Och ",
+ },
+ but: []string{
+ "* ",
+ "Men ",
+ },
+ },
+ },
+ "ta": &GherkinDialect{
+ "ta", "Tamil", "தமிழ்", map[string][]string{
+ feature: []string{
+ "அம்சம்",
+ "வணிக தேவை",
+ "திறன்",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "பின்னணி",
+ },
+ scenario: []string{
+ "உதாரணமாக",
+ "காட்சி",
+ },
+ scenarioOutline: []string{
+ "காட்சி சுருக்கம்",
+ "காட்சி வார்ப்புரு",
+ },
+ examples: []string{
+ "எடுத்துக்காட்டுகள்",
+ "காட்சிகள்",
+ "நிலைமைகளில்",
+ },
+ given: []string{
+ "* ",
+ "கொடுக்கப்பட்ட ",
+ },
+ when: []string{
+ "* ",
+ "எப்போது ",
+ },
+ then: []string{
+ "* ",
+ "அப்பொழுது ",
+ },
+ and: []string{
+ "* ",
+ "மேலும் ",
+ "மற்றும் ",
+ },
+ but: []string{
+ "* ",
+ "ஆனால் ",
+ },
+ },
+ },
+ "th": &GherkinDialect{
+ "th", "Thai", "ไทย", map[string][]string{
+ feature: []string{
+ "โครงหลัก",
+ "ความต้องการทางธุรกิจ",
+ "ความสามารถ",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "แนวคิด",
+ },
+ scenario: []string{
+ "เหตุการณ์",
+ },
+ scenarioOutline: []string{
+ "สรุปเหตุการณ์",
+ "โครงสร้างของเหตุการณ์",
+ },
+ examples: []string{
+ "ชุดของตัวอย่าง",
+ "ชุดของเหตุการณ์",
+ },
+ given: []string{
+ "* ",
+ "กำหนดให้ ",
+ },
+ when: []string{
+ "* ",
+ "เมื่อ ",
+ },
+ then: []string{
+ "* ",
+ "ดังนั้น ",
+ },
+ and: []string{
+ "* ",
+ "และ ",
+ },
+ but: []string{
+ "* ",
+ "แต่ ",
+ },
+ },
+ },
+ "tl": &GherkinDialect{
+ "tl", "Telugu", "తెలుగు", map[string][]string{
+ feature: []string{
+ "గుణము",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "నేపథ్యం",
+ },
+ scenario: []string{
+ "ఉదాహరణ",
+ "సన్నివేశం",
+ },
+ scenarioOutline: []string{
+ "కథనం",
+ },
+ examples: []string{
+ "ఉదాహరణలు",
+ },
+ given: []string{
+ "* ",
+ "చెప్పబడినది ",
+ },
+ when: []string{
+ "* ",
+ "ఈ పరిస్థితిలో ",
+ },
+ then: []string{
+ "* ",
+ "అప్పుడు ",
+ },
+ and: []string{
+ "* ",
+ "మరియు ",
+ },
+ but: []string{
+ "* ",
+ "కాని ",
+ },
+ },
+ },
+ "tlh": &GherkinDialect{
+ "tlh", "Klingon", "tlhIngan", map[string][]string{
+ feature: []string{
+ "Qap",
+ "Qu'meH 'ut",
+ "perbogh",
+ "poQbogh malja'",
+ "laH",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "mo'",
+ },
+ scenario: []string{
+ "lut",
+ },
+ scenarioOutline: []string{
+ "lut chovnatlh",
+ },
+ examples: []string{
+ "ghantoH",
+ "lutmey",
+ },
+ given: []string{
+ "* ",
+ "ghu' noblu' ",
+ "DaH ghu' bejlu' ",
+ },
+ when: []string{
+ "* ",
+ "qaSDI' ",
+ },
+ then: []string{
+ "* ",
+ "vaj ",
+ },
+ and: []string{
+ "* ",
+ "'ej ",
+ "latlh ",
+ },
+ but: []string{
+ "* ",
+ "'ach ",
+ "'a ",
+ },
+ },
+ },
+ "tr": &GherkinDialect{
+ "tr", "Turkish", "Türkçe", map[string][]string{
+ feature: []string{
+ "Özellik",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Geçmiş",
+ },
+ scenario: []string{
+ "Örnek",
+ "Senaryo",
+ },
+ scenarioOutline: []string{
+ "Senaryo taslağı",
+ },
+ examples: []string{
+ "Örnekler",
+ },
+ given: []string{
+ "* ",
+ "Diyelim ki ",
+ },
+ when: []string{
+ "* ",
+ "Eğer ki ",
+ },
+ then: []string{
+ "* ",
+ "O zaman ",
+ },
+ and: []string{
+ "* ",
+ "Ve ",
+ },
+ but: []string{
+ "* ",
+ "Fakat ",
+ "Ama ",
+ },
+ },
+ },
+ "tt": &GherkinDialect{
+ "tt", "Tatar", "Татарча", map[string][]string{
+ feature: []string{
+ "Мөмкинлек",
+ "Үзенчәлеклелек",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Кереш",
+ },
+ scenario: []string{
+ "Сценарий",
+ },
+ scenarioOutline: []string{
+ "Сценарийның төзелеше",
+ },
+ examples: []string{
+ "Үрнәкләр",
+ "Мисаллар",
+ },
+ given: []string{
+ "* ",
+ "Әйтик ",
+ },
+ when: []string{
+ "* ",
+ "Әгәр ",
+ },
+ then: []string{
+ "* ",
+ "Нәтиҗәдә ",
+ },
+ and: []string{
+ "* ",
+ "Һәм ",
+ "Вә ",
+ },
+ but: []string{
+ "* ",
+ "Ләкин ",
+ "Әмма ",
+ },
+ },
+ },
+ "uk": &GherkinDialect{
+ "uk", "Ukrainian", "Українська", map[string][]string{
+ feature: []string{
+ "Функціонал",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Передумова",
+ },
+ scenario: []string{
+ "Приклад",
+ "Сценарій",
+ },
+ scenarioOutline: []string{
+ "Структура сценарію",
+ },
+ examples: []string{
+ "Приклади",
+ },
+ given: []string{
+ "* ",
+ "Припустимо ",
+ "Припустимо, що ",
+ "Нехай ",
+ "Дано ",
+ },
+ when: []string{
+ "* ",
+ "Якщо ",
+ "Коли ",
+ },
+ then: []string{
+ "* ",
+ "То ",
+ "Тоді ",
+ },
+ and: []string{
+ "* ",
+ "І ",
+ "А також ",
+ "Та ",
+ },
+ but: []string{
+ "* ",
+ "Але ",
+ },
+ },
+ },
+ "ur": &GherkinDialect{
+ "ur", "Urdu", "اردو", map[string][]string{
+ feature: []string{
+ "صلاحیت",
+ "کاروبار کی ضرورت",
+ "خصوصیت",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "پس منظر",
+ },
+ scenario: []string{
+ "منظرنامہ",
+ },
+ scenarioOutline: []string{
+ "منظر نامے کا خاکہ",
+ },
+ examples: []string{
+ "مثالیں",
+ },
+ given: []string{
+ "* ",
+ "اگر ",
+ "بالفرض ",
+ "فرض کیا ",
+ },
+ when: []string{
+ "* ",
+ "جب ",
+ },
+ then: []string{
+ "* ",
+ "پھر ",
+ "تب ",
+ },
+ and: []string{
+ "* ",
+ "اور ",
+ },
+ but: []string{
+ "* ",
+ "لیکن ",
+ },
+ },
+ },
+ "uz": &GherkinDialect{
+ "uz", "Uzbek", "Узбекча", map[string][]string{
+ feature: []string{
+ "Функционал",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Тарих",
+ },
+ scenario: []string{
+ "Сценарий",
+ },
+ scenarioOutline: []string{
+ "Сценарий структураси",
+ },
+ examples: []string{
+ "Мисоллар",
+ },
+ given: []string{
+ "* ",
+ "Агар ",
+ },
+ when: []string{
+ "* ",
+ "Агар ",
+ },
+ then: []string{
+ "* ",
+ "Унда ",
+ },
+ and: []string{
+ "* ",
+ "Ва ",
+ },
+ but: []string{
+ "* ",
+ "Лекин ",
+ "Бирок ",
+ "Аммо ",
+ },
+ },
+ },
+ "vi": &GherkinDialect{
+ "vi", "Vietnamese", "Tiếng Việt", map[string][]string{
+ feature: []string{
+ "Tính năng",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "Bối cảnh",
+ },
+ scenario: []string{
+ "Tình huống",
+ "Kịch bản",
+ },
+ scenarioOutline: []string{
+ "Khung tình huống",
+ "Khung kịch bản",
+ },
+ examples: []string{
+ "Dữ liệu",
+ },
+ given: []string{
+ "* ",
+ "Biết ",
+ "Cho ",
+ },
+ when: []string{
+ "* ",
+ "Khi ",
+ },
+ then: []string{
+ "* ",
+ "Thì ",
+ },
+ and: []string{
+ "* ",
+ "Và ",
+ },
+ but: []string{
+ "* ",
+ "Nhưng ",
+ },
+ },
+ },
+ "zh-CN": &GherkinDialect{
+ "zh-CN", "Chinese simplified", "简体中文", map[string][]string{
+ feature: []string{
+ "功能",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "背景",
+ },
+ scenario: []string{
+ "场景",
+ "剧本",
+ },
+ scenarioOutline: []string{
+ "场景大纲",
+ "剧本大纲",
+ },
+ examples: []string{
+ "例子",
+ },
+ given: []string{
+ "* ",
+ "假如",
+ "假设",
+ "假定",
+ },
+ when: []string{
+ "* ",
+ "当",
+ },
+ then: []string{
+ "* ",
+ "那么",
+ },
+ and: []string{
+ "* ",
+ "而且",
+ "并且",
+ "同时",
+ },
+ but: []string{
+ "* ",
+ "但是",
+ },
+ },
+ },
+ "zh-TW": &GherkinDialect{
+ "zh-TW", "Chinese traditional", "繁體中文", map[string][]string{
+ feature: []string{
+ "功能",
+ },
+ rule: []string{
+ "Rule",
+ },
+ background: []string{
+ "背景",
+ },
+ scenario: []string{
+ "場景",
+ "劇本",
+ },
+ scenarioOutline: []string{
+ "場景大綱",
+ "劇本大綱",
+ },
+ examples: []string{
+ "例子",
+ },
+ given: []string{
+ "* ",
+ "假如",
+ "假設",
+ "假定",
+ },
+ when: []string{
+ "* ",
+ "當",
+ },
+ then: []string{
+ "* ",
+ "那麼",
+ },
+ and: []string{
+ "* ",
+ "而且",
+ "並且",
+ "同時",
+ },
+ but: []string{
+ "* ",
+ "但是",
+ },
+ },
+ },
+ "mr": &GherkinDialect{
+ "mr", "Marathi", "मराठी", map[string][]string{
+ feature: []string{
+ "वैशिष्ट्य",
+ "सुविधा",
+ },
+ rule: []string{
+ "नियम",
+ },
+ background: []string{
+ "पार्श्वभूमी",
+ },
+ scenario: []string{
+ "परिदृश्य",
+ },
+ scenarioOutline: []string{
+ "परिदृश्य रूपरेखा",
+ },
+ examples: []string{
+ "उदाहरण",
+ },
+ given: []string{
+ "* ",
+ "जर",
+ "दिलेल्या प्रमाणे ",
+ },
+ when: []string{
+ "* ",
+ "जेव्हा ",
+ },
+ then: []string{
+ "* ",
+ "मग ",
+ "तेव्हा ",
+ },
+ and: []string{
+ "* ",
+ "आणि ",
+ "तसेच ",
+ },
+ but: []string{
+ "* ",
+ "पण ",
+ "परंतु ",
+ },
+ },
+ },
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/dialects_builtin.go.jq b/vendor/github.com/cucumber/gherkin-go/v11/dialects_builtin.go.jq
new file mode 100644
index 00000000..6ac0eaa9
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/dialects_builtin.go.jq
@@ -0,0 +1,33 @@
+. as $root
+| (
+ [ to_entries[]
+ | [
+ "\t",(.key|@json),": &GherkinDialect{\n",
+ "\t\t", (.key|@json),", ", (.value.name|@json),", ", (.value.native|@json), ", map[string][]string{\n"
+ ] + (
+ [ .value
+ | {"feature","rule","background","scenario","scenarioOutline","examples","given","when","then","and","but"}
+ | to_entries[]
+ | "\t\t\t"+(.key), ": []string{\n",
+ ([ .value[] | "\t\t\t\t", @json, ",\n" ]|add),
+ "\t\t\t},\n"
+ ]
+ ) + ["\t\t},\n","\t},\n"]
+ | add
+ ]
+ | add
+ )
+| "package gherkin\n\n"
++ "// Builtin dialects for " + ([ $root | to_entries[] | .key+" ("+.value.name+")" ] | join(", ")) + "\n"
++ "func GherkinDialectsBuildin() GherkinDialectProvider {\n"
++ "\treturn buildinDialects\n"
++ "}\n\n"
++ "const (\n"
++ (
+ ["feature","rule","background","scenario","scenarioOutline","examples","given","when","then","and","but"]
+ | [ .[] | "\t" + . + " = " + (.|@json) + "\n" ]
+ | add )
++ ")\n\n"
++ "var buildinDialects = gherkinDialectMap{\n"
++ .
++ "}\n"
\ No newline at end of file
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/gherkin-languages.json b/vendor/github.com/cucumber/gherkin-go/v11/gherkin-languages.json
new file mode 100644
index 00000000..324a24fc
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/gherkin-languages.json
@@ -0,0 +1,3625 @@
+{
+ "af": {
+ "and": [
+ "* ",
+ "En "
+ ],
+ "background": [
+ "Agtergrond"
+ ],
+ "but": [
+ "* ",
+ "Maar "
+ ],
+ "examples": [
+ "Voorbeelde"
+ ],
+ "feature": [
+ "Funksie",
+ "Besigheid Behoefte",
+ "Vermoë"
+ ],
+ "given": [
+ "* ",
+ "Gegewe "
+ ],
+ "name": "Afrikaans",
+ "native": "Afrikaans",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Voorbeeld",
+ "Situasie"
+ ],
+ "scenarioOutline": [
+ "Situasie Uiteensetting"
+ ],
+ "then": [
+ "* ",
+ "Dan "
+ ],
+ "when": [
+ "* ",
+ "Wanneer "
+ ]
+ },
+ "am": {
+ "and": [
+ "* ",
+ "Եվ "
+ ],
+ "background": [
+ "Կոնտեքստ"
+ ],
+ "but": [
+ "* ",
+ "Բայց "
+ ],
+ "examples": [
+ "Օրինակներ"
+ ],
+ "feature": [
+ "Ֆունկցիոնալություն",
+ "Հատկություն"
+ ],
+ "given": [
+ "* ",
+ "Դիցուք "
+ ],
+ "name": "Armenian",
+ "native": "հայերեն",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Օրինակ",
+ "Սցենար"
+ ],
+ "scenarioOutline": [
+ "Սցենարի կառուցվացքը"
+ ],
+ "then": [
+ "* ",
+ "Ապա "
+ ],
+ "when": [
+ "* ",
+ "Եթե ",
+ "Երբ "
+ ]
+ },
+ "an": {
+ "and": [
+ "* ",
+ "Y ",
+ "E "
+ ],
+ "background": [
+ "Antecedents"
+ ],
+ "but": [
+ "* ",
+ "Pero "
+ ],
+ "examples": [
+ "Eixemplos"
+ ],
+ "feature": [
+ "Caracteristica"
+ ],
+ "given": [
+ "* ",
+ "Dau ",
+ "Dada ",
+ "Daus ",
+ "Dadas "
+ ],
+ "name": "Aragonese",
+ "native": "Aragonés",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Eixemplo",
+ "Caso"
+ ],
+ "scenarioOutline": [
+ "Esquema del caso"
+ ],
+ "then": [
+ "* ",
+ "Alavez ",
+ "Allora ",
+ "Antonces "
+ ],
+ "when": [
+ "* ",
+ "Cuan "
+ ]
+ },
+ "ar": {
+ "and": [
+ "* ",
+ "و "
+ ],
+ "background": [
+ "الخلفية"
+ ],
+ "but": [
+ "* ",
+ "لكن "
+ ],
+ "examples": [
+ "امثلة"
+ ],
+ "feature": [
+ "خاصية"
+ ],
+ "given": [
+ "* ",
+ "بفرض "
+ ],
+ "name": "Arabic",
+ "native": "العربية",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "مثال",
+ "سيناريو"
+ ],
+ "scenarioOutline": [
+ "سيناريو مخطط"
+ ],
+ "then": [
+ "* ",
+ "اذاً ",
+ "ثم "
+ ],
+ "when": [
+ "* ",
+ "متى ",
+ "عندما "
+ ]
+ },
+ "ast": {
+ "and": [
+ "* ",
+ "Y ",
+ "Ya "
+ ],
+ "background": [
+ "Antecedentes"
+ ],
+ "but": [
+ "* ",
+ "Peru "
+ ],
+ "examples": [
+ "Exemplos"
+ ],
+ "feature": [
+ "Carauterística"
+ ],
+ "given": [
+ "* ",
+ "Dáu ",
+ "Dada ",
+ "Daos ",
+ "Daes "
+ ],
+ "name": "Asturian",
+ "native": "asturianu",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Exemplo",
+ "Casu"
+ ],
+ "scenarioOutline": [
+ "Esbozu del casu"
+ ],
+ "then": [
+ "* ",
+ "Entós "
+ ],
+ "when": [
+ "* ",
+ "Cuando "
+ ]
+ },
+ "az": {
+ "and": [
+ "* ",
+ "Və ",
+ "Həm "
+ ],
+ "background": [
+ "Keçmiş",
+ "Kontekst"
+ ],
+ "but": [
+ "* ",
+ "Amma ",
+ "Ancaq "
+ ],
+ "examples": [
+ "Nümunələr"
+ ],
+ "feature": [
+ "Özəllik"
+ ],
+ "given": [
+ "* ",
+ "Tutaq ki ",
+ "Verilir "
+ ],
+ "name": "Azerbaijani",
+ "native": "Azərbaycanca",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Nümunə",
+ "Ssenari"
+ ],
+ "scenarioOutline": [
+ "Ssenarinin strukturu"
+ ],
+ "then": [
+ "* ",
+ "O halda "
+ ],
+ "when": [
+ "* ",
+ "Əgər ",
+ "Nə vaxt ki "
+ ]
+ },
+ "bg": {
+ "and": [
+ "* ",
+ "И "
+ ],
+ "background": [
+ "Предистория"
+ ],
+ "but": [
+ "* ",
+ "Но "
+ ],
+ "examples": [
+ "Примери"
+ ],
+ "feature": [
+ "Функционалност"
+ ],
+ "given": [
+ "* ",
+ "Дадено "
+ ],
+ "name": "Bulgarian",
+ "native": "български",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Пример",
+ "Сценарий"
+ ],
+ "scenarioOutline": [
+ "Рамка на сценарий"
+ ],
+ "then": [
+ "* ",
+ "То "
+ ],
+ "when": [
+ "* ",
+ "Когато "
+ ]
+ },
+ "bm": {
+ "and": [
+ "* ",
+ "Dan "
+ ],
+ "background": [
+ "Latar Belakang"
+ ],
+ "but": [
+ "* ",
+ "Tetapi ",
+ "Tapi "
+ ],
+ "examples": [
+ "Contoh"
+ ],
+ "feature": [
+ "Fungsi"
+ ],
+ "given": [
+ "* ",
+ "Diberi ",
+ "Bagi "
+ ],
+ "name": "Malay",
+ "native": "Bahasa Melayu",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Senario",
+ "Situasi",
+ "Keadaan"
+ ],
+ "scenarioOutline": [
+ "Kerangka Senario",
+ "Kerangka Situasi",
+ "Kerangka Keadaan",
+ "Garis Panduan Senario"
+ ],
+ "then": [
+ "* ",
+ "Maka ",
+ "Kemudian "
+ ],
+ "when": [
+ "* ",
+ "Apabila "
+ ]
+ },
+ "bs": {
+ "and": [
+ "* ",
+ "I ",
+ "A "
+ ],
+ "background": [
+ "Pozadina"
+ ],
+ "but": [
+ "* ",
+ "Ali "
+ ],
+ "examples": [
+ "Primjeri"
+ ],
+ "feature": [
+ "Karakteristika"
+ ],
+ "given": [
+ "* ",
+ "Dato "
+ ],
+ "name": "Bosnian",
+ "native": "Bosanski",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Primjer",
+ "Scenariju",
+ "Scenario"
+ ],
+ "scenarioOutline": [
+ "Scenariju-obris",
+ "Scenario-outline"
+ ],
+ "then": [
+ "* ",
+ "Zatim "
+ ],
+ "when": [
+ "* ",
+ "Kada "
+ ]
+ },
+ "ca": {
+ "and": [
+ "* ",
+ "I "
+ ],
+ "background": [
+ "Rerefons",
+ "Antecedents"
+ ],
+ "but": [
+ "* ",
+ "Però "
+ ],
+ "examples": [
+ "Exemples"
+ ],
+ "feature": [
+ "Característica",
+ "Funcionalitat"
+ ],
+ "given": [
+ "* ",
+ "Donat ",
+ "Donada ",
+ "Atès ",
+ "Atesa "
+ ],
+ "name": "Catalan",
+ "native": "català",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Exemple",
+ "Escenari"
+ ],
+ "scenarioOutline": [
+ "Esquema de l'escenari"
+ ],
+ "then": [
+ "* ",
+ "Aleshores ",
+ "Cal "
+ ],
+ "when": [
+ "* ",
+ "Quan "
+ ]
+ },
+ "cs": {
+ "and": [
+ "* ",
+ "A také ",
+ "A "
+ ],
+ "background": [
+ "Pozadí",
+ "Kontext"
+ ],
+ "but": [
+ "* ",
+ "Ale "
+ ],
+ "examples": [
+ "Příklady"
+ ],
+ "feature": [
+ "Požadavek"
+ ],
+ "given": [
+ "* ",
+ "Pokud ",
+ "Za předpokladu "
+ ],
+ "name": "Czech",
+ "native": "Česky",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Příklad",
+ "Scénář"
+ ],
+ "scenarioOutline": [
+ "Náčrt Scénáře",
+ "Osnova scénáře"
+ ],
+ "then": [
+ "* ",
+ "Pak "
+ ],
+ "when": [
+ "* ",
+ "Když "
+ ]
+ },
+ "cy-GB": {
+ "and": [
+ "* ",
+ "A "
+ ],
+ "background": [
+ "Cefndir"
+ ],
+ "but": [
+ "* ",
+ "Ond "
+ ],
+ "examples": [
+ "Enghreifftiau"
+ ],
+ "feature": [
+ "Arwedd"
+ ],
+ "given": [
+ "* ",
+ "Anrhegedig a "
+ ],
+ "name": "Welsh",
+ "native": "Cymraeg",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Enghraifft",
+ "Scenario"
+ ],
+ "scenarioOutline": [
+ "Scenario Amlinellol"
+ ],
+ "then": [
+ "* ",
+ "Yna "
+ ],
+ "when": [
+ "* ",
+ "Pryd "
+ ]
+ },
+ "da": {
+ "and": [
+ "* ",
+ "Og "
+ ],
+ "background": [
+ "Baggrund"
+ ],
+ "but": [
+ "* ",
+ "Men "
+ ],
+ "examples": [
+ "Eksempler"
+ ],
+ "feature": [
+ "Egenskab"
+ ],
+ "given": [
+ "* ",
+ "Givet "
+ ],
+ "name": "Danish",
+ "native": "dansk",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Eksempel",
+ "Scenarie"
+ ],
+ "scenarioOutline": [
+ "Abstrakt Scenario"
+ ],
+ "then": [
+ "* ",
+ "Så "
+ ],
+ "when": [
+ "* ",
+ "Når "
+ ]
+ },
+ "de": {
+ "and": [
+ "* ",
+ "Und "
+ ],
+ "background": [
+ "Grundlage",
+ "Hintergrund",
+ "Voraussetzungen",
+ "Vorbedingungen"
+ ],
+ "but": [
+ "* ",
+ "Aber "
+ ],
+ "examples": [
+ "Beispiele"
+ ],
+ "feature": [
+ "Funktionalität",
+ "Funktion"
+ ],
+ "given": [
+ "* ",
+ "Angenommen ",
+ "Gegeben sei ",
+ "Gegeben seien "
+ ],
+ "name": "German",
+ "native": "Deutsch",
+ "rule": [
+ "Rule",
+ "Regel"
+ ],
+ "scenario": [
+ "Beispiel",
+ "Szenario"
+ ],
+ "scenarioOutline": [
+ "Szenariogrundriss",
+ "Szenarien"
+ ],
+ "then": [
+ "* ",
+ "Dann "
+ ],
+ "when": [
+ "* ",
+ "Wenn "
+ ]
+ },
+ "el": {
+ "and": [
+ "* ",
+ "Και "
+ ],
+ "background": [
+ "Υπόβαθρο"
+ ],
+ "but": [
+ "* ",
+ "Αλλά "
+ ],
+ "examples": [
+ "Παραδείγματα",
+ "Σενάρια"
+ ],
+ "feature": [
+ "Δυνατότητα",
+ "Λειτουργία"
+ ],
+ "given": [
+ "* ",
+ "Δεδομένου "
+ ],
+ "name": "Greek",
+ "native": "Ελληνικά",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Παράδειγμα",
+ "Σενάριο"
+ ],
+ "scenarioOutline": [
+ "Περιγραφή Σεναρίου",
+ "Περίγραμμα Σεναρίου"
+ ],
+ "then": [
+ "* ",
+ "Τότε "
+ ],
+ "when": [
+ "* ",
+ "Όταν "
+ ]
+ },
+ "em": {
+ "and": [
+ "* ",
+ "😂"
+ ],
+ "background": [
+ "💤"
+ ],
+ "but": [
+ "* ",
+ "😔"
+ ],
+ "examples": [
+ "📓"
+ ],
+ "feature": [
+ "📚"
+ ],
+ "given": [
+ "* ",
+ "😐"
+ ],
+ "name": "Emoji",
+ "native": "😀",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "🥒",
+ "📕"
+ ],
+ "scenarioOutline": [
+ "📖"
+ ],
+ "then": [
+ "* ",
+ "🙏"
+ ],
+ "when": [
+ "* ",
+ "🎬"
+ ]
+ },
+ "en": {
+ "and": [
+ "* ",
+ "And "
+ ],
+ "background": [
+ "Background"
+ ],
+ "but": [
+ "* ",
+ "But "
+ ],
+ "examples": [
+ "Examples",
+ "Scenarios"
+ ],
+ "feature": [
+ "Feature",
+ "Business Need",
+ "Ability"
+ ],
+ "given": [
+ "* ",
+ "Given "
+ ],
+ "name": "English",
+ "native": "English",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Example",
+ "Scenario"
+ ],
+ "scenarioOutline": [
+ "Scenario Outline",
+ "Scenario Template"
+ ],
+ "then": [
+ "* ",
+ "Then "
+ ],
+ "when": [
+ "* ",
+ "When "
+ ]
+ },
+ "en-Scouse": {
+ "and": [
+ "* ",
+ "An "
+ ],
+ "background": [
+ "Dis is what went down"
+ ],
+ "but": [
+ "* ",
+ "Buh "
+ ],
+ "examples": [
+ "Examples"
+ ],
+ "feature": [
+ "Feature"
+ ],
+ "given": [
+ "* ",
+ "Givun ",
+ "Youse know when youse got "
+ ],
+ "name": "Scouse",
+ "native": "Scouse",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "The thing of it is"
+ ],
+ "scenarioOutline": [
+ "Wharrimean is"
+ ],
+ "then": [
+ "* ",
+ "Dun ",
+ "Den youse gotta "
+ ],
+ "when": [
+ "* ",
+ "Wun ",
+ "Youse know like when "
+ ]
+ },
+ "en-au": {
+ "and": [
+ "* ",
+ "Too right "
+ ],
+ "background": [
+ "First off"
+ ],
+ "but": [
+ "* ",
+ "Yeah nah "
+ ],
+ "examples": [
+ "You'll wanna"
+ ],
+ "feature": [
+ "Pretty much"
+ ],
+ "given": [
+ "* ",
+ "Y'know "
+ ],
+ "name": "Australian",
+ "native": "Australian",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Awww, look mate"
+ ],
+ "scenarioOutline": [
+ "Reckon it's like"
+ ],
+ "then": [
+ "* ",
+ "But at the end of the day I reckon "
+ ],
+ "when": [
+ "* ",
+ "It's just unbelievable "
+ ]
+ },
+ "en-lol": {
+ "and": [
+ "* ",
+ "AN "
+ ],
+ "background": [
+ "B4"
+ ],
+ "but": [
+ "* ",
+ "BUT "
+ ],
+ "examples": [
+ "EXAMPLZ"
+ ],
+ "feature": [
+ "OH HAI"
+ ],
+ "given": [
+ "* ",
+ "I CAN HAZ "
+ ],
+ "name": "LOLCAT",
+ "native": "LOLCAT",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "MISHUN"
+ ],
+ "scenarioOutline": [
+ "MISHUN SRSLY"
+ ],
+ "then": [
+ "* ",
+ "DEN "
+ ],
+ "when": [
+ "* ",
+ "WEN "
+ ]
+ },
+ "en-old": {
+ "and": [
+ "* ",
+ "Ond ",
+ "7 "
+ ],
+ "background": [
+ "Aer",
+ "Ær"
+ ],
+ "but": [
+ "* ",
+ "Ac "
+ ],
+ "examples": [
+ "Se the",
+ "Se þe",
+ "Se ðe"
+ ],
+ "feature": [
+ "Hwaet",
+ "Hwæt"
+ ],
+ "given": [
+ "* ",
+ "Thurh ",
+ "Þurh ",
+ "Ðurh "
+ ],
+ "name": "Old English",
+ "native": "Englisc",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Swa"
+ ],
+ "scenarioOutline": [
+ "Swa hwaer swa",
+ "Swa hwær swa"
+ ],
+ "then": [
+ "* ",
+ "Tha ",
+ "Þa ",
+ "Ða ",
+ "Tha the ",
+ "Þa þe ",
+ "Ða ðe "
+ ],
+ "when": [
+ "* ",
+ "Tha ",
+ "Þa ",
+ "Ða "
+ ]
+ },
+ "en-pirate": {
+ "and": [
+ "* ",
+ "Aye "
+ ],
+ "background": [
+ "Yo-ho-ho"
+ ],
+ "but": [
+ "* ",
+ "Avast! "
+ ],
+ "examples": [
+ "Dead men tell no tales"
+ ],
+ "feature": [
+ "Ahoy matey!"
+ ],
+ "given": [
+ "* ",
+ "Gangway! "
+ ],
+ "name": "Pirate",
+ "native": "Pirate",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Heave to"
+ ],
+ "scenarioOutline": [
+ "Shiver me timbers"
+ ],
+ "then": [
+ "* ",
+ "Let go and haul "
+ ],
+ "when": [
+ "* ",
+ "Blimey! "
+ ]
+ },
+ "eo": {
+ "and": [
+ "* ",
+ "Kaj "
+ ],
+ "background": [
+ "Fono"
+ ],
+ "but": [
+ "* ",
+ "Sed "
+ ],
+ "examples": [
+ "Ekzemploj"
+ ],
+ "feature": [
+ "Trajto"
+ ],
+ "given": [
+ "* ",
+ "Donitaĵo ",
+ "Komence "
+ ],
+ "name": "Esperanto",
+ "native": "Esperanto",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Ekzemplo",
+ "Scenaro",
+ "Kazo"
+ ],
+ "scenarioOutline": [
+ "Konturo de la scenaro",
+ "Skizo",
+ "Kazo-skizo"
+ ],
+ "then": [
+ "* ",
+ "Do "
+ ],
+ "when": [
+ "* ",
+ "Se "
+ ]
+ },
+ "es": {
+ "and": [
+ "* ",
+ "Y ",
+ "E "
+ ],
+ "background": [
+ "Antecedentes"
+ ],
+ "but": [
+ "* ",
+ "Pero "
+ ],
+ "examples": [
+ "Ejemplos"
+ ],
+ "feature": [
+ "Característica"
+ ],
+ "given": [
+ "* ",
+ "Dado ",
+ "Dada ",
+ "Dados ",
+ "Dadas "
+ ],
+ "name": "Spanish",
+ "native": "español",
+ "rule": [
+ "Regla"
+ ],
+ "scenario": [
+ "Ejemplo",
+ "Escenario"
+ ],
+ "scenarioOutline": [
+ "Esquema del escenario"
+ ],
+ "then": [
+ "* ",
+ "Entonces "
+ ],
+ "when": [
+ "* ",
+ "Cuando "
+ ]
+ },
+ "et": {
+ "and": [
+ "* ",
+ "Ja "
+ ],
+ "background": [
+ "Taust"
+ ],
+ "but": [
+ "* ",
+ "Kuid "
+ ],
+ "examples": [
+ "Juhtumid"
+ ],
+ "feature": [
+ "Omadus"
+ ],
+ "given": [
+ "* ",
+ "Eeldades "
+ ],
+ "name": "Estonian",
+ "native": "eesti keel",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Juhtum",
+ "Stsenaarium"
+ ],
+ "scenarioOutline": [
+ "Raamstjuhtum",
+ "Raamstsenaarium"
+ ],
+ "then": [
+ "* ",
+ "Siis "
+ ],
+ "when": [
+ "* ",
+ "Kui "
+ ]
+ },
+ "fa": {
+ "and": [
+ "* ",
+ "و "
+ ],
+ "background": [
+ "زمینه"
+ ],
+ "but": [
+ "* ",
+ "اما "
+ ],
+ "examples": [
+ "نمونه ها"
+ ],
+ "feature": [
+ "وِیژگی"
+ ],
+ "given": [
+ "* ",
+ "با فرض "
+ ],
+ "name": "Persian",
+ "native": "فارسی",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "مثال",
+ "سناریو"
+ ],
+ "scenarioOutline": [
+ "الگوی سناریو"
+ ],
+ "then": [
+ "* ",
+ "آنگاه "
+ ],
+ "when": [
+ "* ",
+ "هنگامی "
+ ]
+ },
+ "fi": {
+ "and": [
+ "* ",
+ "Ja "
+ ],
+ "background": [
+ "Tausta"
+ ],
+ "but": [
+ "* ",
+ "Mutta "
+ ],
+ "examples": [
+ "Tapaukset"
+ ],
+ "feature": [
+ "Ominaisuus"
+ ],
+ "given": [
+ "* ",
+ "Oletetaan "
+ ],
+ "name": "Finnish",
+ "native": "suomi",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Tapaus"
+ ],
+ "scenarioOutline": [
+ "Tapausaihio"
+ ],
+ "then": [
+ "* ",
+ "Niin "
+ ],
+ "when": [
+ "* ",
+ "Kun "
+ ]
+ },
+ "fr": {
+ "and": [
+ "* ",
+ "Et que ",
+ "Et qu'",
+ "Et "
+ ],
+ "background": [
+ "Contexte"
+ ],
+ "but": [
+ "* ",
+ "Mais que ",
+ "Mais qu'",
+ "Mais "
+ ],
+ "examples": [
+ "Exemples"
+ ],
+ "feature": [
+ "Fonctionnalité"
+ ],
+ "given": [
+ "* ",
+ "Soit ",
+ "Sachant que ",
+ "Sachant qu'",
+ "Sachant ",
+ "Etant donné que ",
+ "Etant donné qu'",
+ "Etant donné ",
+ "Etant donnée ",
+ "Etant donnés ",
+ "Etant données ",
+ "Étant donné que ",
+ "Étant donné qu'",
+ "Étant donné ",
+ "Étant donnée ",
+ "Étant donnés ",
+ "Étant données "
+ ],
+ "name": "French",
+ "native": "français",
+ "rule": [
+ "Règle"
+ ],
+ "scenario": [
+ "Exemple",
+ "Scénario"
+ ],
+ "scenarioOutline": [
+ "Plan du scénario",
+ "Plan du Scénario"
+ ],
+ "then": [
+ "* ",
+ "Alors ",
+ "Donc "
+ ],
+ "when": [
+ "* ",
+ "Quand ",
+ "Lorsque ",
+ "Lorsqu'"
+ ]
+ },
+ "ga": {
+ "and": [
+ "* ",
+ "Agus"
+ ],
+ "background": [
+ "Cúlra"
+ ],
+ "but": [
+ "* ",
+ "Ach"
+ ],
+ "examples": [
+ "Samplaí"
+ ],
+ "feature": [
+ "Gné"
+ ],
+ "given": [
+ "* ",
+ "Cuir i gcás go",
+ "Cuir i gcás nach",
+ "Cuir i gcás gur",
+ "Cuir i gcás nár"
+ ],
+ "name": "Irish",
+ "native": "Gaeilge",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Sampla",
+ "Cás"
+ ],
+ "scenarioOutline": [
+ "Cás Achomair"
+ ],
+ "then": [
+ "* ",
+ "Ansin"
+ ],
+ "when": [
+ "* ",
+ "Nuair a",
+ "Nuair nach",
+ "Nuair ba",
+ "Nuair nár"
+ ]
+ },
+ "gj": {
+ "and": [
+ "* ",
+ "અને "
+ ],
+ "background": [
+ "બેકગ્રાઉન્ડ"
+ ],
+ "but": [
+ "* ",
+ "પણ "
+ ],
+ "examples": [
+ "ઉદાહરણો"
+ ],
+ "feature": [
+ "લક્ષણ",
+ "વ્યાપાર જરૂર",
+ "ક્ષમતા"
+ ],
+ "given": [
+ "* ",
+ "આપેલ છે "
+ ],
+ "name": "Gujarati",
+ "native": "ગુજરાતી",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "ઉદાહરણ",
+ "સ્થિતિ"
+ ],
+ "scenarioOutline": [
+ "પરિદ્દશ્ય રૂપરેખા",
+ "પરિદ્દશ્ય ઢાંચો"
+ ],
+ "then": [
+ "* ",
+ "પછી "
+ ],
+ "when": [
+ "* ",
+ "ક્યારે "
+ ]
+ },
+ "gl": {
+ "and": [
+ "* ",
+ "E "
+ ],
+ "background": [
+ "Contexto"
+ ],
+ "but": [
+ "* ",
+ "Mais ",
+ "Pero "
+ ],
+ "examples": [
+ "Exemplos"
+ ],
+ "feature": [
+ "Característica"
+ ],
+ "given": [
+ "* ",
+ "Dado ",
+ "Dada ",
+ "Dados ",
+ "Dadas "
+ ],
+ "name": "Galician",
+ "native": "galego",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Exemplo",
+ "Escenario"
+ ],
+ "scenarioOutline": [
+ "Esbozo do escenario"
+ ],
+ "then": [
+ "* ",
+ "Entón ",
+ "Logo "
+ ],
+ "when": [
+ "* ",
+ "Cando "
+ ]
+ },
+ "he": {
+ "and": [
+ "* ",
+ "וגם "
+ ],
+ "background": [
+ "רקע"
+ ],
+ "but": [
+ "* ",
+ "אבל "
+ ],
+ "examples": [
+ "דוגמאות"
+ ],
+ "feature": [
+ "תכונה"
+ ],
+ "given": [
+ "* ",
+ "בהינתן "
+ ],
+ "name": "Hebrew",
+ "native": "עברית",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "דוגמא",
+ "תרחיש"
+ ],
+ "scenarioOutline": [
+ "תבנית תרחיש"
+ ],
+ "then": [
+ "* ",
+ "אז ",
+ "אזי "
+ ],
+ "when": [
+ "* ",
+ "כאשר "
+ ]
+ },
+ "hi": {
+ "and": [
+ "* ",
+ "और ",
+ "तथा "
+ ],
+ "background": [
+ "पृष्ठभूमि"
+ ],
+ "but": [
+ "* ",
+ "पर ",
+ "परन्तु ",
+ "किन्तु "
+ ],
+ "examples": [
+ "उदाहरण"
+ ],
+ "feature": [
+ "रूप लेख"
+ ],
+ "given": [
+ "* ",
+ "अगर ",
+ "यदि ",
+ "चूंकि "
+ ],
+ "name": "Hindi",
+ "native": "हिंदी",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "परिदृश्य"
+ ],
+ "scenarioOutline": [
+ "परिदृश्य रूपरेखा"
+ ],
+ "then": [
+ "* ",
+ "तब ",
+ "तदा "
+ ],
+ "when": [
+ "* ",
+ "जब ",
+ "कदा "
+ ]
+ },
+ "hr": {
+ "and": [
+ "* ",
+ "I "
+ ],
+ "background": [
+ "Pozadina"
+ ],
+ "but": [
+ "* ",
+ "Ali "
+ ],
+ "examples": [
+ "Primjeri",
+ "Scenariji"
+ ],
+ "feature": [
+ "Osobina",
+ "Mogućnost",
+ "Mogucnost"
+ ],
+ "given": [
+ "* ",
+ "Zadan ",
+ "Zadani ",
+ "Zadano ",
+ "Ukoliko "
+ ],
+ "name": "Croatian",
+ "native": "hrvatski",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Primjer",
+ "Scenarij"
+ ],
+ "scenarioOutline": [
+ "Skica",
+ "Koncept"
+ ],
+ "then": [
+ "* ",
+ "Onda "
+ ],
+ "when": [
+ "* ",
+ "Kada ",
+ "Kad "
+ ]
+ },
+ "ht": {
+ "and": [
+ "* ",
+ "Ak ",
+ "Epi ",
+ "E "
+ ],
+ "background": [
+ "Kontèks",
+ "Istorik"
+ ],
+ "but": [
+ "* ",
+ "Men "
+ ],
+ "examples": [
+ "Egzanp"
+ ],
+ "feature": [
+ "Karakteristik",
+ "Mak",
+ "Fonksyonalite"
+ ],
+ "given": [
+ "* ",
+ "Sipoze ",
+ "Sipoze ke ",
+ "Sipoze Ke "
+ ],
+ "name": "Creole",
+ "native": "kreyòl",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Senaryo"
+ ],
+ "scenarioOutline": [
+ "Plan senaryo",
+ "Plan Senaryo",
+ "Senaryo deskripsyon",
+ "Senaryo Deskripsyon",
+ "Dyagram senaryo",
+ "Dyagram Senaryo"
+ ],
+ "then": [
+ "* ",
+ "Lè sa a ",
+ "Le sa a "
+ ],
+ "when": [
+ "* ",
+ "Lè ",
+ "Le "
+ ]
+ },
+ "hu": {
+ "and": [
+ "* ",
+ "És "
+ ],
+ "background": [
+ "Háttér"
+ ],
+ "but": [
+ "* ",
+ "De "
+ ],
+ "examples": [
+ "Példák"
+ ],
+ "feature": [
+ "Jellemző"
+ ],
+ "given": [
+ "* ",
+ "Amennyiben ",
+ "Adott "
+ ],
+ "name": "Hungarian",
+ "native": "magyar",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Példa",
+ "Forgatókönyv"
+ ],
+ "scenarioOutline": [
+ "Forgatókönyv vázlat"
+ ],
+ "then": [
+ "* ",
+ "Akkor "
+ ],
+ "when": [
+ "* ",
+ "Majd ",
+ "Ha ",
+ "Amikor "
+ ]
+ },
+ "id": {
+ "and": [
+ "* ",
+ "Dan "
+ ],
+ "background": [
+ "Dasar",
+ "Latar Belakang"
+ ],
+ "but": [
+ "* ",
+ "Tapi ",
+ "Tetapi "
+ ],
+ "examples": [
+ "Contoh",
+ "Misal"
+ ],
+ "feature": [
+ "Fitur"
+ ],
+ "given": [
+ "* ",
+ "Dengan ",
+ "Diketahui ",
+ "Diasumsikan ",
+ "Bila ",
+ "Jika "
+ ],
+ "name": "Indonesian",
+ "native": "Bahasa Indonesia",
+ "rule": [
+ "Rule",
+ "Aturan"
+ ],
+ "scenario": [
+ "Skenario"
+ ],
+ "scenarioOutline": [
+ "Skenario konsep",
+ "Garis-Besar Skenario"
+ ],
+ "then": [
+ "* ",
+ "Maka ",
+ "Kemudian "
+ ],
+ "when": [
+ "* ",
+ "Ketika "
+ ]
+ },
+ "is": {
+ "and": [
+ "* ",
+ "Og "
+ ],
+ "background": [
+ "Bakgrunnur"
+ ],
+ "but": [
+ "* ",
+ "En "
+ ],
+ "examples": [
+ "Dæmi",
+ "Atburðarásir"
+ ],
+ "feature": [
+ "Eiginleiki"
+ ],
+ "given": [
+ "* ",
+ "Ef "
+ ],
+ "name": "Icelandic",
+ "native": "Íslenska",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Atburðarás"
+ ],
+ "scenarioOutline": [
+ "Lýsing Atburðarásar",
+ "Lýsing Dæma"
+ ],
+ "then": [
+ "* ",
+ "Þá "
+ ],
+ "when": [
+ "* ",
+ "Þegar "
+ ]
+ },
+ "it": {
+ "and": [
+ "* ",
+ "E "
+ ],
+ "background": [
+ "Contesto"
+ ],
+ "but": [
+ "* ",
+ "Ma "
+ ],
+ "examples": [
+ "Esempi"
+ ],
+ "feature": [
+ "Funzionalità"
+ ],
+ "given": [
+ "* ",
+ "Dato ",
+ "Data ",
+ "Dati ",
+ "Date "
+ ],
+ "name": "Italian",
+ "native": "italiano",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Esempio",
+ "Scenario"
+ ],
+ "scenarioOutline": [
+ "Schema dello scenario"
+ ],
+ "then": [
+ "* ",
+ "Allora "
+ ],
+ "when": [
+ "* ",
+ "Quando "
+ ]
+ },
+ "ja": {
+ "and": [
+ "* ",
+ "かつ"
+ ],
+ "background": [
+ "背景"
+ ],
+ "but": [
+ "* ",
+ "しかし",
+ "但し",
+ "ただし"
+ ],
+ "examples": [
+ "例",
+ "サンプル"
+ ],
+ "feature": [
+ "フィーチャ",
+ "機能"
+ ],
+ "given": [
+ "* ",
+ "前提"
+ ],
+ "name": "Japanese",
+ "native": "日本語",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "シナリオ"
+ ],
+ "scenarioOutline": [
+ "シナリオアウトライン",
+ "シナリオテンプレート",
+ "テンプレ",
+ "シナリオテンプレ"
+ ],
+ "then": [
+ "* ",
+ "ならば"
+ ],
+ "when": [
+ "* ",
+ "もし"
+ ]
+ },
+ "jv": {
+ "and": [
+ "* ",
+ "Lan "
+ ],
+ "background": [
+ "Dasar"
+ ],
+ "but": [
+ "* ",
+ "Tapi ",
+ "Nanging ",
+ "Ananging "
+ ],
+ "examples": [
+ "Conto",
+ "Contone"
+ ],
+ "feature": [
+ "Fitur"
+ ],
+ "given": [
+ "* ",
+ "Nalika ",
+ "Nalikaning "
+ ],
+ "name": "Javanese",
+ "native": "Basa Jawa",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Skenario"
+ ],
+ "scenarioOutline": [
+ "Konsep skenario"
+ ],
+ "then": [
+ "* ",
+ "Njuk ",
+ "Banjur "
+ ],
+ "when": [
+ "* ",
+ "Manawa ",
+ "Menawa "
+ ]
+ },
+ "ka": {
+ "and": [
+ "* ",
+ "და"
+ ],
+ "background": [
+ "კონტექსტი"
+ ],
+ "but": [
+ "* ",
+ "მაგრამ"
+ ],
+ "examples": [
+ "მაგალითები"
+ ],
+ "feature": [
+ "თვისება"
+ ],
+ "given": [
+ "* ",
+ "მოცემული"
+ ],
+ "name": "Georgian",
+ "native": "ქართველი",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "მაგალითად",
+ "სცენარის"
+ ],
+ "scenarioOutline": [
+ "სცენარის ნიმუში"
+ ],
+ "then": [
+ "* ",
+ "მაშინ"
+ ],
+ "when": [
+ "* ",
+ "როდესაც"
+ ]
+ },
+ "kn": {
+ "and": [
+ "* ",
+ "ಮತ್ತು "
+ ],
+ "background": [
+ "ಹಿನ್ನೆಲೆ"
+ ],
+ "but": [
+ "* ",
+ "ಆದರೆ "
+ ],
+ "examples": [
+ "ಉದಾಹರಣೆಗಳು"
+ ],
+ "feature": [
+ "ಹೆಚ್ಚಳ"
+ ],
+ "given": [
+ "* ",
+ "ನೀಡಿದ "
+ ],
+ "name": "Kannada",
+ "native": "ಕನ್ನಡ",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "ಉದಾಹರಣೆ",
+ "ಕಥಾಸಾರಾಂಶ"
+ ],
+ "scenarioOutline": [
+ "ವಿವರಣೆ"
+ ],
+ "then": [
+ "* ",
+ "ನಂತರ "
+ ],
+ "when": [
+ "* ",
+ "ಸ್ಥಿತಿಯನ್ನು "
+ ]
+ },
+ "ko": {
+ "and": [
+ "* ",
+ "그리고"
+ ],
+ "background": [
+ "배경"
+ ],
+ "but": [
+ "* ",
+ "하지만",
+ "단"
+ ],
+ "examples": [
+ "예"
+ ],
+ "feature": [
+ "기능"
+ ],
+ "given": [
+ "* ",
+ "조건",
+ "먼저"
+ ],
+ "name": "Korean",
+ "native": "한국어",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "시나리오"
+ ],
+ "scenarioOutline": [
+ "시나리오 개요"
+ ],
+ "then": [
+ "* ",
+ "그러면"
+ ],
+ "when": [
+ "* ",
+ "만일",
+ "만약"
+ ]
+ },
+ "lt": {
+ "and": [
+ "* ",
+ "Ir "
+ ],
+ "background": [
+ "Kontekstas"
+ ],
+ "but": [
+ "* ",
+ "Bet "
+ ],
+ "examples": [
+ "Pavyzdžiai",
+ "Scenarijai",
+ "Variantai"
+ ],
+ "feature": [
+ "Savybė"
+ ],
+ "given": [
+ "* ",
+ "Duota "
+ ],
+ "name": "Lithuanian",
+ "native": "lietuvių kalba",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Pavyzdys",
+ "Scenarijus"
+ ],
+ "scenarioOutline": [
+ "Scenarijaus šablonas"
+ ],
+ "then": [
+ "* ",
+ "Tada "
+ ],
+ "when": [
+ "* ",
+ "Kai "
+ ]
+ },
+ "lu": {
+ "and": [
+ "* ",
+ "an ",
+ "a "
+ ],
+ "background": [
+ "Hannergrond"
+ ],
+ "but": [
+ "* ",
+ "awer ",
+ "mä "
+ ],
+ "examples": [
+ "Beispiller"
+ ],
+ "feature": [
+ "Funktionalitéit"
+ ],
+ "given": [
+ "* ",
+ "ugeholl "
+ ],
+ "name": "Luxemburgish",
+ "native": "Lëtzebuergesch",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Beispill",
+ "Szenario"
+ ],
+ "scenarioOutline": [
+ "Plang vum Szenario"
+ ],
+ "then": [
+ "* ",
+ "dann "
+ ],
+ "when": [
+ "* ",
+ "wann "
+ ]
+ },
+ "lv": {
+ "and": [
+ "* ",
+ "Un "
+ ],
+ "background": [
+ "Konteksts",
+ "Situācija"
+ ],
+ "but": [
+ "* ",
+ "Bet "
+ ],
+ "examples": [
+ "Piemēri",
+ "Paraugs"
+ ],
+ "feature": [
+ "Funkcionalitāte",
+ "Fīča"
+ ],
+ "given": [
+ "* ",
+ "Kad "
+ ],
+ "name": "Latvian",
+ "native": "latviešu",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Piemērs",
+ "Scenārijs"
+ ],
+ "scenarioOutline": [
+ "Scenārijs pēc parauga"
+ ],
+ "then": [
+ "* ",
+ "Tad "
+ ],
+ "when": [
+ "* ",
+ "Ja "
+ ]
+ },
+ "mk-Cyrl": {
+ "and": [
+ "* ",
+ "И "
+ ],
+ "background": [
+ "Контекст",
+ "Содржина"
+ ],
+ "but": [
+ "* ",
+ "Но "
+ ],
+ "examples": [
+ "Примери",
+ "Сценарија"
+ ],
+ "feature": [
+ "Функционалност",
+ "Бизнис потреба",
+ "Можност"
+ ],
+ "given": [
+ "* ",
+ "Дадено ",
+ "Дадена "
+ ],
+ "name": "Macedonian",
+ "native": "Македонски",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Пример",
+ "Сценарио",
+ "На пример"
+ ],
+ "scenarioOutline": [
+ "Преглед на сценарија",
+ "Скица",
+ "Концепт"
+ ],
+ "then": [
+ "* ",
+ "Тогаш "
+ ],
+ "when": [
+ "* ",
+ "Кога "
+ ]
+ },
+ "mk-Latn": {
+ "and": [
+ "* ",
+ "I "
+ ],
+ "background": [
+ "Kontekst",
+ "Sodrzhina"
+ ],
+ "but": [
+ "* ",
+ "No "
+ ],
+ "examples": [
+ "Primeri",
+ "Scenaria"
+ ],
+ "feature": [
+ "Funkcionalnost",
+ "Biznis potreba",
+ "Mozhnost"
+ ],
+ "given": [
+ "* ",
+ "Dadeno ",
+ "Dadena "
+ ],
+ "name": "Macedonian (Latin)",
+ "native": "Makedonski (Latinica)",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Scenario",
+ "Na primer"
+ ],
+ "scenarioOutline": [
+ "Pregled na scenarija",
+ "Skica",
+ "Koncept"
+ ],
+ "then": [
+ "* ",
+ "Togash "
+ ],
+ "when": [
+ "* ",
+ "Koga "
+ ]
+ },
+ "mn": {
+ "and": [
+ "* ",
+ "Мөн ",
+ "Тэгээд "
+ ],
+ "background": [
+ "Агуулга"
+ ],
+ "but": [
+ "* ",
+ "Гэхдээ ",
+ "Харин "
+ ],
+ "examples": [
+ "Тухайлбал"
+ ],
+ "feature": [
+ "Функц",
+ "Функционал"
+ ],
+ "given": [
+ "* ",
+ "Өгөгдсөн нь ",
+ "Анх "
+ ],
+ "name": "Mongolian",
+ "native": "монгол",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Сценар"
+ ],
+ "scenarioOutline": [
+ "Сценарын төлөвлөгөө"
+ ],
+ "then": [
+ "* ",
+ "Тэгэхэд ",
+ "Үүний дараа "
+ ],
+ "when": [
+ "* ",
+ "Хэрэв "
+ ]
+ },
+ "ne": {
+ "and": [
+ "* ",
+ "र ",
+ "अनी "
+ ],
+ "background": [
+ "पृष्ठभूमी"
+ ],
+ "but": [
+ "* ",
+ "तर "
+ ],
+ "examples": [
+ "उदाहरण",
+ "उदाहरणहरु"
+ ],
+ "feature": [
+ "सुविधा",
+ "विशेषता"
+ ],
+ "given": [
+ "* ",
+ "दिइएको ",
+ "दिएको ",
+ "यदि "
+ ],
+ "name": "Nepali",
+ "native": "नेपाली",
+ "rule": [
+ "नियम"
+ ],
+ "scenario": [
+ "परिदृश्य"
+ ],
+ "scenarioOutline": [
+ "परिदृश्य रूपरेखा"
+ ],
+ "then": [
+ "* ",
+ "त्यसपछि ",
+ "अनी "
+ ],
+ "when": [
+ "* ",
+ "जब "
+ ]
+ },
+ "nl": {
+ "and": [
+ "* ",
+ "En "
+ ],
+ "background": [
+ "Achtergrond"
+ ],
+ "but": [
+ "* ",
+ "Maar "
+ ],
+ "examples": [
+ "Voorbeelden"
+ ],
+ "feature": [
+ "Functionaliteit"
+ ],
+ "given": [
+ "* ",
+ "Gegeven ",
+ "Stel "
+ ],
+ "name": "Dutch",
+ "native": "Nederlands",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Voorbeeld",
+ "Scenario"
+ ],
+ "scenarioOutline": [
+ "Abstract Scenario"
+ ],
+ "then": [
+ "* ",
+ "Dan "
+ ],
+ "when": [
+ "* ",
+ "Als ",
+ "Wanneer "
+ ]
+ },
+ "no": {
+ "and": [
+ "* ",
+ "Og "
+ ],
+ "background": [
+ "Bakgrunn"
+ ],
+ "but": [
+ "* ",
+ "Men "
+ ],
+ "examples": [
+ "Eksempler"
+ ],
+ "feature": [
+ "Egenskap"
+ ],
+ "given": [
+ "* ",
+ "Gitt "
+ ],
+ "name": "Norwegian",
+ "native": "norsk",
+ "rule": [
+ "Regel"
+ ],
+ "scenario": [
+ "Eksempel",
+ "Scenario"
+ ],
+ "scenarioOutline": [
+ "Scenariomal",
+ "Abstrakt Scenario"
+ ],
+ "then": [
+ "* ",
+ "Så "
+ ],
+ "when": [
+ "* ",
+ "Når "
+ ]
+ },
+ "pa": {
+ "and": [
+ "* ",
+ "ਅਤੇ "
+ ],
+ "background": [
+ "ਪਿਛੋਕੜ"
+ ],
+ "but": [
+ "* ",
+ "ਪਰ "
+ ],
+ "examples": [
+ "ਉਦਾਹਰਨਾਂ"
+ ],
+ "feature": [
+ "ਖਾਸੀਅਤ",
+ "ਮੁਹਾਂਦਰਾ",
+ "ਨਕਸ਼ ਨੁਹਾਰ"
+ ],
+ "given": [
+ "* ",
+ "ਜੇਕਰ ",
+ "ਜਿਵੇਂ ਕਿ "
+ ],
+ "name": "Panjabi",
+ "native": "ਪੰਜਾਬੀ",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "ਉਦਾਹਰਨ",
+ "ਪਟਕਥਾ"
+ ],
+ "scenarioOutline": [
+ "ਪਟਕਥਾ ਢਾਂਚਾ",
+ "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ"
+ ],
+ "then": [
+ "* ",
+ "ਤਦ "
+ ],
+ "when": [
+ "* ",
+ "ਜਦੋਂ "
+ ]
+ },
+ "pl": {
+ "and": [
+ "* ",
+ "Oraz ",
+ "I "
+ ],
+ "background": [
+ "Założenia"
+ ],
+ "but": [
+ "* ",
+ "Ale "
+ ],
+ "examples": [
+ "Przykłady"
+ ],
+ "feature": [
+ "Właściwość",
+ "Funkcja",
+ "Aspekt",
+ "Potrzeba biznesowa"
+ ],
+ "given": [
+ "* ",
+ "Zakładając ",
+ "Mając ",
+ "Zakładając, że "
+ ],
+ "name": "Polish",
+ "native": "polski",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Przykład",
+ "Scenariusz"
+ ],
+ "scenarioOutline": [
+ "Szablon scenariusza"
+ ],
+ "then": [
+ "* ",
+ "Wtedy "
+ ],
+ "when": [
+ "* ",
+ "Jeżeli ",
+ "Jeśli ",
+ "Gdy ",
+ "Kiedy "
+ ]
+ },
+ "pt": {
+ "and": [
+ "* ",
+ "E "
+ ],
+ "background": [
+ "Contexto",
+ "Cenário de Fundo",
+ "Cenario de Fundo",
+ "Fundo"
+ ],
+ "but": [
+ "* ",
+ "Mas "
+ ],
+ "examples": [
+ "Exemplos",
+ "Cenários",
+ "Cenarios"
+ ],
+ "feature": [
+ "Funcionalidade",
+ "Característica",
+ "Caracteristica"
+ ],
+ "given": [
+ "* ",
+ "Dado ",
+ "Dada ",
+ "Dados ",
+ "Dadas "
+ ],
+ "name": "Portuguese",
+ "native": "português",
+ "rule": [
+ "Regra"
+ ],
+ "scenario": [
+ "Exemplo",
+ "Cenário",
+ "Cenario"
+ ],
+ "scenarioOutline": [
+ "Esquema do Cenário",
+ "Esquema do Cenario",
+ "Delineação do Cenário",
+ "Delineacao do Cenario"
+ ],
+ "then": [
+ "* ",
+ "Então ",
+ "Entao "
+ ],
+ "when": [
+ "* ",
+ "Quando "
+ ]
+ },
+ "ro": {
+ "and": [
+ "* ",
+ "Si ",
+ "Și ",
+ "Şi "
+ ],
+ "background": [
+ "Context"
+ ],
+ "but": [
+ "* ",
+ "Dar "
+ ],
+ "examples": [
+ "Exemple"
+ ],
+ "feature": [
+ "Functionalitate",
+ "Funcționalitate",
+ "Funcţionalitate"
+ ],
+ "given": [
+ "* ",
+ "Date fiind ",
+ "Dat fiind ",
+ "Dată fiind",
+ "Dati fiind ",
+ "Dați fiind ",
+ "Daţi fiind "
+ ],
+ "name": "Romanian",
+ "native": "română",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Exemplu",
+ "Scenariu"
+ ],
+ "scenarioOutline": [
+ "Structura scenariu",
+ "Structură scenariu"
+ ],
+ "then": [
+ "* ",
+ "Atunci "
+ ],
+ "when": [
+ "* ",
+ "Cand ",
+ "Când "
+ ]
+ },
+ "ru": {
+ "and": [
+ "* ",
+ "И ",
+ "К тому же ",
+ "Также "
+ ],
+ "background": [
+ "Предыстория",
+ "Контекст"
+ ],
+ "but": [
+ "* ",
+ "Но ",
+ "А ",
+ "Иначе "
+ ],
+ "examples": [
+ "Примеры"
+ ],
+ "feature": [
+ "Функция",
+ "Функциональность",
+ "Функционал",
+ "Свойство"
+ ],
+ "given": [
+ "* ",
+ "Допустим ",
+ "Дано ",
+ "Пусть "
+ ],
+ "name": "Russian",
+ "native": "русский",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Пример",
+ "Сценарий"
+ ],
+ "scenarioOutline": [
+ "Структура сценария"
+ ],
+ "then": [
+ "* ",
+ "То ",
+ "Затем ",
+ "Тогда "
+ ],
+ "when": [
+ "* ",
+ "Когда ",
+ "Если "
+ ]
+ },
+ "sk": {
+ "and": [
+ "* ",
+ "A ",
+ "A tiež ",
+ "A taktiež ",
+ "A zároveň "
+ ],
+ "background": [
+ "Pozadie"
+ ],
+ "but": [
+ "* ",
+ "Ale "
+ ],
+ "examples": [
+ "Príklady"
+ ],
+ "feature": [
+ "Požiadavka",
+ "Funkcia",
+ "Vlastnosť"
+ ],
+ "given": [
+ "* ",
+ "Pokiaľ ",
+ "Za predpokladu "
+ ],
+ "name": "Slovak",
+ "native": "Slovensky",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Príklad",
+ "Scenár"
+ ],
+ "scenarioOutline": [
+ "Náčrt Scenáru",
+ "Náčrt Scenára",
+ "Osnova Scenára"
+ ],
+ "then": [
+ "* ",
+ "Tak ",
+ "Potom "
+ ],
+ "when": [
+ "* ",
+ "Keď ",
+ "Ak "
+ ]
+ },
+ "sl": {
+ "and": [
+ "In ",
+ "Ter "
+ ],
+ "background": [
+ "Kontekst",
+ "Osnova",
+ "Ozadje"
+ ],
+ "but": [
+ "Toda ",
+ "Ampak ",
+ "Vendar "
+ ],
+ "examples": [
+ "Primeri",
+ "Scenariji"
+ ],
+ "feature": [
+ "Funkcionalnost",
+ "Funkcija",
+ "Možnosti",
+ "Moznosti",
+ "Lastnost",
+ "Značilnost"
+ ],
+ "given": [
+ "Dano ",
+ "Podano ",
+ "Zaradi ",
+ "Privzeto "
+ ],
+ "name": "Slovenian",
+ "native": "Slovenski",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Primer",
+ "Scenarij"
+ ],
+ "scenarioOutline": [
+ "Struktura scenarija",
+ "Skica",
+ "Koncept",
+ "Oris scenarija",
+ "Osnutek"
+ ],
+ "then": [
+ "Nato ",
+ "Potem ",
+ "Takrat "
+ ],
+ "when": [
+ "Ko ",
+ "Ce ",
+ "Če ",
+ "Kadar "
+ ]
+ },
+ "sr-Cyrl": {
+ "and": [
+ "* ",
+ "И "
+ ],
+ "background": [
+ "Контекст",
+ "Основа",
+ "Позадина"
+ ],
+ "but": [
+ "* ",
+ "Али "
+ ],
+ "examples": [
+ "Примери",
+ "Сценарији"
+ ],
+ "feature": [
+ "Функционалност",
+ "Могућност",
+ "Особина"
+ ],
+ "given": [
+ "* ",
+ "За дато ",
+ "За дате ",
+ "За дати "
+ ],
+ "name": "Serbian",
+ "native": "Српски",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Пример",
+ "Сценарио",
+ "Пример"
+ ],
+ "scenarioOutline": [
+ "Структура сценарија",
+ "Скица",
+ "Концепт"
+ ],
+ "then": [
+ "* ",
+ "Онда "
+ ],
+ "when": [
+ "* ",
+ "Када ",
+ "Кад "
+ ]
+ },
+ "sr-Latn": {
+ "and": [
+ "* ",
+ "I "
+ ],
+ "background": [
+ "Kontekst",
+ "Osnova",
+ "Pozadina"
+ ],
+ "but": [
+ "* ",
+ "Ali "
+ ],
+ "examples": [
+ "Primeri",
+ "Scenariji"
+ ],
+ "feature": [
+ "Funkcionalnost",
+ "Mogućnost",
+ "Mogucnost",
+ "Osobina"
+ ],
+ "given": [
+ "* ",
+ "Za dato ",
+ "Za date ",
+ "Za dati "
+ ],
+ "name": "Serbian (Latin)",
+ "native": "Srpski (Latinica)",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Scenario",
+ "Primer"
+ ],
+ "scenarioOutline": [
+ "Struktura scenarija",
+ "Skica",
+ "Koncept"
+ ],
+ "then": [
+ "* ",
+ "Onda "
+ ],
+ "when": [
+ "* ",
+ "Kada ",
+ "Kad "
+ ]
+ },
+ "sv": {
+ "and": [
+ "* ",
+ "Och "
+ ],
+ "background": [
+ "Bakgrund"
+ ],
+ "but": [
+ "* ",
+ "Men "
+ ],
+ "examples": [
+ "Exempel"
+ ],
+ "feature": [
+ "Egenskap"
+ ],
+ "given": [
+ "* ",
+ "Givet "
+ ],
+ "name": "Swedish",
+ "native": "Svenska",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Scenario"
+ ],
+ "scenarioOutline": [
+ "Abstrakt Scenario",
+ "Scenariomall"
+ ],
+ "then": [
+ "* ",
+ "Så "
+ ],
+ "when": [
+ "* ",
+ "När "
+ ]
+ },
+ "ta": {
+ "and": [
+ "* ",
+ "மேலும் ",
+ "மற்றும் "
+ ],
+ "background": [
+ "பின்னணி"
+ ],
+ "but": [
+ "* ",
+ "ஆனால் "
+ ],
+ "examples": [
+ "எடுத்துக்காட்டுகள்",
+ "காட்சிகள்",
+ "நிலைமைகளில்"
+ ],
+ "feature": [
+ "அம்சம்",
+ "வணிக தேவை",
+ "திறன்"
+ ],
+ "given": [
+ "* ",
+ "கொடுக்கப்பட்ட "
+ ],
+ "name": "Tamil",
+ "native": "தமிழ்",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "உதாரணமாக",
+ "காட்சி"
+ ],
+ "scenarioOutline": [
+ "காட்சி சுருக்கம்",
+ "காட்சி வார்ப்புரு"
+ ],
+ "then": [
+ "* ",
+ "அப்பொழுது "
+ ],
+ "when": [
+ "* ",
+ "எப்போது "
+ ]
+ },
+ "th": {
+ "and": [
+ "* ",
+ "และ "
+ ],
+ "background": [
+ "แนวคิด"
+ ],
+ "but": [
+ "* ",
+ "แต่ "
+ ],
+ "examples": [
+ "ชุดของตัวอย่าง",
+ "ชุดของเหตุการณ์"
+ ],
+ "feature": [
+ "โครงหลัก",
+ "ความต้องการทางธุรกิจ",
+ "ความสามารถ"
+ ],
+ "given": [
+ "* ",
+ "กำหนดให้ "
+ ],
+ "name": "Thai",
+ "native": "ไทย",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "เหตุการณ์"
+ ],
+ "scenarioOutline": [
+ "สรุปเหตุการณ์",
+ "โครงสร้างของเหตุการณ์"
+ ],
+ "then": [
+ "* ",
+ "ดังนั้น "
+ ],
+ "when": [
+ "* ",
+ "เมื่อ "
+ ]
+ },
+ "tl": {
+ "and": [
+ "* ",
+ "మరియు "
+ ],
+ "background": [
+ "నేపథ్యం"
+ ],
+ "but": [
+ "* ",
+ "కాని "
+ ],
+ "examples": [
+ "ఉదాహరణలు"
+ ],
+ "feature": [
+ "గుణము"
+ ],
+ "given": [
+ "* ",
+ "చెప్పబడినది "
+ ],
+ "name": "Telugu",
+ "native": "తెలుగు",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "ఉదాహరణ",
+ "సన్నివేశం"
+ ],
+ "scenarioOutline": [
+ "కథనం"
+ ],
+ "then": [
+ "* ",
+ "అప్పుడు "
+ ],
+ "when": [
+ "* ",
+ "ఈ పరిస్థితిలో "
+ ]
+ },
+ "tlh": {
+ "and": [
+ "* ",
+ "'ej ",
+ "latlh "
+ ],
+ "background": [
+ "mo'"
+ ],
+ "but": [
+ "* ",
+ "'ach ",
+ "'a "
+ ],
+ "examples": [
+ "ghantoH",
+ "lutmey"
+ ],
+ "feature": [
+ "Qap",
+ "Qu'meH 'ut",
+ "perbogh",
+ "poQbogh malja'",
+ "laH"
+ ],
+ "given": [
+ "* ",
+ "ghu' noblu' ",
+ "DaH ghu' bejlu' "
+ ],
+ "name": "Klingon",
+ "native": "tlhIngan",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "lut"
+ ],
+ "scenarioOutline": [
+ "lut chovnatlh"
+ ],
+ "then": [
+ "* ",
+ "vaj "
+ ],
+ "when": [
+ "* ",
+ "qaSDI' "
+ ]
+ },
+ "tr": {
+ "and": [
+ "* ",
+ "Ve "
+ ],
+ "background": [
+ "Geçmiş"
+ ],
+ "but": [
+ "* ",
+ "Fakat ",
+ "Ama "
+ ],
+ "examples": [
+ "Örnekler"
+ ],
+ "feature": [
+ "Özellik"
+ ],
+ "given": [
+ "* ",
+ "Diyelim ki "
+ ],
+ "name": "Turkish",
+ "native": "Türkçe",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Örnek",
+ "Senaryo"
+ ],
+ "scenarioOutline": [
+ "Senaryo taslağı"
+ ],
+ "then": [
+ "* ",
+ "O zaman "
+ ],
+ "when": [
+ "* ",
+ "Eğer ki "
+ ]
+ },
+ "tt": {
+ "and": [
+ "* ",
+ "Һәм ",
+ "Вә "
+ ],
+ "background": [
+ "Кереш"
+ ],
+ "but": [
+ "* ",
+ "Ләкин ",
+ "Әмма "
+ ],
+ "examples": [
+ "Үрнәкләр",
+ "Мисаллар"
+ ],
+ "feature": [
+ "Мөмкинлек",
+ "Үзенчәлеклелек"
+ ],
+ "given": [
+ "* ",
+ "Әйтик "
+ ],
+ "name": "Tatar",
+ "native": "Татарча",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Сценарий"
+ ],
+ "scenarioOutline": [
+ "Сценарийның төзелеше"
+ ],
+ "then": [
+ "* ",
+ "Нәтиҗәдә "
+ ],
+ "when": [
+ "* ",
+ "Әгәр "
+ ]
+ },
+ "uk": {
+ "and": [
+ "* ",
+ "І ",
+ "А також ",
+ "Та "
+ ],
+ "background": [
+ "Передумова"
+ ],
+ "but": [
+ "* ",
+ "Але "
+ ],
+ "examples": [
+ "Приклади"
+ ],
+ "feature": [
+ "Функціонал"
+ ],
+ "given": [
+ "* ",
+ "Припустимо ",
+ "Припустимо, що ",
+ "Нехай ",
+ "Дано "
+ ],
+ "name": "Ukrainian",
+ "native": "Українська",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Приклад",
+ "Сценарій"
+ ],
+ "scenarioOutline": [
+ "Структура сценарію"
+ ],
+ "then": [
+ "* ",
+ "То ",
+ "Тоді "
+ ],
+ "when": [
+ "* ",
+ "Якщо ",
+ "Коли "
+ ]
+ },
+ "ur": {
+ "and": [
+ "* ",
+ "اور "
+ ],
+ "background": [
+ "پس منظر"
+ ],
+ "but": [
+ "* ",
+ "لیکن "
+ ],
+ "examples": [
+ "مثالیں"
+ ],
+ "feature": [
+ "صلاحیت",
+ "کاروبار کی ضرورت",
+ "خصوصیت"
+ ],
+ "given": [
+ "* ",
+ "اگر ",
+ "بالفرض ",
+ "فرض کیا "
+ ],
+ "name": "Urdu",
+ "native": "اردو",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "منظرنامہ"
+ ],
+ "scenarioOutline": [
+ "منظر نامے کا خاکہ"
+ ],
+ "then": [
+ "* ",
+ "پھر ",
+ "تب "
+ ],
+ "when": [
+ "* ",
+ "جب "
+ ]
+ },
+ "uz": {
+ "and": [
+ "* ",
+ "Ва "
+ ],
+ "background": [
+ "Тарих"
+ ],
+ "but": [
+ "* ",
+ "Лекин ",
+ "Бирок ",
+ "Аммо "
+ ],
+ "examples": [
+ "Мисоллар"
+ ],
+ "feature": [
+ "Функционал"
+ ],
+ "given": [
+ "* ",
+ "Агар "
+ ],
+ "name": "Uzbek",
+ "native": "Узбекча",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Сценарий"
+ ],
+ "scenarioOutline": [
+ "Сценарий структураси"
+ ],
+ "then": [
+ "* ",
+ "Унда "
+ ],
+ "when": [
+ "* ",
+ "Агар "
+ ]
+ },
+ "vi": {
+ "and": [
+ "* ",
+ "Và "
+ ],
+ "background": [
+ "Bối cảnh"
+ ],
+ "but": [
+ "* ",
+ "Nhưng "
+ ],
+ "examples": [
+ "Dữ liệu"
+ ],
+ "feature": [
+ "Tính năng"
+ ],
+ "given": [
+ "* ",
+ "Biết ",
+ "Cho "
+ ],
+ "name": "Vietnamese",
+ "native": "Tiếng Việt",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "Tình huống",
+ "Kịch bản"
+ ],
+ "scenarioOutline": [
+ "Khung tình huống",
+ "Khung kịch bản"
+ ],
+ "then": [
+ "* ",
+ "Thì "
+ ],
+ "when": [
+ "* ",
+ "Khi "
+ ]
+ },
+ "zh-CN": {
+ "and": [
+ "* ",
+ "而且",
+ "并且",
+ "同时"
+ ],
+ "background": [
+ "背景"
+ ],
+ "but": [
+ "* ",
+ "但是"
+ ],
+ "examples": [
+ "例子"
+ ],
+ "feature": [
+ "功能"
+ ],
+ "given": [
+ "* ",
+ "假如",
+ "假设",
+ "假定"
+ ],
+ "name": "Chinese simplified",
+ "native": "简体中文",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "场景",
+ "剧本"
+ ],
+ "scenarioOutline": [
+ "场景大纲",
+ "剧本大纲"
+ ],
+ "then": [
+ "* ",
+ "那么"
+ ],
+ "when": [
+ "* ",
+ "当"
+ ]
+ },
+ "zh-TW": {
+ "and": [
+ "* ",
+ "而且",
+ "並且",
+ "同時"
+ ],
+ "background": [
+ "背景"
+ ],
+ "but": [
+ "* ",
+ "但是"
+ ],
+ "examples": [
+ "例子"
+ ],
+ "feature": [
+ "功能"
+ ],
+ "given": [
+ "* ",
+ "假如",
+ "假設",
+ "假定"
+ ],
+ "name": "Chinese traditional",
+ "native": "繁體中文",
+ "rule": [
+ "Rule"
+ ],
+ "scenario": [
+ "場景",
+ "劇本"
+ ],
+ "scenarioOutline": [
+ "場景大綱",
+ "劇本大綱"
+ ],
+ "then": [
+ "* ",
+ "那麼"
+ ],
+ "when": [
+ "* ",
+ "當"
+ ]
+ },
+ "mr": {
+ "and": [
+ "* ",
+ "आणि ",
+ "तसेच "
+ ],
+ "background": [
+ "पार्श्वभूमी"
+ ],
+ "but": [
+ "* ",
+ "पण ",
+ "परंतु "
+ ],
+ "examples": [
+ "उदाहरण"
+ ],
+ "feature": [
+ "वैशिष्ट्य",
+ "सुविधा"
+ ],
+ "given": [
+ "* ",
+ "जर",
+ "दिलेल्या प्रमाणे "
+ ],
+ "name": "Marathi",
+ "native": "मराठी",
+ "rule": [
+ "नियम"
+ ],
+ "scenario": [
+ "परिदृश्य"
+ ],
+ "scenarioOutline": [
+ "परिदृश्य रूपरेखा"
+ ],
+ "then": [
+ "* ",
+ "मग ",
+ "तेव्हा "
+ ],
+ "when": [
+ "* ",
+ "जेव्हा "
+ ]
+ }
+}
\ No newline at end of file
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/gherkin.berp b/vendor/github.com/cucumber/gherkin-go/v11/gherkin.berp
new file mode 100644
index 00000000..b596cb0f
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/gherkin.berp
@@ -0,0 +1,38 @@
+[
+ Tokens -> #Empty,#Comment,#TagLine,#FeatureLine,#RuleLine,#BackgroundLine,#ScenarioLine,#ExamplesLine,#StepLine,#DocStringSeparator,#TableRow,#Language
+ IgnoredTokens -> #Comment,#Empty
+ ClassName -> Parser
+ Namespace -> Gherkin
+]
+
+GherkinDocument! := Feature?
+Feature! := FeatureHeader Background? ScenarioDefinition* Rule*
+FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper
+
+Rule! := RuleHeader Background? ScenarioDefinition*
+RuleHeader! := #RuleLine DescriptionHelper
+
+Background! := #BackgroundLine DescriptionHelper Step*
+
+// we could avoid defining ScenarioDefinition, but that would require regular look-aheads, so worse performance
+ScenarioDefinition! := Tags? Scenario
+
+Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition*
+// after the first "Data" block, interpreting a tag line is ambiguous (tagline of next examples or of next scenario)
+// because of this, we need a lookahead hint, that connects the tag line to the next examples, if there is an examples block ahead
+ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine]:= Tags? Examples
+Examples! := #ExamplesLine DescriptionHelper ExamplesTable?
+ExamplesTable! := #TableRow #TableRow*
+
+Step! := #StepLine StepArg?
+StepArg := (DataTable | DocString)
+
+DataTable! := #TableRow+
+DocString! := #DocStringSeparator #Other* #DocStringSeparator
+
+Tags! := #TagLine+
+
+// we need to explicitly mention comment, to avoid merging it into the description line's #Other token
+// we also eat the leading empty lines, the tailing lines are not removed by the parser to avoid lookahead, this has to be done by the AST builder
+DescriptionHelper := #Empty* Description? #Comment*
+Description! := #Other+
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/gherkin.go b/vendor/github.com/cucumber/gherkin-go/v11/gherkin.go
new file mode 100644
index 00000000..3a94c1e5
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/gherkin.go
@@ -0,0 +1,142 @@
+package gherkin
+
+import (
+ "bufio"
+ "fmt"
+ "github.com/cucumber/messages-go/v10"
+ "io"
+ "strings"
+)
+
+type Parser interface {
+ StopAtFirstError(b bool)
+ Parse(s Scanner, m Matcher) (err error)
+}
+
+/*
+The Scanner reads a gherkin doc (typically read from a .feature file) and creates a token for
+each line. The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree).
+
+If the scanner sees a # language header, it will reconfigure itself dynamically to look for
+Gherkin keywords for the associated language. The keywords are defined in gherkin-languages.json.
+*/
+type Scanner interface {
+ Scan() (line *Line, atEof bool, err error)
+}
+
+type Builder interface {
+ Build(*Token) (bool, error)
+ StartRule(RuleType) (bool, error)
+ EndRule(RuleType) (bool, error)
+ Reset()
+}
+
+type Token struct {
+ Type TokenType
+ Keyword string
+ Text string
+ Items []*LineSpan
+ GherkinDialect string
+ Indent string
+ Location *Location
+}
+
+func (t *Token) IsEOF() bool {
+ return t.Type == TokenTypeEOF
+}
+func (t *Token) String() string {
+ return fmt.Sprintf("%v: %s/%s", t.Type, t.Keyword, t.Text)
+}
+
+type LineSpan struct {
+ Column int
+ Text string
+}
+
+func (l *LineSpan) String() string {
+ return fmt.Sprintf("%d:%s", l.Column, l.Text)
+}
+
+type parser struct {
+ builder Builder
+ stopAtFirstError bool
+}
+
+func NewParser(b Builder) Parser {
+ return &parser{
+ builder: b,
+ }
+}
+
+func (p *parser) StopAtFirstError(b bool) {
+ p.stopAtFirstError = b
+}
+
+func NewScanner(r io.Reader) Scanner {
+ return &scanner{
+ s: bufio.NewScanner(r),
+ line: 0,
+ }
+}
+
+type scanner struct {
+ s *bufio.Scanner
+ line int
+}
+
+func (t *scanner) Scan() (line *Line, atEof bool, err error) {
+ scanning := t.s.Scan()
+ if !scanning {
+ err = t.s.Err()
+ if err == nil {
+ atEof = true
+ }
+ }
+ if err == nil {
+ t.line += 1
+ str := t.s.Text()
+ line = &Line{str, t.line, strings.TrimLeft(str, " \t"), atEof}
+ }
+ return
+}
+
+type Line struct {
+ LineText string
+ LineNumber int
+ TrimmedLineText string
+ AtEof bool
+}
+
+func (g *Line) Indent() int {
+ return len(g.LineText) - len(g.TrimmedLineText)
+}
+
+func (g *Line) IsEmpty() bool {
+ return len(g.TrimmedLineText) == 0
+}
+
+func (g *Line) IsEof() bool {
+ return g.AtEof
+}
+
+func (g *Line) StartsWith(prefix string) bool {
+ return strings.HasPrefix(g.TrimmedLineText, prefix)
+}
+
+func ParseGherkinDocument(in io.Reader, newId func() string) (gherkinDocument *messages.GherkinDocument, err error) {
+ return ParseGherkinDocumentForLanguage(in, DEFAULT_DIALECT, newId)
+}
+
+func ParseGherkinDocumentForLanguage(in io.Reader, language string, newId func() string) (gherkinDocument *messages.GherkinDocument, err error) {
+
+ builder := NewAstBuilder(newId)
+ parser := NewParser(builder)
+ parser.StopAtFirstError(false)
+ matcher := NewLanguageMatcher(GherkinDialectsBuildin(), language)
+
+ scanner := NewScanner(in)
+
+ err = parser.Parse(scanner, matcher)
+
+ return builder.GetGherkinDocument(), err
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/go.mod b/vendor/github.com/cucumber/gherkin-go/v11/go.mod
new file mode 100644
index 00000000..fa0561a6
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/go.mod
@@ -0,0 +1,13 @@
+module github.com/cucumber/gherkin-go/v11
+
+require (
+ github.com/aslakhellesoy/gox v1.0.100 // indirect
+ github.com/cucumber/messages-go/v10 v10.0.1
+ github.com/gogo/protobuf v1.3.1
+ github.com/kr/text v0.2.0 // indirect
+ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
+ github.com/stretchr/testify v1.5.1
+ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
+)
+
+go 1.13
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/go.sum b/vendor/github.com/cucumber/gherkin-go/v11/go.sum
new file mode 100644
index 00000000..81310532
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/go.sum
@@ -0,0 +1,43 @@
+github.com/aslakhellesoy/gox v1.0.100 h1:IP+x+v9Wya7OHP1OmaetTFZkL4OYY2/9t+7Ndc61mMo=
+github.com/aslakhellesoy/gox v1.0.100/go.mod h1:AJl542QsKKG96COVsv0N74HHzVQgDIQPceVUh1aeU2M=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cucumber/messages-go/v10 v10.0.1 h1:JJggBhCvuqRtNjOnWFxvULilQv0zBOvnok5VvbgtN5o=
+github.com/cucumber/messages-go/v10 v10.0.1/go.mod h1:kA5T38CBlBbYLU12TIrJ4fk4wSkVVOgyh7Enyy8WnSg=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
+github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnnCPtE8=
+github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=
+github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/matcher.go b/vendor/github.com/cucumber/gherkin-go/v11/matcher.go
new file mode 100644
index 00000000..52d23c5f
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/matcher.go
@@ -0,0 +1,300 @@
+package gherkin
+
+import (
+ "regexp"
+ "strings"
+ "unicode"
+ "unicode/utf8"
+)
+
+const (
+ DEFAULT_DIALECT = "en"
+ COMMENT_PREFIX = "#"
+ TAG_PREFIX = "@"
+ TITLE_KEYWORD_SEPARATOR = ":"
+ TABLE_CELL_SEPARATOR = '|'
+ ESCAPE_CHAR = '\\'
+ ESCAPED_NEWLINE = 'n'
+ DOCSTRING_SEPARATOR = "\"\"\""
+ DOCSTRING_ALTERNATIVE_SEPARATOR = "```"
+)
+
+type matcher struct {
+ gdp GherkinDialectProvider
+ defaultLang string
+ lang string
+ dialect *GherkinDialect
+ activeDocStringSeparator string
+ indentToRemove int
+ languagePattern *regexp.Regexp
+}
+
+func NewMatcher(gdp GherkinDialectProvider) Matcher {
+ return &matcher{
+ gdp: gdp,
+ defaultLang: DEFAULT_DIALECT,
+ lang: DEFAULT_DIALECT,
+ dialect: gdp.GetDialect(DEFAULT_DIALECT),
+ languagePattern: regexp.MustCompile("^\\s*#\\s*language\\s*:\\s*([a-zA-Z\\-_]+)\\s*$"),
+ }
+}
+
+func NewLanguageMatcher(gdp GherkinDialectProvider, language string) Matcher {
+ return &matcher{
+ gdp: gdp,
+ defaultLang: language,
+ lang: language,
+ dialect: gdp.GetDialect(language),
+ languagePattern: regexp.MustCompile("^\\s*#\\s*language\\s*:\\s*([a-zA-Z\\-_]+)\\s*$"),
+ }
+}
+
+func (m *matcher) Reset() {
+ m.indentToRemove = 0
+ m.activeDocStringSeparator = ""
+ if m.lang != "en" {
+ m.dialect = m.gdp.GetDialect(m.defaultLang)
+ m.lang = "en"
+ }
+}
+
+func (m *matcher) newTokenAtLocation(line, index int) (token *Token) {
+ column := index + 1
+ token = new(Token)
+ token.GherkinDialect = m.lang
+ token.Location = &Location{line, column}
+ return
+}
+
+func (m *matcher) MatchEOF(line *Line) (ok bool, token *Token, err error) {
+ if line.IsEof() {
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeEOF
+ }
+ return
+}
+
+func (m *matcher) MatchEmpty(line *Line) (ok bool, token *Token, err error) {
+ if line.IsEmpty() {
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeEmpty
+ }
+ return
+}
+
+func (m *matcher) MatchComment(line *Line) (ok bool, token *Token, err error) {
+ if line.StartsWith(COMMENT_PREFIX) {
+ token, ok = m.newTokenAtLocation(line.LineNumber, 0), true
+ token.Type = TokenTypeComment
+ token.Text = line.LineText
+ }
+ return
+}
+
+func (m *matcher) MatchTagLine(line *Line) (ok bool, token *Token, err error) {
+ if !line.StartsWith(TAG_PREFIX) {
+ return
+ }
+ commentDelimiter := regexp.MustCompile(`\s+` + COMMENT_PREFIX)
+ uncommentedLine := commentDelimiter.Split(line.TrimmedLineText, 2)[0]
+ var tags []*LineSpan
+ var column = line.Indent() + 1
+
+ splits := strings.Split(uncommentedLine, TAG_PREFIX)
+ for i := range splits {
+ txt := strings.TrimRightFunc(splits[i], func(r rune) bool {
+ return unicode.IsSpace(r)
+ })
+ if len(txt) == 0 {
+ continue
+ }
+ if !regexp.MustCompile(`^\S+$`).MatchString(txt) {
+ location := &Location{line.LineNumber, column}
+ msg := "A tag may not contain whitespace"
+ err = &parseError{msg, location}
+ break
+ }
+ tags = append(tags, &LineSpan{column, TAG_PREFIX + txt})
+ column = column + utf8.RuneCountInString(splits[i]) + 1
+ }
+
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeTagLine
+ token.Items = tags
+
+ return
+}
+
+func (m *matcher) matchTitleLine(line *Line, tokenType TokenType, keywords []string) (ok bool, token *Token, err error) {
+ for i := range keywords {
+ keyword := keywords[i]
+ if line.StartsWith(keyword + TITLE_KEYWORD_SEPARATOR) {
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = tokenType
+ token.Keyword = keyword
+ token.Text = strings.Trim(line.TrimmedLineText[len(keyword)+1:], " ")
+ return
+ }
+ }
+ return
+}
+
+func (m *matcher) MatchFeatureLine(line *Line) (ok bool, token *Token, err error) {
+ return m.matchTitleLine(line, TokenTypeFeatureLine, m.dialect.FeatureKeywords())
+}
+func (m *matcher) MatchRuleLine(line *Line) (ok bool, token *Token, err error) {
+ return m.matchTitleLine(line, TokenTypeRuleLine, m.dialect.RuleKeywords())
+}
+func (m *matcher) MatchBackgroundLine(line *Line) (ok bool, token *Token, err error) {
+ return m.matchTitleLine(line, TokenTypeBackgroundLine, m.dialect.BackgroundKeywords())
+}
+func (m *matcher) MatchScenarioLine(line *Line) (ok bool, token *Token, err error) {
+ ok, token, err = m.matchTitleLine(line, TokenTypeScenarioLine, m.dialect.ScenarioKeywords())
+ if ok || (err != nil) {
+ return ok, token, err
+ }
+ ok, token, err = m.matchTitleLine(line, TokenTypeScenarioLine, m.dialect.ScenarioOutlineKeywords())
+ return ok, token, err
+}
+func (m *matcher) MatchExamplesLine(line *Line) (ok bool, token *Token, err error) {
+ return m.matchTitleLine(line, TokenTypeExamplesLine, m.dialect.ExamplesKeywords())
+}
+func (m *matcher) MatchStepLine(line *Line) (ok bool, token *Token, err error) {
+ keywords := m.dialect.StepKeywords()
+ for i := range keywords {
+ keyword := keywords[i]
+ if line.StartsWith(keyword) {
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeStepLine
+ token.Keyword = keyword
+ token.Text = strings.Trim(line.TrimmedLineText[len(keyword):], " ")
+ return
+ }
+ }
+ return
+}
+
+func (m *matcher) MatchDocStringSeparator(line *Line) (ok bool, token *Token, err error) {
+ if m.activeDocStringSeparator != "" {
+ if line.StartsWith(m.activeDocStringSeparator) {
+ // close
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeDocStringSeparator
+ token.Keyword = m.activeDocStringSeparator
+
+ m.indentToRemove = 0
+ m.activeDocStringSeparator = ""
+ }
+ return
+ }
+ if line.StartsWith(DOCSTRING_SEPARATOR) {
+ m.activeDocStringSeparator = DOCSTRING_SEPARATOR
+ } else if line.StartsWith(DOCSTRING_ALTERNATIVE_SEPARATOR) {
+ m.activeDocStringSeparator = DOCSTRING_ALTERNATIVE_SEPARATOR
+ }
+ if m.activeDocStringSeparator != "" {
+ // open
+ mediaType := line.TrimmedLineText[len(m.activeDocStringSeparator):]
+ m.indentToRemove = line.Indent()
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeDocStringSeparator
+ token.Keyword = m.activeDocStringSeparator
+ token.Text = mediaType
+ }
+ return
+}
+
+func isSpaceAndNotNewLine(r rune) bool {
+ return unicode.IsSpace(r) && r != '\n'
+}
+
+func (m *matcher) MatchTableRow(line *Line) (ok bool, token *Token, err error) {
+ var firstChar, firstPos = utf8.DecodeRuneInString(line.TrimmedLineText)
+ if firstChar == TABLE_CELL_SEPARATOR {
+ var cells []*LineSpan
+ var cell []rune
+ var startCol = line.Indent() + 2 // column where the current cell started
+ // start after the first separator, it's not included in the cell
+ for i, w, col := firstPos, 0, startCol; i < len(line.TrimmedLineText); i += w {
+ var char rune
+ char, w = utf8.DecodeRuneInString(line.TrimmedLineText[i:])
+ if char == TABLE_CELL_SEPARATOR {
+ // append current cell
+ txt := string(cell)
+
+ txtTrimmedLeadingSpace := strings.TrimLeftFunc(txt, isSpaceAndNotNewLine)
+ ind := utf8.RuneCountInString(txt) - utf8.RuneCountInString(txtTrimmedLeadingSpace)
+ txtTrimmed := strings.TrimRightFunc(txtTrimmedLeadingSpace, isSpaceAndNotNewLine)
+ cells = append(cells, &LineSpan{startCol + ind, txtTrimmed})
+ // start building next
+ cell = make([]rune, 0)
+ startCol = col + 1
+ } else if char == ESCAPE_CHAR {
+ // skip this character but count the column
+ i += w
+ col++
+ char, w = utf8.DecodeRuneInString(line.TrimmedLineText[i:])
+ if char == ESCAPED_NEWLINE {
+ cell = append(cell, '\n')
+ } else {
+ if char != TABLE_CELL_SEPARATOR && char != ESCAPE_CHAR {
+ cell = append(cell, ESCAPE_CHAR)
+ }
+ cell = append(cell, char)
+ }
+ } else {
+ cell = append(cell, char)
+ }
+ col++
+ }
+
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeTableRow
+ token.Items = cells
+ }
+ return
+}
+
+func (m *matcher) MatchLanguage(line *Line) (ok bool, token *Token, err error) {
+ matches := m.languagePattern.FindStringSubmatch(line.TrimmedLineText)
+ if len(matches) > 0 {
+ lang := matches[1]
+ token, ok = m.newTokenAtLocation(line.LineNumber, line.Indent()), true
+ token.Type = TokenTypeLanguage
+ token.Text = lang
+
+ dialect := m.gdp.GetDialect(lang)
+ if dialect == nil {
+ err = &parseError{"Language not supported: " + lang, token.Location}
+ } else {
+ m.lang = lang
+ m.dialect = dialect
+ }
+ }
+ return
+}
+
+func (m *matcher) MatchOther(line *Line) (ok bool, token *Token, err error) {
+ token, ok = m.newTokenAtLocation(line.LineNumber, 0), true
+ token.Type = TokenTypeOther
+
+ element := line.LineText
+ txt := strings.TrimLeft(element, " ")
+
+ if len(element)-len(txt) > m.indentToRemove {
+ token.Text = m.unescapeDocString(element[m.indentToRemove:])
+ } else {
+ token.Text = m.unescapeDocString(txt)
+ }
+ return
+}
+
+func (m *matcher) unescapeDocString(text string) string {
+ if m.activeDocStringSeparator == DOCSTRING_SEPARATOR {
+ return strings.Replace(text, "\\\"\\\"\\\"", DOCSTRING_SEPARATOR, -1)
+ }
+ if m.activeDocStringSeparator == DOCSTRING_ALTERNATIVE_SEPARATOR {
+ return strings.Replace(text, "\\`\\`\\`", DOCSTRING_ALTERNATIVE_SEPARATOR, -1)
+ }
+ return text
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/messages.go b/vendor/github.com/cucumber/gherkin-go/v11/messages.go
new file mode 100644
index 00000000..a6fd0b0e
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/messages.go
@@ -0,0 +1,127 @@
+package gherkin
+
+import (
+ "fmt"
+ "github.com/cucumber/messages-go/v10"
+ gio "github.com/gogo/protobuf/io"
+ "io"
+ "io/ioutil"
+ "math"
+ "strings"
+)
+
+func Messages(
+ paths []string,
+ sourceStream io.Reader,
+ language string,
+ includeSource bool,
+ includeGherkinDocument bool,
+ includePickles bool,
+ writer gio.WriteCloser,
+ newId func() string,
+) ([]messages.Envelope, error) {
+ var result []messages.Envelope
+ var err error
+
+ handleMessage := func(result []messages.Envelope, message *messages.Envelope) ([]messages.Envelope, error) {
+ if writer != nil {
+ err = writer.WriteMsg(message)
+ return result, err
+ } else {
+ result = append(result, *message)
+ }
+
+ return result, err
+ }
+
+ processSource := func(source *messages.Source) error {
+ if includeSource {
+ result, err = handleMessage(result, &messages.Envelope{
+ Message: &messages.Envelope_Source{
+ Source: source,
+ },
+ })
+ }
+ doc, err := ParseGherkinDocumentForLanguage(strings.NewReader(source.Data), language, newId)
+ if errs, ok := err.(parseErrors); ok {
+ // expected parse errors
+ for _, err := range errs {
+ if pe, ok := err.(*parseError); ok {
+ result, err = handleMessage(result, pe.asAttachment(source.Uri))
+ } else {
+ return fmt.Errorf("parse feature file: %s, unexpected error: %+v\n", source.Uri, err)
+ }
+ }
+ return nil
+ }
+
+ if includeGherkinDocument {
+ doc.Uri = source.Uri
+ result, err = handleMessage(result, &messages.Envelope{
+ Message: &messages.Envelope_GherkinDocument{
+ GherkinDocument: doc,
+ },
+ })
+ }
+
+ if includePickles {
+ for _, pickle := range Pickles(*doc, source.Uri, newId) {
+ result, err = handleMessage(result, &messages.Envelope{
+ Message: &messages.Envelope_Pickle{
+ Pickle: pickle,
+ },
+ })
+ }
+ }
+ return nil
+ }
+
+ if len(paths) == 0 {
+ reader := gio.NewDelimitedReader(sourceStream, math.MaxInt32)
+ for {
+ envelope := &messages.Envelope{}
+ err := reader.ReadMsg(envelope)
+ if err == io.EOF {
+ break
+ }
+
+ switch t := envelope.Message.(type) {
+ case *messages.Envelope_Source:
+ processSource(t.Source)
+ }
+ }
+ } else {
+ for _, path := range paths {
+ in, err := ioutil.ReadFile(path)
+ if err != nil {
+ return result, fmt.Errorf("read feature file: %s - %+v", path, err)
+ }
+ source := &messages.Source{
+ Uri: path,
+ Data: string(in),
+ MediaType: "text/x.cucumber.gherkin+plain",
+ }
+ processSource(source)
+ }
+ }
+
+ return result, err
+}
+
+func (a *parseError) asAttachment(uri string) *messages.Envelope {
+ return &messages.Envelope{
+ Message: &messages.Envelope_Attachment{
+ Attachment: &messages.Attachment{
+ Body: &messages.Attachment_Text{
+ Text: a.Error(),
+ },
+ Source: &messages.SourceReference{
+ Uri: uri,
+ Location: &messages.Location{
+ Line: uint32(a.loc.Line),
+ Column: uint32(a.loc.Column),
+ },
+ },
+ }},
+ }
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/parser.go b/vendor/github.com/cucumber/gherkin-go/v11/parser.go
new file mode 100644
index 00000000..4f68ce3b
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/parser.go
@@ -0,0 +1,4125 @@
+//
+// This file is generated. Do not edit! Edit parser.go.razor instead.
+
+//
+package gherkin
+
+import (
+ "fmt"
+ "strings"
+)
+
+type TokenType int
+
+const (
+ TokenTypeNone TokenType = iota
+ TokenTypeEOF
+ TokenTypeEmpty
+ TokenTypeComment
+ TokenTypeTagLine
+ TokenTypeFeatureLine
+ TokenTypeRuleLine
+ TokenTypeBackgroundLine
+ TokenTypeScenarioLine
+ TokenTypeExamplesLine
+ TokenTypeStepLine
+ TokenTypeDocStringSeparator
+ TokenTypeTableRow
+ TokenTypeLanguage
+ TokenTypeOther
+)
+
+func tokenTypeForRule(rt RuleType) TokenType {
+ return TokenTypeNone
+}
+
+func (t TokenType) Name() string {
+ switch t {
+ case TokenTypeEOF:
+ return "EOF"
+ case TokenTypeEmpty:
+ return "Empty"
+ case TokenTypeComment:
+ return "Comment"
+ case TokenTypeTagLine:
+ return "TagLine"
+ case TokenTypeFeatureLine:
+ return "FeatureLine"
+ case TokenTypeRuleLine:
+ return "RuleLine"
+ case TokenTypeBackgroundLine:
+ return "BackgroundLine"
+ case TokenTypeScenarioLine:
+ return "ScenarioLine"
+ case TokenTypeExamplesLine:
+ return "ExamplesLine"
+ case TokenTypeStepLine:
+ return "StepLine"
+ case TokenTypeDocStringSeparator:
+ return "DocStringSeparator"
+ case TokenTypeTableRow:
+ return "TableRow"
+ case TokenTypeLanguage:
+ return "Language"
+ case TokenTypeOther:
+ return "Other"
+ }
+ return ""
+}
+
+func (t TokenType) RuleType() RuleType {
+ switch t {
+ case TokenTypeEOF:
+ return RuleTypeEOF
+ case TokenTypeEmpty:
+ return RuleTypeEmpty
+ case TokenTypeComment:
+ return RuleTypeComment
+ case TokenTypeTagLine:
+ return RuleTypeTagLine
+ case TokenTypeFeatureLine:
+ return RuleTypeFeatureLine
+ case TokenTypeRuleLine:
+ return RuleTypeRuleLine
+ case TokenTypeBackgroundLine:
+ return RuleTypeBackgroundLine
+ case TokenTypeScenarioLine:
+ return RuleTypeScenarioLine
+ case TokenTypeExamplesLine:
+ return RuleTypeExamplesLine
+ case TokenTypeStepLine:
+ return RuleTypeStepLine
+ case TokenTypeDocStringSeparator:
+ return RuleTypeDocStringSeparator
+ case TokenTypeTableRow:
+ return RuleTypeTableRow
+ case TokenTypeLanguage:
+ return RuleTypeLanguage
+ case TokenTypeOther:
+ return RuleTypeOther
+ }
+ return RuleTypeNone
+}
+
+type RuleType int
+
+const (
+ RuleTypeNone RuleType = iota
+
+ RuleTypeEOF
+ RuleTypeEmpty
+ RuleTypeComment
+ RuleTypeTagLine
+ RuleTypeFeatureLine
+ RuleTypeRuleLine
+ RuleTypeBackgroundLine
+ RuleTypeScenarioLine
+ RuleTypeExamplesLine
+ RuleTypeStepLine
+ RuleTypeDocStringSeparator
+ RuleTypeTableRow
+ RuleTypeLanguage
+ RuleTypeOther
+ RuleTypeGherkinDocument
+ RuleTypeFeature
+ RuleTypeFeatureHeader
+ RuleTypeRule
+ RuleTypeRuleHeader
+ RuleTypeBackground
+ RuleTypeScenarioDefinition
+ RuleTypeScenario
+ RuleTypeExamplesDefinition
+ RuleTypeExamples
+ RuleTypeExamplesTable
+ RuleTypeStep
+ RuleTypeStepArg
+ RuleTypeDataTable
+ RuleTypeDocString
+ RuleTypeTags
+ RuleTypeDescriptionHelper
+ RuleTypeDescription
+)
+
+func (t RuleType) IsEOF() bool {
+ return t == RuleTypeEOF
+}
+func (t RuleType) Name() string {
+ switch t {
+ case RuleTypeEOF:
+ return "#EOF"
+ case RuleTypeEmpty:
+ return "#Empty"
+ case RuleTypeComment:
+ return "#Comment"
+ case RuleTypeTagLine:
+ return "#TagLine"
+ case RuleTypeFeatureLine:
+ return "#FeatureLine"
+ case RuleTypeRuleLine:
+ return "#RuleLine"
+ case RuleTypeBackgroundLine:
+ return "#BackgroundLine"
+ case RuleTypeScenarioLine:
+ return "#ScenarioLine"
+ case RuleTypeExamplesLine:
+ return "#ExamplesLine"
+ case RuleTypeStepLine:
+ return "#StepLine"
+ case RuleTypeDocStringSeparator:
+ return "#DocStringSeparator"
+ case RuleTypeTableRow:
+ return "#TableRow"
+ case RuleTypeLanguage:
+ return "#Language"
+ case RuleTypeOther:
+ return "#Other"
+ case RuleTypeGherkinDocument:
+ return "GherkinDocument"
+ case RuleTypeFeature:
+ return "Feature"
+ case RuleTypeFeatureHeader:
+ return "FeatureHeader"
+ case RuleTypeRule:
+ return "Rule"
+ case RuleTypeRuleHeader:
+ return "RuleHeader"
+ case RuleTypeBackground:
+ return "Background"
+ case RuleTypeScenarioDefinition:
+ return "ScenarioDefinition"
+ case RuleTypeScenario:
+ return "Scenario"
+ case RuleTypeExamplesDefinition:
+ return "ExamplesDefinition"
+ case RuleTypeExamples:
+ return "Examples"
+ case RuleTypeExamplesTable:
+ return "ExamplesTable"
+ case RuleTypeStep:
+ return "Step"
+ case RuleTypeStepArg:
+ return "StepArg"
+ case RuleTypeDataTable:
+ return "DataTable"
+ case RuleTypeDocString:
+ return "DocString"
+ case RuleTypeTags:
+ return "Tags"
+ case RuleTypeDescriptionHelper:
+ return "DescriptionHelper"
+ case RuleTypeDescription:
+ return "Description"
+ }
+ return ""
+}
+
+type Location struct {
+ Line int
+ Column int
+}
+
+type parseError struct {
+ msg string
+ loc *Location
+}
+
+func (a *parseError) Error() string {
+ return fmt.Sprintf("(%d:%d): %s", a.loc.Line, a.loc.Column, a.msg)
+}
+
+type parseErrors []error
+
+func (pe parseErrors) Error() string {
+ var ret = []string{"Parser errors:"}
+ for i := range pe {
+ ret = append(ret, pe[i].Error())
+ }
+ return strings.Join(ret, "\n")
+}
+
+func (p *parser) Parse(s Scanner, m Matcher) (err error) {
+ p.builder.Reset()
+ m.Reset()
+ ctxt := &parseContext{p, s, p.builder, m, nil, nil}
+ var state int
+ ctxt.startRule(RuleTypeGherkinDocument)
+ for {
+ gl, eof, err := ctxt.scan()
+ if err != nil {
+ ctxt.addError(err)
+ if p.stopAtFirstError {
+ break
+ }
+ }
+ state, err = ctxt.match(state, gl)
+ if err != nil {
+ ctxt.addError(err)
+ if p.stopAtFirstError {
+ break
+ }
+ }
+ if eof {
+ // done! \o/
+ break
+ }
+ }
+ ctxt.endRule(RuleTypeGherkinDocument)
+ if len(ctxt.errors) > 0 {
+ return ctxt.errors
+ }
+ return
+}
+
+type parseContext struct {
+ p *parser
+ s Scanner
+ b Builder
+ m Matcher
+ queue []*scanResult
+ errors parseErrors
+}
+
+func (ctxt *parseContext) addError(e error) {
+ ctxt.errors = append(ctxt.errors, e)
+ // if (p.errors.length > 10)
+ // throw Errors.CompositeParserException.create(p.errors);
+}
+
+type scanResult struct {
+ line *Line
+ atEof bool
+ err error
+}
+
+func (ctxt *parseContext) scan() (*Line, bool, error) {
+ l := len(ctxt.queue)
+ if l > 0 {
+ x := ctxt.queue[0]
+ ctxt.queue = ctxt.queue[1:]
+ return x.line, x.atEof, x.err
+ }
+ return ctxt.s.Scan()
+}
+
+func (ctxt *parseContext) startRule(r RuleType) (bool, error) {
+ ok, err := ctxt.b.StartRule(r)
+ if err != nil {
+ ctxt.addError(err)
+ }
+ return ok, err
+}
+
+func (ctxt *parseContext) endRule(r RuleType) (bool, error) {
+ ok, err := ctxt.b.EndRule(r)
+ if err != nil {
+ ctxt.addError(err)
+ }
+ return ok, err
+}
+
+func (ctxt *parseContext) build(t *Token) (bool, error) {
+ ok, err := ctxt.b.Build(t)
+ if err != nil {
+ ctxt.addError(err)
+ }
+ return ok, err
+}
+
+func (ctxt *parseContext) match(state int, line *Line) (newState int, err error) {
+ switch state {
+ case 0:
+ return ctxt.matchAt0(line)
+ case 1:
+ return ctxt.matchAt1(line)
+ case 2:
+ return ctxt.matchAt2(line)
+ case 3:
+ return ctxt.matchAt3(line)
+ case 4:
+ return ctxt.matchAt4(line)
+ case 5:
+ return ctxt.matchAt5(line)
+ case 6:
+ return ctxt.matchAt6(line)
+ case 7:
+ return ctxt.matchAt7(line)
+ case 8:
+ return ctxt.matchAt8(line)
+ case 9:
+ return ctxt.matchAt9(line)
+ case 10:
+ return ctxt.matchAt10(line)
+ case 11:
+ return ctxt.matchAt11(line)
+ case 12:
+ return ctxt.matchAt12(line)
+ case 13:
+ return ctxt.matchAt13(line)
+ case 14:
+ return ctxt.matchAt14(line)
+ case 15:
+ return ctxt.matchAt15(line)
+ case 16:
+ return ctxt.matchAt16(line)
+ case 17:
+ return ctxt.matchAt17(line)
+ case 18:
+ return ctxt.matchAt18(line)
+ case 19:
+ return ctxt.matchAt19(line)
+ case 20:
+ return ctxt.matchAt20(line)
+ case 21:
+ return ctxt.matchAt21(line)
+ case 22:
+ return ctxt.matchAt22(line)
+ case 23:
+ return ctxt.matchAt23(line)
+ case 24:
+ return ctxt.matchAt24(line)
+ case 25:
+ return ctxt.matchAt25(line)
+ case 26:
+ return ctxt.matchAt26(line)
+ case 27:
+ return ctxt.matchAt27(line)
+ case 28:
+ return ctxt.matchAt28(line)
+ case 29:
+ return ctxt.matchAt29(line)
+ case 30:
+ return ctxt.matchAt30(line)
+ case 31:
+ return ctxt.matchAt31(line)
+ case 32:
+ return ctxt.matchAt32(line)
+ case 33:
+ return ctxt.matchAt33(line)
+ case 34:
+ return ctxt.matchAt34(line)
+ case 35:
+ return ctxt.matchAt35(line)
+ case 36:
+ return ctxt.matchAt36(line)
+ case 37:
+ return ctxt.matchAt37(line)
+ case 38:
+ return ctxt.matchAt38(line)
+ case 39:
+ return ctxt.matchAt39(line)
+ case 40:
+ return ctxt.matchAt40(line)
+ case 42:
+ return ctxt.matchAt42(line)
+ case 43:
+ return ctxt.matchAt43(line)
+ case 44:
+ return ctxt.matchAt44(line)
+ case 45:
+ return ctxt.matchAt45(line)
+ case 46:
+ return ctxt.matchAt46(line)
+ case 47:
+ return ctxt.matchAt47(line)
+ case 48:
+ return ctxt.matchAt48(line)
+ case 49:
+ return ctxt.matchAt49(line)
+ default:
+ return state, fmt.Errorf("Unknown state: %+v", state)
+ }
+}
+
+// Start
+func (ctxt *parseContext) matchAt0(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchLanguage(line); ok {
+ ctxt.startRule(RuleTypeFeature)
+ ctxt.startRule(RuleTypeFeatureHeader)
+ ctxt.build(token)
+ return 1, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.startRule(RuleTypeFeature)
+ ctxt.startRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 2, err
+ }
+ if ok, token, err := ctxt.matchFeatureLine(line); ok {
+ ctxt.startRule(RuleTypeFeature)
+ ctxt.startRule(RuleTypeFeatureHeader)
+ ctxt.build(token)
+ return 3, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 0, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 0, err
+ }
+
+ // var stateComment = "State: 0 - Start"
+ var expectedTokens = []string{"#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 0, err
+}
+
+// GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0
+func (ctxt *parseContext) matchAt1(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 2, err
+ }
+ if ok, token, err := ctxt.matchFeatureLine(line); ok {
+ ctxt.build(token)
+ return 3, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 1, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 1, err
+ }
+
+ // var stateComment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0"
+ var expectedTokens = []string{"#TagLine", "#FeatureLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 1, err
+}
+
+// GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0
+func (ctxt *parseContext) matchAt2(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.build(token)
+ return 2, err
+ }
+ if ok, token, err := ctxt.matchFeatureLine(line); ok {
+ ctxt.endRule(RuleTypeTags)
+ ctxt.build(token)
+ return 3, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 2, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 2, err
+ }
+
+ // var stateComment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0"
+ var expectedTokens = []string{"#TagLine", "#FeatureLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 2, err
+}
+
+// GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0
+func (ctxt *parseContext) matchAt3(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 3, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 5, err
+ }
+ if ok, token, err := ctxt.matchBackgroundLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeBackground)
+ ctxt.build(token)
+ return 6, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 4, err
+ }
+
+ // var stateComment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 3, err
+}
+
+// GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt4(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 5, err
+ }
+ if ok, token, err := ctxt.matchBackgroundLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeBackground)
+ ctxt.build(token)
+ return 6, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 4, err
+ }
+
+ // var stateComment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 4, err
+}
+
+// GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt5(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 5, err
+ }
+ if ok, token, err := ctxt.matchBackgroundLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeBackground)
+ ctxt.build(token)
+ return 6, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeFeatureHeader)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 5, err
+ }
+
+ // var stateComment = "State: 5 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 5, err
+}
+
+// GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0
+func (ctxt *parseContext) matchAt6(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 6, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 8, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 9, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 7, err
+ }
+
+ // var stateComment = "State: 6 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 6, err
+}
+
+// GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 8, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 9, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 7, err
+ }
+
+ // var stateComment = "State: 7 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 7, err
+}
+
+// GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 8, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 9, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 8, err
+ }
+
+ // var stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 8, err
+}
+
+// GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0
+func (ctxt *parseContext) matchAt9(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeDataTable)
+ ctxt.build(token)
+ return 10, err
+ }
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.startRule(RuleTypeDocString)
+ ctxt.build(token)
+ return 48, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 9, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 9, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 9, err
+ }
+
+ // var stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 9, err
+}
+
+// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0
+func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.build(token)
+ return 10, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 9, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 10, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 10, err
+ }
+
+ // var stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 10, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0
+func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeTags)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 11, err
+ }
+
+ // var stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"
+ var expectedTokens = []string{"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 11, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0
+func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 14, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 15, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 13, err
+ }
+
+ // var stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 12, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 14, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 15, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 13, err
+ }
+
+ // var stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 13, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt14(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 14, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 15, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 14, err
+ }
+
+ // var stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 14, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0
+func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeDataTable)
+ ctxt.build(token)
+ return 16, err
+ }
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.startRule(RuleTypeDocString)
+ ctxt.build(token)
+ return 46, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 15, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 15, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 15, err
+ }
+
+ // var stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 15, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0
+func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.build(token)
+ return 16, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 15, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 16, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 16, err
+ }
+
+ // var stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 16, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0
+func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.build(token)
+ return 17, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeTags)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 17, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 17, err
+ }
+
+ // var stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"
+ var expectedTokens = []string{"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 17, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0
+func (ctxt *parseContext) matchAt18(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 20, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeExamplesTable)
+ ctxt.build(token)
+ return 21, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 19, err
+ }
+
+ // var stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 18, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 20, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeExamplesTable)
+ ctxt.build(token)
+ return 21, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 19, err
+ }
+
+ // var stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 19, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 20, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeExamplesTable)
+ ctxt.build(token)
+ return 21, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 20, err
+ }
+
+ // var stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 20, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0
+func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.build(token)
+ return 21, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 21, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 21, err
+ }
+
+ // var stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 21, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>#RuleLine:0
+func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 24, err
+ }
+ if ok, token, err := ctxt.matchBackgroundLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeBackground)
+ ctxt.build(token)
+ return 25, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 23, err
+ }
+
+ // var stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>#RuleLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 22, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 24, err
+ }
+ if ok, token, err := ctxt.matchBackgroundLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeBackground)
+ ctxt.build(token)
+ return 25, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 23, err
+ }
+
+ // var stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 23, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 24, err
+ }
+ if ok, token, err := ctxt.matchBackgroundLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeBackground)
+ ctxt.build(token)
+ return 25, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeRuleHeader)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 24, err
+ }
+
+ // var stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 24, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0
+func (ctxt *parseContext) matchAt25(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 25, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 27, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 28, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 26, err
+ }
+
+ // var stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 25, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 27, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 28, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 26, err
+ }
+
+ // var stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 26, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 27, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 28, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 27, err
+ }
+
+ // var stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 27, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0
+func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeDataTable)
+ ctxt.build(token)
+ return 29, err
+ }
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.startRule(RuleTypeDocString)
+ ctxt.build(token)
+ return 44, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 28, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 28, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 28, err
+ }
+
+ // var stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 28, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0
+func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.build(token)
+ return 29, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 28, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 29, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 29, err
+ }
+
+ // var stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 29, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0
+func (ctxt *parseContext) matchAt30(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeTags)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 30, err
+ }
+
+ // var stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"
+ var expectedTokens = []string{"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 30, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0
+func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 33, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 34, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 32, err
+ }
+
+ // var stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 31, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 33, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 34, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 32, err
+ }
+
+ // var stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 32, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 33, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 34, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 33, err
+ }
+
+ // var stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 33, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0
+func (ctxt *parseContext) matchAt34(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeDataTable)
+ ctxt.build(token)
+ return 35, err
+ }
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.startRule(RuleTypeDocString)
+ ctxt.build(token)
+ return 42, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 34, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 34, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 34, err
+ }
+
+ // var stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 34, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0
+func (ctxt *parseContext) matchAt35(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.build(token)
+ return 35, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 34, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDataTable)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 35, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 35, err
+ }
+
+ // var stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 35, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0
+func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.build(token)
+ return 36, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeTags)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 36, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 36, err
+ }
+
+ // var stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"
+ var expectedTokens = []string{"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 36, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0
+func (ctxt *parseContext) matchAt37(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 39, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeExamplesTable)
+ ctxt.build(token)
+ return 40, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.startRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 38, err
+ }
+
+ // var stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"
+ var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 37, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0
+func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.build(token)
+ return 39, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.startRule(RuleTypeExamplesTable)
+ ctxt.build(token)
+ return 40, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDescription)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 38, err
+ }
+
+ // var stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>#Other:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 38, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0
+func (ctxt *parseContext) matchAt39(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 39, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.startRule(RuleTypeExamplesTable)
+ ctxt.build(token)
+ return 40, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 39, err
+ }
+
+ // var stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:2>#Comment:0"
+ var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 39, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0
+func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchTableRow(line); ok {
+ ctxt.build(token)
+ return 40, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeExamplesTable)
+ ctxt.endRule(RuleTypeExamples)
+ ctxt.endRule(RuleTypeExamplesDefinition)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 40, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 40, err
+ }
+
+ // var stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"
+ var expectedTokens = []string{"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 40, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt42(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.build(token)
+ return 43, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 42, err
+ }
+
+ // var stateComment = "State: 42 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"
+ var expectedTokens = []string{"#DocStringSeparator", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 42, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt43(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 34, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 36, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 37, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 43, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 43, err
+ }
+
+ // var stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"
+ var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 43, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt44(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.build(token)
+ return 45, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 44, err
+ }
+
+ // var stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"
+ var expectedTokens = []string{"#DocStringSeparator", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 44, err
+}
+
+// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt45(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 28, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 30, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 31, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 45, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 45, err
+ }
+
+ // var stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"
+ var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 45, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt46(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.build(token)
+ return 47, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 46, err
+ }
+
+ // var stateComment = "State: 46 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"
+ var expectedTokens = []string{"#DocStringSeparator", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 46, err
+}
+
+// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt47(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 15, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ if ctxt.lookahead0(line) {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 17, err
+ }
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchExamplesLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeExamplesDefinition)
+ ctxt.startRule(RuleTypeExamples)
+ ctxt.build(token)
+ return 18, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeScenario)
+ ctxt.endRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 47, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 47, err
+ }
+
+ // var stateComment = "State: 47 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"
+ var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 47, err
+}
+
+// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt48(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchDocStringSeparator(line); ok {
+ ctxt.build(token)
+ return 49, err
+ }
+ if ok, token, err := ctxt.matchOther(line); ok {
+ ctxt.build(token)
+ return 48, err
+ }
+
+ // var stateComment = "State: 48 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"
+ var expectedTokens = []string{"#DocStringSeparator", "#Other"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 48, err
+}
+
+// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0
+func (ctxt *parseContext) matchAt49(line *Line) (newState int, err error) {
+ if ok, token, err := ctxt.matchEOF(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.endRule(RuleTypeFeature)
+ ctxt.build(token)
+ return 41, err
+ }
+ if ok, token, err := ctxt.matchStepLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.startRule(RuleTypeStep)
+ ctxt.build(token)
+ return 9, err
+ }
+ if ok, token, err := ctxt.matchTagLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeTags)
+ ctxt.build(token)
+ return 11, err
+ }
+ if ok, token, err := ctxt.matchScenarioLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeScenarioDefinition)
+ ctxt.startRule(RuleTypeScenario)
+ ctxt.build(token)
+ return 12, err
+ }
+ if ok, token, err := ctxt.matchRuleLine(line); ok {
+ ctxt.endRule(RuleTypeDocString)
+ ctxt.endRule(RuleTypeStep)
+ ctxt.endRule(RuleTypeBackground)
+ ctxt.startRule(RuleTypeRule)
+ ctxt.startRule(RuleTypeRuleHeader)
+ ctxt.build(token)
+ return 22, err
+ }
+ if ok, token, err := ctxt.matchComment(line); ok {
+ ctxt.build(token)
+ return 49, err
+ }
+ if ok, token, err := ctxt.matchEmpty(line); ok {
+ ctxt.build(token)
+ return 49, err
+ }
+
+ // var stateComment = "State: 49 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"
+ var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return 49, err
+}
+
+type Matcher interface {
+ MatchEOF(line *Line) (bool, *Token, error)
+ MatchEmpty(line *Line) (bool, *Token, error)
+ MatchComment(line *Line) (bool, *Token, error)
+ MatchTagLine(line *Line) (bool, *Token, error)
+ MatchFeatureLine(line *Line) (bool, *Token, error)
+ MatchRuleLine(line *Line) (bool, *Token, error)
+ MatchBackgroundLine(line *Line) (bool, *Token, error)
+ MatchScenarioLine(line *Line) (bool, *Token, error)
+ MatchExamplesLine(line *Line) (bool, *Token, error)
+ MatchStepLine(line *Line) (bool, *Token, error)
+ MatchDocStringSeparator(line *Line) (bool, *Token, error)
+ MatchTableRow(line *Line) (bool, *Token, error)
+ MatchLanguage(line *Line) (bool, *Token, error)
+ MatchOther(line *Line) (bool, *Token, error)
+ Reset()
+}
+
+func (ctxt *parseContext) isMatchEOF(line *Line) bool {
+ ok, _, _ := ctxt.matchEOF(line)
+ return ok
+}
+func (ctxt *parseContext) matchEOF(line *Line) (bool, *Token, error) {
+ return ctxt.m.MatchEOF(line)
+}
+
+func (ctxt *parseContext) isMatchEmpty(line *Line) bool {
+ ok, _, _ := ctxt.matchEmpty(line)
+ return ok
+}
+func (ctxt *parseContext) matchEmpty(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchEmpty(line)
+}
+
+func (ctxt *parseContext) isMatchComment(line *Line) bool {
+ ok, _, _ := ctxt.matchComment(line)
+ return ok
+}
+func (ctxt *parseContext) matchComment(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchComment(line)
+}
+
+func (ctxt *parseContext) isMatchTagLine(line *Line) bool {
+ ok, _, _ := ctxt.matchTagLine(line)
+ return ok
+}
+func (ctxt *parseContext) matchTagLine(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchTagLine(line)
+}
+
+func (ctxt *parseContext) isMatchFeatureLine(line *Line) bool {
+ ok, _, _ := ctxt.matchFeatureLine(line)
+ return ok
+}
+func (ctxt *parseContext) matchFeatureLine(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchFeatureLine(line)
+}
+
+func (ctxt *parseContext) isMatchRuleLine(line *Line) bool {
+ ok, _, _ := ctxt.matchRuleLine(line)
+ return ok
+}
+func (ctxt *parseContext) matchRuleLine(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchRuleLine(line)
+}
+
+func (ctxt *parseContext) isMatchBackgroundLine(line *Line) bool {
+ ok, _, _ := ctxt.matchBackgroundLine(line)
+ return ok
+}
+func (ctxt *parseContext) matchBackgroundLine(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchBackgroundLine(line)
+}
+
+func (ctxt *parseContext) isMatchScenarioLine(line *Line) bool {
+ ok, _, _ := ctxt.matchScenarioLine(line)
+ return ok
+}
+func (ctxt *parseContext) matchScenarioLine(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchScenarioLine(line)
+}
+
+func (ctxt *parseContext) isMatchExamplesLine(line *Line) bool {
+ ok, _, _ := ctxt.matchExamplesLine(line)
+ return ok
+}
+func (ctxt *parseContext) matchExamplesLine(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchExamplesLine(line)
+}
+
+func (ctxt *parseContext) isMatchStepLine(line *Line) bool {
+ ok, _, _ := ctxt.matchStepLine(line)
+ return ok
+}
+func (ctxt *parseContext) matchStepLine(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchStepLine(line)
+}
+
+func (ctxt *parseContext) isMatchDocStringSeparator(line *Line) bool {
+ ok, _, _ := ctxt.matchDocStringSeparator(line)
+ return ok
+}
+func (ctxt *parseContext) matchDocStringSeparator(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchDocStringSeparator(line)
+}
+
+func (ctxt *parseContext) isMatchTableRow(line *Line) bool {
+ ok, _, _ := ctxt.matchTableRow(line)
+ return ok
+}
+func (ctxt *parseContext) matchTableRow(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchTableRow(line)
+}
+
+func (ctxt *parseContext) isMatchLanguage(line *Line) bool {
+ ok, _, _ := ctxt.matchLanguage(line)
+ return ok
+}
+func (ctxt *parseContext) matchLanguage(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchLanguage(line)
+}
+
+func (ctxt *parseContext) isMatchOther(line *Line) bool {
+ ok, _, _ := ctxt.matchOther(line)
+ return ok
+}
+func (ctxt *parseContext) matchOther(line *Line) (bool, *Token, error) {
+ if line.IsEof() {
+ return false, nil, nil
+ }
+ return ctxt.m.MatchOther(line)
+}
+
+func (ctxt *parseContext) lookahead0(initialLine *Line) bool {
+ var queue []*scanResult
+ var match bool
+
+ for {
+ line, atEof, err := ctxt.scan()
+ queue = append(queue, &scanResult{line, atEof, err})
+
+ if false || ctxt.isMatchExamplesLine(line) {
+ match = true
+ break
+ }
+ if !(false || ctxt.isMatchEmpty(line) || ctxt.isMatchComment(line) || ctxt.isMatchTagLine(line)) {
+ break
+ }
+ if atEof {
+ break
+ }
+ }
+
+ ctxt.queue = append(ctxt.queue, queue...)
+
+ return match
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/parser.go.razor b/vendor/github.com/cucumber/gherkin-go/v11/parser.go.razor
new file mode 100644
index 00000000..18447f09
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/parser.go.razor
@@ -0,0 +1,310 @@
+@using Berp;
+@helper CallProduction(ProductionRule production)
+{
+ switch(production.Type)
+ {
+ case ProductionRuleType.Start:
+ @:ctxt.startRule(@Raw("RuleType" + production.RuleName.Replace("#", "")));
+ break;
+ case ProductionRuleType.End:
+ @:ctxt.endRule(@Raw("RuleType" + production.RuleName.Replace("#", "")));
+ break;
+ case ProductionRuleType.Process:
+ @:ctxt.build(token);
+ break;
+ }
+}
+@helper HandleParserError(IEnumerable expectedTokens, State state)
+{
+ // var stateComment = "State: @state.Id - @Raw(state.Comment)"
+ var expectedTokens = []string{"@Raw(string.Join("\", \"", expectedTokens))"}
+ if line.IsEof() {
+ err = &parseError{
+ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens,", ")),
+ loc: &Location{Line: line.LineNumber, Column: 0},
+ }
+ } else {
+ err = &parseError{
+ msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens,", "), line.LineText),
+ loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1},
+ }
+ }
+ // if (ctxt.p.stopAtFirstError) throw error;
+ //ctxt.addError(err)
+ return @state.Id, err}
+@helper MatchToken(TokenType tokenType)
+{ctxt.match@(tokenType)(line)}
+@helper IsMatchToken(TokenType tokenType)
+{ctxt.isMatch@(tokenType)(line)}
+@helper TokenConst(Rule rule)
+{@Raw("rule" + rule.Name.Replace("#", "Int"))}
+//
+// This file is generated. Do not edit! Edit parser.go.razor instead.
+
+//
+package gherkin
+
+import (
+ "fmt"
+ "strings"
+)
+
+type TokenType int
+
+const (
+ TokenTypeNone TokenType = iota
+ @foreach(var rule in Model.RuleSet.TokenRules)
+ { @Raw("TokenType" + rule.Name.Replace("#", ""))
+}
+)
+
+func tokenTypeForRule(rt RuleType) TokenType {
+ return TokenTypeNone
+}
+
+func (t TokenType) Name() string {
+ switch t {
+ @foreach(var rule in Model.RuleSet.TokenRules)
+ { case @Raw("TokenType" + rule.Name.Replace("#", "")): return "@Raw(rule.Name.Replace("#", ""))"
+}
+ }
+ return ""
+}
+
+func (t TokenType) RuleType() RuleType {
+ switch t {
+ @foreach(var rule in Model.RuleSet.TokenRules)
+ { case @Raw("TokenType" + rule.Name.Replace("#", "")): return @Raw("RuleType" + rule.Name.Replace("#", ""))
+}
+ }
+ return RuleTypeNone
+}
+
+
+type RuleType int
+
+const (
+ RuleTypeNone RuleType = iota
+
+ @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule))
+ { @Raw("RuleType" + rule.Name.Replace("#", ""))
+}
+)
+
+func (t RuleType) IsEOF() bool {
+ return t == RuleTypeEOF
+}
+func (t RuleType) Name() string {
+ switch t {
+ @foreach(var rule in Model.RuleSet.Where(r => !r.TempRule))
+ { case @Raw("RuleType" + rule.Name.Replace("#", "")): return "@Raw(rule.Name)"
+}
+ }
+ return ""
+}
+
+type Location struct {
+ Line int
+ Column int
+}
+
+type parseError struct {
+ msg string
+ loc *Location
+}
+
+func (a *parseError) Error() string {
+ return fmt.Sprintf("(%d:%d): %s", a.loc.Line, a.loc.Column, a.msg)
+}
+
+type parseErrors []error
+func (pe parseErrors) Error() string {
+ var ret = []string{"Parser errors:"}
+ for i := range pe {
+ ret = append(ret, pe[i].Error())
+ }
+ return strings.Join(ret,"\n")
+}
+
+func (p *parser) Parse(s Scanner, m Matcher) (err error) {
+ p.builder.Reset()
+ m.Reset()
+ ctxt := &parseContext{p,s,p.builder,m,nil,nil}
+ var state int
+ ctxt.startRule(@Raw("RuleType" + @Model.RuleSet.StartRule.Name))
+ for {
+ gl, eof, err := ctxt.scan()
+ if err != nil {
+ ctxt.addError(err)
+ if p.stopAtFirstError {
+ break
+ }
+ }
+ state, err = ctxt.match(state, gl)
+ if err != nil {
+ ctxt.addError(err)
+ if p.stopAtFirstError {
+ break
+ }
+ }
+ if eof {
+ // done! \o/
+ break
+ }
+ }
+ ctxt.endRule(@Raw("RuleType" + @Model.RuleSet.StartRule.Name))
+ if len(ctxt.errors) > 0 {
+ return ctxt.errors
+ }
+ return
+}
+
+type parseContext struct {
+ p *parser
+ s Scanner
+ b Builder
+ m Matcher
+ queue []*scanResult
+ errors parseErrors
+}
+
+func (ctxt *parseContext) addError(e error) {
+ ctxt.errors = append(ctxt.errors, e);
+ // if (p.errors.length > 10)
+ // throw Errors.CompositeParserException.create(p.errors);
+}
+
+type scanResult struct {
+ line *Line
+ atEof bool
+ err error
+}
+func (ctxt *parseContext) scan() (*Line, bool, error) {
+ l := len(ctxt.queue)
+ if l > 0 {
+ x := ctxt.queue[0]
+ ctxt.queue = ctxt.queue[1:]
+ return x.line, x.atEof, x.err
+ }
+ return ctxt.s.Scan()
+}
+
+func (ctxt *parseContext) startRule(r RuleType) (bool, error) {
+ ok, err := ctxt.b.StartRule(r)
+ if err != nil {
+ ctxt.addError(err)
+ }
+ return ok, err
+}
+
+func (ctxt *parseContext) endRule(r RuleType) (bool, error) {
+ ok, err := ctxt.b.EndRule(r)
+ if err != nil {
+ ctxt.addError(err)
+ }
+ return ok, err
+}
+
+func (ctxt *parseContext) build(t *Token) (bool, error) {
+ ok, err := ctxt.b.Build(t)
+ if err != nil {
+ ctxt.addError(err)
+ }
+ return ok, err
+}
+
+
+func (ctxt *parseContext) match(state int, line *Line) (newState int, err error) {
+ switch(state) {
+ @foreach(var state in Model.States.Values.Where(s => !s.IsEndState))
+ {
+ @:case @state.Id:
+ @:return ctxt.matchAt@(state.Id)(line);
+ }
+ default:
+ return state, fmt.Errorf("Unknown state: %+v", state);
+ }
+}
+
+@foreach(var state in Model.States.Values.Where(s => !s.IsEndState))
+{
+
+ // @Raw(state.Comment)
+func (ctxt *parseContext) matchAt@(state.Id)(line *Line) (newState int, err error) {
+ @foreach(var transition in state.Transitions)
+ {
+ @:if ok, token, err := @MatchToken(transition.TokenType); ok {
+ if (transition.LookAheadHint != null)
+ {
+ @:if ctxt.lookahead@(transition.LookAheadHint.Id)(line) {
+ }
+ foreach(var production in transition.Productions)
+ {
+ @CallProduction(production)
+ }
+ @:return @transition.TargetState, err;
+ if (transition.LookAheadHint != null)
+ {
+ @:}
+ }
+ @:}
+ }
+ @HandleParserError(state.Transitions.Select(t => "#" + t.TokenType.ToString()).Distinct(), state)
+}
+
+}
+
+type Matcher interface {
+ @foreach(var rule in Model.RuleSet.TokenRules)
+ { Match@(rule.Name.Replace("#", ""))(line *Line) (bool,*Token,error)
+}
+ Reset()
+}
+@foreach(var rule in Model.RuleSet.TokenRules)
+{
+
+func (ctxt *parseContext) isMatch@(rule.Name.Replace("#", ""))(line *Line) bool {
+ ok, _, _ := ctxt.match@(rule.Name.Replace("#", ""))(line)
+ return ok
+}
+func (ctxt *parseContext) match@(rule.Name.Replace("#", ""))(line *Line) (bool, *Token, error) {
+ @if (rule.Name != "#EOF")
+ {
+ @:if line.IsEof() {
+ @: return false, nil, nil
+ @:}
+ }
+ return ctxt.m.Match@(rule.Name.Replace("#", ""))(line);
+}
+
+}
+
+@foreach(var lookAheadHint in Model.RuleSet.LookAheadHints)
+{
+
+func (ctxt *parseContext) lookahead@(lookAheadHint.Id)(initialLine *Line) bool {
+ var queue []*scanResult
+ var match bool
+
+ for {
+ line, atEof, err := ctxt.scan();
+ queue = append(queue, &scanResult{line,atEof,err});
+
+ if false @foreach(var tokenType in lookAheadHint.ExpectedTokens) { || @IsMatchToken(tokenType)} {
+ match = true;
+ break
+ }
+ if !(false @foreach(var tokenType in lookAheadHint.Skip) { || @IsMatchToken(tokenType)}) {
+ break
+ }
+ if atEof {
+ break
+ }
+ }
+
+ ctxt.queue = append(ctxt.queue, queue...)
+
+ return match;
+ }
+
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/pickles.go b/vendor/github.com/cucumber/gherkin-go/v11/pickles.go
new file mode 100644
index 00000000..4121ac04
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/pickles.go
@@ -0,0 +1,248 @@
+package gherkin
+
+import (
+ "fmt"
+ "github.com/cucumber/messages-go/v10"
+ "strings"
+)
+
+func Pickles(gherkinDocument messages.GherkinDocument, uri string, newId func() string) []*messages.Pickle {
+ pickles := make([]*messages.Pickle, 0)
+ if gherkinDocument.Feature == nil {
+ return pickles
+ }
+ language := gherkinDocument.Feature.Language
+
+ pickles = compileFeature(pickles, *gherkinDocument.Feature, uri, language, newId)
+ return pickles
+}
+
+func compileFeature(pickles []*messages.Pickle, feature messages.GherkinDocument_Feature, uri string, language string, newId func() string) []*messages.Pickle {
+ featureBackgroundSteps := make([]*messages.GherkinDocument_Feature_Step, 0)
+ featureTags := feature.Tags
+ for _, child := range feature.Children {
+ switch t := child.Value.(type) {
+ case *messages.GherkinDocument_Feature_FeatureChild_Background:
+ featureBackgroundSteps = append(featureBackgroundSteps, t.Background.Steps...)
+ case *messages.GherkinDocument_Feature_FeatureChild_Rule_:
+ pickles = compileRule(pickles, child.GetRule(), featureTags, featureBackgroundSteps, uri, language, newId)
+ case *messages.GherkinDocument_Feature_FeatureChild_Scenario:
+ scenario := t.Scenario
+ if len(scenario.GetExamples()) == 0 {
+ pickles = compileScenario(pickles, featureBackgroundSteps, scenario, featureTags, uri, language, newId)
+ } else {
+ pickles = compileScenarioOutline(pickles, scenario, featureTags, featureBackgroundSteps, uri, language, newId)
+ }
+ default:
+ panic(fmt.Sprintf("unexpected %T feature child", child))
+ }
+ }
+ return pickles
+}
+
+func compileRule(
+ pickles []*messages.Pickle,
+ rule *messages.GherkinDocument_Feature_FeatureChild_Rule,
+ tags []*messages.GherkinDocument_Feature_Tag,
+ featureBackgroundSteps []*messages.GherkinDocument_Feature_Step,
+ uri string,
+ language string,
+ newId func() string,
+) []*messages.Pickle {
+ ruleBackgroundSteps := make([]*messages.GherkinDocument_Feature_Step, 0)
+ ruleBackgroundSteps = append(ruleBackgroundSteps, featureBackgroundSteps...)
+
+ for _, child := range rule.Children {
+ switch t := child.Value.(type) {
+ case *messages.GherkinDocument_Feature_FeatureChild_RuleChild_Background:
+ ruleBackgroundSteps = append(ruleBackgroundSteps, t.Background.Steps...)
+ case *messages.GherkinDocument_Feature_FeatureChild_RuleChild_Scenario:
+ scenario := t.Scenario
+ if len(scenario.GetExamples()) == 0 {
+ pickles = compileScenario(pickles, ruleBackgroundSteps, scenario, tags, uri, language, newId)
+ } else {
+ pickles = compileScenarioOutline(pickles, scenario, tags, ruleBackgroundSteps, uri, language, newId)
+ }
+ default:
+ panic(fmt.Sprintf("unexpected %T feature child", child))
+ }
+ }
+ return pickles
+
+}
+
+func compileScenarioOutline(
+ pickles []*messages.Pickle,
+ scenario *messages.GherkinDocument_Feature_Scenario,
+ featureTags []*messages.GherkinDocument_Feature_Tag,
+ backgroundSteps []*messages.GherkinDocument_Feature_Step,
+ uri string,
+ language string,
+ newId func() string,
+) []*messages.Pickle {
+ for _, examples := range scenario.Examples {
+ if examples.TableHeader == nil {
+ continue
+ }
+ variableCells := examples.TableHeader.Cells
+ for _, valuesRow := range examples.TableBody {
+ valueCells := valuesRow.Cells
+ tags := pickleTags(append(featureTags, append(scenario.Tags, examples.Tags...)...))
+
+ computedPickleSteps := make([]*messages.Pickle_PickleStep, 0)
+ pickleBackgroundSteps := make([]*messages.Pickle_PickleStep, 0)
+
+ if len(scenario.Steps) > 0 {
+ pickleBackgroundSteps = pickleSteps(backgroundSteps, newId)
+ }
+
+ // translate computedPickleSteps based on valuesRow
+ for _, step := range scenario.Steps {
+ text := step.Text
+ for i, variableCell := range variableCells {
+ text = strings.Replace(text, "<"+variableCell.Value+">", valueCells[i].Value, -1)
+ }
+
+ pickleStep := pickleStep(step, variableCells, valuesRow, newId)
+ computedPickleSteps = append(computedPickleSteps, pickleStep)
+ }
+
+ // translate pickle name
+ name := scenario.Name
+ for i, key := range variableCells {
+ name = strings.Replace(name, "<"+key.Value+">", valueCells[i].Value, -1)
+ }
+
+ if len(computedPickleSteps) > 0 {
+ computedPickleSteps = append(pickleBackgroundSteps, computedPickleSteps...)
+ }
+
+ pickles = append(pickles, &messages.Pickle{
+ Id: newId(),
+ Uri: uri,
+ Steps: computedPickleSteps,
+ Tags: tags,
+ Name: name,
+ Language: language,
+ AstNodeIds: []string{scenario.Id, valuesRow.Id},
+ })
+ }
+ }
+ return pickles
+}
+
+func compileScenario(
+ pickles []*messages.Pickle,
+ backgroundSteps []*messages.GherkinDocument_Feature_Step,
+ scenario *messages.GherkinDocument_Feature_Scenario,
+ featureTags []*messages.GherkinDocument_Feature_Tag,
+ uri string,
+ language string,
+ newId func() string,
+) []*messages.Pickle {
+ steps := make([]*messages.Pickle_PickleStep, 0)
+ if len(scenario.Steps) > 0 {
+ pickleBackgroundSteps := pickleSteps(backgroundSteps, newId)
+ steps = append(pickleBackgroundSteps, pickleSteps(scenario.Steps, newId)...)
+ }
+ tags := pickleTags(append(featureTags, scenario.Tags...))
+ pickles = append(pickles, &messages.Pickle{
+ Id: newId(),
+ Uri: uri,
+ Steps: steps,
+ Tags: tags,
+ Name: scenario.Name,
+ Language: language,
+ AstNodeIds: []string{scenario.Id},
+ })
+ return pickles
+}
+
+func pickleDataTable(table *messages.GherkinDocument_Feature_Step_DataTable, variableCells []*messages.GherkinDocument_Feature_TableRow_TableCell, valueCells []*messages.GherkinDocument_Feature_TableRow_TableCell) *messages.PickleStepArgument_PickleTable {
+ pickleTableRows := make([]*messages.PickleStepArgument_PickleTable_PickleTableRow, len(table.Rows))
+ for i, row := range table.Rows {
+ pickleTableCells := make([]*messages.PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell, len(row.Cells))
+ for j, cell := range row.Cells {
+ pickleTableCells[j] = &messages.PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell{
+ Value: interpolate(cell.Value, variableCells, valueCells),
+ }
+ }
+ pickleTableRows[i] = &messages.PickleStepArgument_PickleTable_PickleTableRow{Cells: pickleTableCells}
+ }
+ return &messages.PickleStepArgument_PickleTable{Rows: pickleTableRows}
+}
+
+func pickleDocString(docString *messages.GherkinDocument_Feature_Step_DocString, variableCells []*messages.GherkinDocument_Feature_TableRow_TableCell, valueCells []*messages.GherkinDocument_Feature_TableRow_TableCell) *messages.PickleStepArgument_PickleDocString {
+ return &messages.PickleStepArgument_PickleDocString{
+ MediaType: interpolate(docString.MediaType, variableCells, valueCells),
+ Content: interpolate(docString.Content, variableCells, valueCells),
+ }
+}
+
+func pickleTags(tags []*messages.GherkinDocument_Feature_Tag) []*messages.Pickle_PickleTag {
+ ptags := make([]*messages.Pickle_PickleTag, len(tags))
+ for i, tag := range tags {
+ ptags[i] = &messages.Pickle_PickleTag{
+ Name: tag.Name,
+ AstNodeId: tag.Id,
+ }
+ }
+ return ptags
+}
+
+func pickleSteps(steps []*messages.GherkinDocument_Feature_Step, newId func() string) []*messages.Pickle_PickleStep {
+ pickleSteps := make([]*messages.Pickle_PickleStep, len(steps))
+ for i, step := range steps {
+ pickleStep := pickleStep(step, nil, nil, newId)
+ pickleSteps[i] = pickleStep
+ }
+ return pickleSteps
+}
+
+func pickleStep(
+ step *messages.GherkinDocument_Feature_Step,
+ variableCells []*messages.GherkinDocument_Feature_TableRow_TableCell,
+ valuesRow *messages.GherkinDocument_Feature_TableRow,
+ newId func() string) *messages.Pickle_PickleStep {
+
+ var valueCells []*messages.GherkinDocument_Feature_TableRow_TableCell
+ if valuesRow != nil {
+ valueCells = valuesRow.Cells
+ }
+
+ pickleStep := &messages.Pickle_PickleStep{
+ Id: newId(),
+ Text: interpolate(step.Text, variableCells, valueCells),
+ AstNodeIds: []string{step.Id},
+ }
+ if valuesRow != nil {
+ pickleStep.AstNodeIds = append(pickleStep.AstNodeIds, valuesRow.Id)
+ }
+ if step.GetDataTable() != nil {
+ pickleStep.Argument = &messages.PickleStepArgument{
+ Message: &messages.PickleStepArgument_DataTable{
+ DataTable: pickleDataTable(step.GetDataTable(), variableCells, valueCells),
+ },
+ }
+ }
+ if step.GetDocString() != nil {
+ pickleStep.Argument = &messages.PickleStepArgument{
+ Message: &messages.PickleStepArgument_DocString{
+ DocString: pickleDocString(step.GetDocString(), variableCells, valueCells),
+ },
+ }
+ }
+ return pickleStep
+}
+
+func interpolate(s string, variableCells []*messages.GherkinDocument_Feature_TableRow_TableCell, valueCells []*messages.GherkinDocument_Feature_TableRow_TableCell) string {
+ if variableCells == nil || valueCells == nil {
+ return s
+ }
+
+ for i, variableCell := range variableCells {
+ s = strings.Replace(s, "<"+variableCell.Value+">", valueCells[i].Value, -1)
+ }
+
+ return s
+}
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/remove_empty.jq b/vendor/github.com/cucumber/gherkin-go/v11/remove_empty.jq
new file mode 100644
index 00000000..ee941be4
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/remove_empty.jq
@@ -0,0 +1,32 @@
+# This jq script removes empty items. Theoretically Protobuf's JSON
+# converter should do this, but it's inconsistent between language
+# implementations.
+#
+# Original source:
+# https://github.com/stedolan/jq/issues/104#issuecomment-338478029
+
+def walk(f):
+ . as $in
+ | if type == "object" then
+ reduce keys_unsorted[] as $key
+ ( {}; . + { ($key): ($in[$key] | walk(f)) } ) | f
+ elif type == "array" then map( walk(f) ) | f
+ else f
+ end;
+
+def remove_empty:
+ . | walk(
+ if type == "object" then
+ with_entries(
+ select(
+ .value != null and
+ .value != "" and
+ .value != [] and
+ .value != {}
+ )
+ )
+ else .
+ end
+ );
+
+remove_empty
\ No newline at end of file
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/test.feature b/vendor/github.com/cucumber/gherkin-go/v11/test.feature
new file mode 100644
index 00000000..dff77a22
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/test.feature
@@ -0,0 +1,151 @@
+Feature:
+
+ Scenario: scenario 1
+ Given text
+
+ Scenario: scenario 2
+ Given text
+
+ Scenario: scenario 3
+ Given text
+
+ Scenario: scenario 4
+ Given text
+
+ Scenario: scenario 5
+ Given text
+
+ Scenario: scenario 6
+ Given text
+
+ Scenario: scenario 7
+ Given text
+
+ Scenario: scenario 8
+ Given text
+
+ Scenario: scenario 9
+ Given text
+
+ Scenario: scenario 10
+ Given text
+
+ Scenario: scenario 11
+ Given text
+
+ Scenario: scenario 12
+ Given text
+
+ Scenario: scenario 13
+ Given text
+
+ Scenario: scenario 14
+ Given text
+
+ Scenario: scenario 15
+ Given text
+
+ Scenario: scenario 16
+ Given text
+
+ Scenario: scenario 17
+ Given text
+
+ Scenario: scenario 18
+ Given text
+
+ Scenario: scenario 19
+ Given text
+
+ Scenario: scenario 20
+ Given text
+
+ Scenario: scenario 21
+ Given text
+
+ Scenario: scenario 22
+ Given text
+
+ Scenario: scenario 23
+ Given text
+
+ Scenario: scenario 24
+ Given text
+
+ Scenario: scenario 25
+ Given text
+
+ Scenario: scenario 26
+ Given text
+
+ Scenario: scenario 27
+ Given text
+
+ Scenario: scenario 28
+ Given text
+
+ Scenario: scenario 29
+ Given text
+
+ Scenario: scenario 30
+ Given text
+
+ Scenario: scenario 31
+ Given text
+
+ Scenario: scenario 32
+ Given text
+
+ Scenario: scenario 33
+ Given text
+
+ Scenario: scenario 34
+ Given text
+
+ Scenario: scenario 35
+ Given text
+
+ Scenario: scenario 36
+ Given text
+
+ Scenario: scenario 37
+ Given text
+
+ Scenario: scenario 38
+ Given text
+
+ Scenario: scenario 39
+ Given text
+
+ Scenario: scenario 40
+ Given text
+
+ Scenario: scenario 41
+ Given text
+
+ Scenario: scenario 42
+ Given text
+
+ Scenario: scenario 43
+ Given text
+
+ Scenario: scenario 44
+ Given text
+
+ Scenario: scenario 45
+ Given text
+
+ Scenario: scenario 46
+ Given text
+
+ Scenario: scenario 47
+ Given text
+
+ Scenario: scenario 48
+ Given text
+
+ Scenario: scenario 49
+ Given text
+
+ Scenario: scenario 50
+ Given text
diff --git a/vendor/github.com/cucumber/gherkin-go/v11/test.sh b/vendor/github.com/cucumber/gherkin-go/v11/test.sh
new file mode 100644
index 00000000..97debf64
--- /dev/null
+++ b/vendor/github.com/cucumber/gherkin-go/v11/test.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env sh
+
+./bin/gherkin --no-ast --no-pickles test.feature | ./bin/gherkin --no-source --no-ast --json
diff --git a/vendor/github.com/cucumber/godog/.gitignore b/vendor/github.com/cucumber/godog/.gitignore
new file mode 100644
index 00000000..a9b77a8f
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/.gitignore
@@ -0,0 +1,10 @@
+/cmd/godog/godog
+/example/example
+**/vendor/*
+Gopkg.lock
+Gopkg.toml
+
+.DS_Store
+.idea
+
+_artifacts
\ No newline at end of file
diff --git a/vendor/github.com/cucumber/godog/CHANGELOG.md b/vendor/github.com/cucumber/godog/CHANGELOG.md
new file mode 100644
index 00000000..cd74d915
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/CHANGELOG.md
@@ -0,0 +1,189 @@
+# CHANGE LOG
+
+All notable changes to this project will be documented in this file.
+
+This project adheres to [Semantic Versioning](http://semver.org).
+
+This document is formatted according to the principles of [Keep A CHANGELOG](http://keepachangelog.com).
+
+---
+
+## [Unreleased]
+
+### Added
+
+### Changed
+
+### Deprecated
+
+### Removed
+
+### Fixed
+
+## [v0.11.0]
+
+### Added
+
+- Created a simple example for a custom formatter ([330](https://github.com/cucumber/godog/pull/330) - [lonnblad])
+- --format junit:result.xml will now write to result.xml ([331](https://github.com/cucumber/godog/pull/331) - [lonnblad])
+- Added make commands to create artifacts and upload them to a github release ([333](https://github.com/cucumber/godog/pull/333) - [lonnblad])
+- Created release notes and changelog for v0.11.0 ([355](https://github.com/cucumber/godog/pull/355) - [lonnblad])
+- Created v0.11.0-rc2 ([362](https://github.com/cucumber/godog/pull/362) - [lonnblad])
+
+### Changed
+
+- Added Cobra for the Command Line Interface ([321](https://github.com/cucumber/godog/pull/321) - [lonnblad])
+- Added internal packages for formatters, storage and models ([323](https://github.com/cucumber/godog/pull/323) - [lonnblad])
+- Added an internal package for tags filtering ([326](https://github.com/cucumber/godog/pull/326) - [lonnblad])
+- Added an internal pkg for the builder ([327](https://github.com/cucumber/godog/pull/327) - [lonnblad])
+- Moved the parser code to a new internal pkg ([329](https://github.com/cucumber/godog/pull/329) - [lonnblad])
+- Moved StepDefinition to the formatters pkg ([332](https://github.com/cucumber/godog/pull/332) - [lonnblad])
+- Removed go1.12 and added go1.15 to CI config ([356](https://github.com/cucumber/godog/pull/356) - [lonnblad])
+
+### Deprecated
+
+### Removed
+
+- Removed deprecated code ([322](https://github.com/cucumber/godog/pull/322) - [lonnblad])
+
+### Fixed
+
+- Improved the help text of the formatter flag in the run command ([347](https://github.com/cucumber/godog/pull/347) - [lonnblad])
+- Removed $GOPATH from the README.md and updated the example ([349](https://github.com/cucumber/godog/pull/349) - [lonnblad])
+- Fixed the undefined step definitions help ([350](https://github.com/cucumber/godog/pull/350) - [lonnblad])
+- Added a comment regarding running the examples within the $GOPATH ([352](https://github.com/cucumber/godog/pull/352) - [lonnblad])
+- doc(FAQ/TestMain): `testing.M.Run()` is optional ([353](https://github.com/cucumber/godog/pull/353) - [hansbogert])
+- Made a fix for the unstable Randomize Run tests ([354](https://github.com/cucumber/godog/pull/354) - [lonnblad])
+- Fixed an issue when go test is parsing command-line flags ([359](https://github.com/cucumber/godog/pull/359) - [lonnblad])
+
+## [v0.10.0]
+
+### Added
+
+- Added concurrency support to the pretty formatter ([275](https://github.com/cucumber/godog/pull/275) - [lonnblad])
+- Added concurrency support to the events formatter ([274](https://github.com/cucumber/godog/pull/274) - [lonnblad])
+- Added concurrency support to the cucumber formatter ([273](https://github.com/cucumber/godog/pull/273) - [lonnblad])
+- Added an example for how to use assertion pkgs like testify with godog ([289](https://github.com/cucumber/godog/pull/289) - [lonnblad])
+- Added the new TestSuiteInitializer and ScenarioInitializer ([294](https://github.com/cucumber/godog/pull/294) - [lonnblad])
+- Added an in-mem storage for pickles ([304](https://github.com/cucumber/godog/pull/304) - [lonnblad])
+- Added Pickle and PickleStep results to the in-mem storage ([305](https://github.com/cucumber/godog/pull/305) - [lonnblad])
+- Added features to the in-mem storage ([306](https://github.com/cucumber/godog/pull/306) - [lonnblad])
+- Broke out some code from massive files into new files ([307](https://github.com/cucumber/godog/pull/307) - [lonnblad])
+- Added support for concurrent scenarios ([311](https://github.com/cucumber/godog/pull/311) - [lonnblad])
+
+### Changed
+
+- Broke out snippets gen and added sorting on method name ([271](https://github.com/cucumber/godog/pull/271) - [lonnblad])
+- Updated so that we run all tests concurrent now ([278](https://github.com/cucumber/godog/pull/278) - [lonnblad])
+- Moved fmt tests to a godog_test pkg and restructured the fmt output tests ([295](https://github.com/cucumber/godog/pull/295) - [lonnblad])
+- Moved builder tests to a godog_test pkg ([296](https://github.com/cucumber/godog/pull/296) - [lonnblad])
+- Made the builder tests run in parallel ([298](https://github.com/cucumber/godog/pull/298) - [lonnblad])
+- Refactored suite_context.go ([300](https://github.com/cucumber/godog/pull/300) - [lonnblad])
+- Added better testing of the Context Initializers and TestSuite{}.Run() ([301](https://github.com/cucumber/godog/pull/301) - [lonnblad])
+- Updated the README.md ([302](https://github.com/cucumber/godog/pull/302) - [lonnblad])
+- Unexported some exported properties in unexported structs ([303](https://github.com/cucumber/godog/pull/303) - [lonnblad])
+- Refactored some states in the formatters and feature struct ([310](https://github.com/cucumber/godog/pull/310) - [lonnblad])
+
+### Deprecated
+
+- Deprecated SuiteContext and ConcurrentFormatter ([314](https://github.com/cucumber/godog/pull/314) - [lonnblad])
+
+### Removed
+
+- Removed pre go112 build code ([293](https://github.com/cucumber/godog/pull/293) - [lonnblad])
+- Removed the deprecated feature hooks ([312](https://github.com/cucumber/godog/pull/312) - [lonnblad])
+
+### Fixed
+
+- Fixed failing builder tests due to the v0.9.0 change ([lonnblad])
+- Update paths to screenshots for examples ([270](https://github.com/cucumber/godog/pull/270) - [leviable])
+- Made progress formatter verification a bit more accurate ([lonnblad])
+- Added comparison between single and multi threaded runs ([272](https://github.com/cucumber/godog/pull/272) - [lonnblad])
+- Fixed issue with empty feature file causing nil pointer deref ([288](https://github.com/cucumber/godog/pull/288) - [lonnblad])
+- Updated linting checks in circleci config and fixed linting issues ([290](https://github.com/cucumber/godog/pull/290) - [lonnblad])
+- Readded some legacy doc for FeatureContext ([297](https://github.com/cucumber/godog/pull/297) - [lonnblad])
+- Fixed an issue with calculating time for junit testsuite ([308](https://github.com/cucumber/godog/pull/308) - [lonnblad])
+- Fixed so that we don't execute features with zero scenarios ([315](https://github.com/cucumber/godog/pull/315) - [lonnblad])
+- Fixed the broken --random flag ([317](https://github.com/cucumber/godog/pull/317) - [lonnblad])
+
+## [0.9.0]
+
+### Added
+
+### Changed
+
+- Run godog features in CircleCI in strict mode ([jaysonesmith])
+- Removed TestMain call in `suite_test.go` for CI. ([jaysonesmith])
+- Migrated to [gherkin-go - v11.0.0](https://github.com/cucumber/gherkin-go/releases/tag/v11.0.0). ([240](https://github.com/cucumber/godog/pull/240) - [lonnblad])
+
+### Deprecated
+
+### Removed
+
+### Fixed
+
+- Fixed the time attributes in the JUnit formatter. ([232](https://github.com/cucumber/godog/pull/232) - [lonnblad])
+- Re enable custom formatters. ([238](https://github.com/cucumber/godog/pull/238) - [ericmcbride])
+- Added back suite_test.go ([jaysonesmith])
+- Normalise module paths for use on Windows ([242](https://github.com/cucumber/godog/pull/242) - [gjtaylor])
+- Fixed panic in indenting function `s` ([247](https://github.com/cucumber/godog/pull/247) - [titouanfreville])
+- Fixed wrong version in API example ([263](https://github.com/cucumber/godog/pull/263) - [denis-trofimov])
+
+## [0.8.1]
+
+### Added
+
+- Link in Readme to the Slack community. ([210](https://github.com/cucumber/godog/pull/210) - [smikulcik])
+- Added run tests for Cucumber formatting. ([214](https://github.com/cucumber/godog/pull/214), [216](https://github.com/cucumber/godog/pull/216) - [lonnblad])
+
+### Changed
+
+- Renamed the `examples` directory to `_examples`, removing dependencies from the Go module ([218](https://github.com/cucumber/godog/pull/218) - [axw])
+
+### Deprecated
+
+### Removed
+
+### Fixed
+
+- Find/Replaced references to DATA-DOG/godog -> cucumber/godog for docs. ([209](https://github.com/cucumber/godog/pull/209) - [smikulcik])
+- Fixed missing links in changelog to be correctly included! ([jaysonesmith])
+
+## [0.8.0]
+
+### Added
+
+- Added initial CircleCI config. ([jaysonesmith])
+- Added concurrency support for JUnit formatting ([lonnblad])
+
+### Changed
+
+- Changed code references to DATA-DOG/godog to cucumber/godog to help get things building correctly. ([jaysonesmith])
+
+### Deprecated
+
+### Removed
+
+### Fixed
+
+
+
+[unreleased]: https://github.com/cucumber/godog/compare/v0.11.0...master
+[v0.11.0]: https://github.com/cucumber/godog/compare/v0.10.0...v0.11.0
+[v0.10.0]: https://github.com/cucumber/godog/compare/v0.9.0...v0.10.0
+[0.9.0]: https://github.com/cucumber/godog/compare/v0.8.1...v0.9.0
+[0.8.1]: https://github.com/cucumber/godog/compare/v0.8.0...v0.8.1
+[0.8.0]: https://github.com/cucumber/godog/compare/v0.7.13...v0.8.0
+
+
+
+[axw]: https://github.com/axw
+[jaysonesmith]: https://github.com/jaysonesmith
+[lonnblad]: https://github.com/lonnblad
+[smikulcik]: https://github.com/smikulcik
+[ericmcbride]: https://github.com/ericmcbride
+[gjtaylor]: https://github.com/gjtaylor
+[titouanfreville]: https://github.com/titouanfreville
+[denis-trofimov]: https://github.com/denis-trofimov
+[leviable]: https://github.com/leviable
+[hansbogert]: https://github.com/hansbogert
diff --git a/vendor/github.com/cucumber/godog/CHANGELOG_OLD.md b/vendor/github.com/cucumber/godog/CHANGELOG_OLD.md
new file mode 100644
index 00000000..07033796
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/CHANGELOG_OLD.md
@@ -0,0 +1,113 @@
+# Change LOG
+
+**2020-02-06**
+- move to new [CHANGELOG.md](CHANGELOG.md)
+
+**2020-01-31**
+- change license to MIT and moving project repository to **cucumber**
+ organization.
+
+**2018-11-16**
+- added formatter output test suite, currently mainly pretty format
+ tested.
+- these tests, helped to identify some output format issues.
+
+**2018-11-12**
+- proper go module support added for `godog` command build.
+- added build tests.
+
+**2018-10-27**
+- support go1.11 new compiler and linker changes for **godog** command.
+- support go1.11 modules and `go mod` builds.
+- `BindFlags` now has a prefix option for flags, so that `go test` command
+ can avoid flag name collisions.
+- `BindFlags` respect default options provided for binding, so that it
+ does not override predefined options when flags are bind, see #144.
+- Minor patch to support tag filters on example tables for
+ ScenarioOutline.
+- Minor patch for pretty printer, when scenario has no steps, comment
+ possition computation was in panic.
+
+**2018-03-04**
+- support go1.10 new compiler and linker changes for **godog** command.
+
+**2017-08-31**
+- added **BeforeFeature** and **AfterFeature** hooks.
+- failed multistep error is now prepended with a parent step text in order
+ to determine failed nested step.
+- pretty format now removes the step definition location package name in
+ comment next to step if the step definition matches tested package. If
+ step definition is imported from other package, full package name will
+ be printed.
+
+**2017-05-04**
+- added **--strict** option in order to fail suite when there are pending
+ or undefined steps. By default, suite passes and treats pending or
+ undefined steps as TODOs.
+
+**2017-04-29** - **v0.7.0**
+- added support for nested steps. From now on, it is possible to return
+ **godog.Steps** instead of an **error** in the step definition func.
+ This change introduced few minor changes in **Formatter** interface. Be
+ sure to adapt the changes if you have custom formatters.
+
+**2017-04-27**
+- added an option to randomize scenario execution order, so we could
+ ensure that scenarios do not depend on global state.
+- godog was manually sorting feature files by name. Now it just runs them
+ in given order, you may sort them anyway you like. For example `godog
+ $(find . -name '*.feature' | sort)`
+
+**2016-10-30** - **v0.6.0**
+- added experimental **events** format, this might be used for unified
+ cucumber formats. But should be not adapted widely, since it is highly
+ possible that specification will change.
+- added **RunWithOptions** method which allows to easily run godog from
+ **TestMain** without needing to simulate flag arguments. These options
+ now allows to configure output writer.
+- added flag **-o, --output=runner.binary** which only compiles the test
+ runner executable, but does not execute it.
+- **FlagSet** initialization now takes io.Writer as output for help text
+ output. It was not showing nice colors on windows before.
+ **--no-colors** option only applies to test run output.
+
+**2016-06-14** - **v0.5.0**
+- godog now uses **go tool compile** and **go tool link** to support
+ vendor directory dependencies. It also compiles test executable the same
+ way as standard **go test** utility. With this change, only go
+ versions from **1.5** are now supported.
+
+**2016-06-01**
+- parse flags in main command, to show version and help without needing
+ to compile test package and buildable go sources.
+
+**2016-05-28**
+- show nicely formatted called step func name and file path
+
+**2016-05-26**
+- pack gherkin dependency in a subpackage to prevent compatibility
+ conflicts in the future. If recently upgraded, probably you will need to
+ reference gherkin as `github.com/DATA-DOG/godog/gherkin` instead.
+
+**2016-05-25**
+- refactored test suite build tooling in order to use standard **go test**
+ tool. Which allows to compile package with godog runner script in **go**
+ idiomatic way. It also supports all build environment options as usual.
+- **godog.Run** now returns an **int** exit status. It was not returning
+ anything before, so there is no compatibility breaks.
+
+**2016-03-04**
+- added **junit** compatible output formatter, which prints **xml**
+ results to **os.Stdout**
+- fixed #14 which skipped printing background steps when there was
+ scenario outline in feature.
+
+**2015-07-03**
+- changed **godog.Suite** from interface to struct. Context registration should be updated accordingly. The reason
+for change: since it exports the same methods and there is no need to mock a function in tests, there is no
+obvious reason to keep an interface.
+- in order to support running suite concurrently, needed to refactor an entry point of application. The **Run** method
+now is a func of godog package which initializes and run the suite (or more suites). Method **New** is removed. This
+change made godog a little cleaner.
+- renamed **RegisterFormatter** func to **Format** to be more consistent.
+
diff --git a/vendor/github.com/cucumber/godog/CONTRIBUTING.md b/vendor/github.com/cucumber/godog/CONTRIBUTING.md
new file mode 100644
index 00000000..70327673
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/CONTRIBUTING.md
@@ -0,0 +1,17 @@
+## About to contribute?
+
+We appreciate that. But before you do, please learn our basic rules:
+
+* Do you have a feature request? Then don't expect it to be implemented unless
+ you or someone else sends a [pull request](https://help.github.com/articles/using-pull-requests).
+* We love [pull requests](https://help.github.com/articles/using-pull-requests),
+ but if you don't have a test to go with it we probably won't merge it.
+* Before making significant contribution consider discussing the outline of
+ your solution first. This may avoid a duplication of efforts.
+
+Please do *not* add @author tags - this project embraces collective code
+ownership. If you want to know who wrote some code, look in git. When you are
+done, send a [pull request](http://help.github.com/send-pull-requests/).
+If we get a pull request where an entire file is changed because of
+insignificant whitespace changes we cannot see what you have changed, and your
+contribution might get rejected.
diff --git a/vendor/github.com/cucumber/godog/LICENSE b/vendor/github.com/cucumber/godog/LICENSE
new file mode 100644
index 00000000..97dcbd65
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) SmartBear
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/cucumber/godog/Makefile b/vendor/github.com/cucumber/godog/Makefile
new file mode 100644
index 00000000..23e8b311
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/Makefile
@@ -0,0 +1,60 @@
+.PHONY: test gherkin bump cover
+
+VERS := $(shell grep 'const Version' -m 1 godog.go | awk -F\" '{print $$2}')
+
+test:
+ @echo "running all tests"
+ @go install ./...
+ @go fmt ./...
+ @golint github.com/cucumber/godog
+ @golint github.com/cucumber/godog/cmd/godog
+ go vet ./...
+ go test -race
+ godog -f progress -c 4
+
+gherkin:
+ @if [ -z "$(VERS)" ]; then echo "Provide gherkin version like: 'VERS=commit-hash'"; exit 1; fi
+ @rm -rf gherkin
+ @mkdir gherkin
+ @curl -s -L https://github.com/cucumber/gherkin-go/tarball/$(VERS) | tar -C gherkin -zx --strip-components 1
+ @rm -rf gherkin/{.travis.yml,.gitignore,*_test.go,gherkin-generate*,*.razor,*.jq,Makefile,CONTRIBUTING.md}
+
+bump:
+ @if [ -z "$(VERSION)" ]; then echo "Provide version like: 'VERSION=$(VERS) make bump'"; exit 1; fi
+ @echo "bumping version from: $(VERS) to $(VERSION)"
+ @sed -i.bak 's/$(VERS)/$(VERSION)/g' godog.go
+ @sed -i.bak 's/$(VERS)/$(VERSION)/g' _examples/api/features/version.feature
+ @find . -name '*.bak' | xargs rm
+
+cover:
+ go test -race -coverprofile=coverage.txt
+ go tool cover -html=coverage.txt
+ rm coverage.txt
+
+ARTIFACT_DIR := _artifacts
+
+# To upload artifacts for the current version;
+# execute: make upload
+#
+# Check https://github.com/tcnksm/ghr for usage of ghr
+upload: artifacts
+ ghr -replace $(VERS) $(ARTIFACT_DIR)
+
+# To build artifacts for the current version;
+# execute: make artifacts
+artifacts:
+ rm -rf $(ARTIFACT_DIR)
+ mkdir $(ARTIFACT_DIR)
+
+ $(call _build,darwin,amd64)
+ $(call _build,linux,amd64)
+ $(call _build,linux,arm64)
+
+define _build
+ mkdir $(ARTIFACT_DIR)/godog-$(VERS)-$1-$2
+ env GOOS=$1 GOARCH=$2 go build -o $(ARTIFACT_DIR)/godog-$(VERS)-$1-$2/godog ./cmd/godog
+ cp README.md $(ARTIFACT_DIR)/godog-$(VERS)-$1-$2/README.md
+ cp LICENSE $(ARTIFACT_DIR)/godog-$(VERS)-$1-$2/LICENSE
+ cd $(ARTIFACT_DIR) && tar -c --use-compress-program="pigz --fast" -f godog-$(VERS)-$1-$2.tar.gz godog-$(VERS)-$1-$2 && cd ..
+ rm -rf $(ARTIFACT_DIR)/godog-$(VERS)-$1-$2
+endef
diff --git a/vendor/github.com/cucumber/godog/README.md b/vendor/github.com/cucumber/godog/README.md
new file mode 100644
index 00000000..930e6ce2
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/README.md
@@ -0,0 +1,525 @@
+[![CircleCI](https://circleci.com/gh/cucumber/godog/tree/master.svg?style=svg)](https://circleci.com/gh/cucumber/godog/tree/master)
+[![PkgGoDev](https://pkg.go.dev/badge/github.com/cucumber/godog)](https://pkg.go.dev/github.com/cucumber/godog)
+[![codecov](https://codecov.io/gh/cucumber/godog/branch/master/graph/badge.svg)](https://codecov.io/gh/cucumber/godog)
+
+# Godog
+
+
+
+**The API is likely to change a few times before we reach 1.0.0**
+
+Please read the full README, you may find it very useful. And do not forget to peek into the [Release Notes](https://github.com/cucumber/godog/blob/master/release-notes) and the [CHANGELOG](https://github.com/cucumber/godog/blob/master/CHANGELOG.md) from time to time.
+
+Package godog is the official Cucumber BDD framework for Golang, it merges specification and test documentation into one cohesive whole, using Gherkin formatted scenarios in the format of Given, When, Then.
+
+**Godog** does not intervene with the standard **go test** command behavior. You can leverage both frameworks to functionally test your application while maintaining all test related source code in **_test.go** files.
+
+**Godog** acts similar compared to **go test** command, by using go compiler and linker tool in order to produce test executable. Godog contexts need to be exported the same way as **Test** functions for go tests. Note, that if you use **godog** command tool, it will use `go` executable to determine compiler and linker.
+
+The project was inspired by [behat][behat] and [cucumber][cucumber].
+
+## Why Godog/Cucumber
+
+### A single source of truth
+
+Godog merges specification and test documentation into one cohesive whole.
+
+### Living documentation
+
+Because they're automatically tested by Godog, your specifications are
+always bang up-to-date.
+
+### Focus on the customer
+
+Business and IT don't always understand each other. Godog's executable specifications encourage closer collaboration, helping teams keep the business goal in mind at all times.
+
+### Less rework
+
+When automated testing is this much fun, teams can easily protect themselves from costly regressions.
+
+### Read more
+- [Behaviour-Driven Development](https://cucumber.io/docs/bdd/)
+- [Gherkin Reference](https://cucumber.io/docs/gherkin/reference/)
+
+## Install
+```
+go get github.com/cucumber/godog/cmd/godog@v0.11.0
+```
+Adding `@v0.11.0` will install v0.11.0 specifically instead of master.
+
+Running `within the $GOPATH`, you would also need to set `GO111MODULE=on`, like this:
+```
+GO111MODULE=on go get github.com/cucumber/godog/cmd/godog@v0.11.0
+```
+
+## Contributions
+
+Godog is a community driven Open Source Project within the Cucumber organization, it is maintained by a handfull of developers, but we appreciate contributions from everyone.
+
+If you are interested in developing Godog, we suggest you to visit one of our slack channels.
+
+Feel free to open a pull request. Note, if you wish to contribute larger changes or an extension to the exported methods or types, please open an issue before and visit us in slack to discuss the changes.
+
+Reach out to the community on our [Cucumber Slack Community](https://cucumberbdd.slack.com/).
+Join [here](https://cucumberbdd-slack-invite.herokuapp.com/).
+
+### Popular Cucumber Slack channels for Godog:
+- [#help-godog](https://cucumberbdd.slack.com/archives/CTNL1JCVA) - General Godog Adoption Help
+- [#committers-go](https://cucumberbdd.slack.com/archives/CA5NJPDJ4) - Golang focused Cucumber Contributors
+- [#committers](https://cucumberbdd.slack.com/archives/C62D0FK0E) - General Cucumber Contributors
+
+## Examples
+
+You can find a few examples [here](/_examples).
+
+**Note** that if you want to execute any of the examples and have the Git repository checked out in the `$GOPATH`, you need to use: `GO111MODULE=off`. [Issue](https://github.com/cucumber/godog/issues/344) for reference.
+
+### Godogs
+
+The following example can be [found here](/_examples/godogs).
+
+#### Step 1 - Setup a go module
+
+Given we create a new go module **godogs** in your normal go workspace. - `mkdir godogs`
+
+From now on, this is our work directory - `cd godogs`
+
+Initiate the go module - `go mod init godogs`
+
+#### Step 2 - Install godog
+
+Install the godog binary - `go get github.com/cucumber/godog/cmd/godog`
+
+#### Step 3 - Create gherkin feature
+
+Imagine we have a **godog cart** to serve godogs for lunch.
+
+First of all, we describe our feature in plain text - `vim features/godogs.feature`
+
+``` gherkin
+Feature: eat godogs
+ In order to be happy
+ As a hungry gopher
+ I need to be able to eat godogs
+
+ Scenario: Eat 5 out of 12
+ Given there are 12 godogs
+ When I eat 5
+ Then there should be 7 remaining
+```
+
+#### Step 4 - Create godog step definitions
+
+**NOTE:** same as **go test** godog respects package level isolation. All your step definitions should be in your tested package root directory. In this case: **godogs**.
+
+If we run godog inside the module: - `godog`
+
+You should see that the steps are undefined:
+```
+Feature: eat godogs
+ In order to be happy
+ As a hungry gopher
+ I need to be able to eat godogs
+
+ Scenario: Eat 5 out of 12 # features/godogs.feature:6
+ Given there are 12 godogs
+ When I eat 5
+ Then there should be 7 remaining
+
+1 scenarios (1 undefined)
+3 steps (3 undefined)
+220.129µs
+
+You can implement step definitions for undefined steps with these snippets:
+
+func iEat(arg1 int) error {
+ return godog.ErrPending
+}
+
+func thereAreGodogs(arg1 int) error {
+ return godog.ErrPending
+}
+
+func thereShouldBeRemaining(arg1 int) error {
+ return godog.ErrPending
+}
+
+func InitializeScenario(ctx *godog.ScenarioContext) {
+ ctx.Step(`^I eat (\d+)$`, iEat)
+ ctx.Step(`^there are (\d+) godogs$`, thereAreGodogs)
+ ctx.Step(`^there should be (\d+) remaining$`, thereShouldBeRemaining)
+}
+```
+
+Create and copy the step definitions into a new file - `vim godogs_test.go`
+``` go
+package main
+
+import "github.com/cucumber/godog"
+
+func iEat(arg1 int) error {
+ return godog.ErrPending
+}
+
+func thereAreGodogs(arg1 int) error {
+ return godog.ErrPending
+}
+
+func thereShouldBeRemaining(arg1 int) error {
+ return godog.ErrPending
+}
+
+func InitializeScenario(ctx *godog.ScenarioContext) {
+ ctx.Step(`^I eat (\d+)$`, iEat)
+ ctx.Step(`^there are (\d+) godogs$`, thereAreGodogs)
+ ctx.Step(`^there should be (\d+) remaining$`, thereShouldBeRemaining)
+}
+```
+
+Our module should now look like this:
+```
+godogs
+- features
+ - godogs.feature
+- go.mod
+- go.sum
+- godogs_test.go
+```
+
+Run godog again - `godog`
+
+You should now see that the scenario is pending with one step pending and two steps skipped:
+```
+Feature: eat godogs
+ In order to be happy
+ As a hungry gopher
+ I need to be able to eat godogs
+
+ Scenario: Eat 5 out of 12 # features/godogs.feature:6
+ Given there are 12 godogs # godogs_test.go:10 -> thereAreGodogs
+ TODO: write pending definition
+ When I eat 5 # godogs_test.go:6 -> iEat
+ Then there should be 7 remaining # godogs_test.go:14 -> thereShouldBeRemaining
+
+1 scenarios (1 pending)
+3 steps (1 pending, 2 skipped)
+282.123µs
+```
+
+You may change **return godog.ErrPending** to **return nil** in the three step definitions and the scenario will pass successfully.
+
+#### Step 5 - Create the main program to test
+
+We only need a number of **godogs** for now. Lets keep it simple.
+
+Create and copy the code into a new file - `vim godogs.go`
+``` go
+package main
+
+// Godogs available to eat
+var Godogs int
+
+func main() { /* usual main func */ }
+```
+
+Our module should now look like this:
+```
+godogs
+- features
+ - godogs.feature
+- go.mod
+- go.sum
+- godogs.go
+- godogs_test.go
+```
+
+#### Step 6 - Add some logic to the step defintions
+
+Now lets implement our step definitions to test our feature requirements:
+
+Replace the contents of `godogs_test.go` with the code below - `vim godogs_test.go`
+``` go
+package main
+
+import (
+ "fmt"
+
+ "github.com/cucumber/godog"
+)
+
+func thereAreGodogs(available int) error {
+ Godogs = available
+ return nil
+}
+
+func iEat(num int) error {
+ if Godogs < num {
+ return fmt.Errorf("you cannot eat %d godogs, there are %d available", num, Godogs)
+ }
+ Godogs -= num
+ return nil
+}
+
+func thereShouldBeRemaining(remaining int) error {
+ if Godogs != remaining {
+ return fmt.Errorf("expected %d godogs to be remaining, but there is %d", remaining, Godogs)
+ }
+ return nil
+}
+
+func InitializeTestSuite(ctx *godog.TestSuiteContext) {
+ ctx.BeforeSuite(func() { Godogs = 0 })
+}
+
+func InitializeScenario(ctx *godog.ScenarioContext) {
+ ctx.BeforeScenario(func(*godog.Scenario) {
+ Godogs = 0 // clean the state before every scenario
+ })
+
+ ctx.Step(`^there are (\d+) godogs$`, thereAreGodogs)
+ ctx.Step(`^I eat (\d+)$`, iEat)
+ ctx.Step(`^there should be (\d+) remaining$`, thereShouldBeRemaining)
+}
+```
+
+When you run godog again - `godog`
+
+You should see a passing run:
+```
+Feature: eat godogs
+ In order to be happy
+ As a hungry gopher
+ I need to be able to eat godogs
+
+ Scenario: Eat 5 out of 12 # features/godogs.feature:6
+ Given there are 12 godogs # godogs_test.go:10 -> thereAreGodogs
+ When I eat 5 # godogs_test.go:14 -> iEat
+ Then there should be 7 remaining # godogs_test.go:22 -> thereShouldBeRemaining
+
+1 scenarios (1 passed)
+3 steps (3 passed)
+258.302µs
+```
+
+We have hooked to **BeforeScenario** event in order to reset the application state before each scenario. You may hook into more events, like **AfterStep** to print all state in case of an error. Or **BeforeSuite** to prepare a database.
+
+By now, you should have figured out, how to use **godog**. Another advice is to make steps orthogonal, small and simple to read for a user. Whether the user is a dumb website user or an API developer, who may understand a little more technical context - it should target that user.
+
+When steps are orthogonal and small, you can combine them just like you do with Unix tools. Look how to simplify or remove ones, which can be composed.
+
+## Code of Conduct
+
+Everyone interacting in this codebase and issue tracker is expected to follow the Cucumber [code of conduct](https://github.com/cucumber/cucumber/blob/master/CODE_OF_CONDUCT.md).
+
+## References and Tutorials
+
+- [cucumber-html-reporter](https://github.com/gkushang/cucumber-html-reporter),
+ may be used in order to generate **html** reports together with **cucumber** output formatter. See the [following docker image](https://github.com/myie/cucumber-html-reporter) for usage details.
+- [how to use godog by semaphoreci](https://semaphoreci.com/community/tutorials/how-to-use-godog-for-behavior-driven-development-in-go)
+- see [examples](https://github.com/cucumber/godog/tree/master/_examples)
+- see extension [AssistDog](https://github.com/hellomd/assistdog),
+ which may have useful **gherkin.DataTable** transformations or comparison methods for assertions.
+
+## Documentation
+
+See [pkg documentation][godoc] for general API details.
+See **[Circle Config](/.circleci/config.yml)** for supported **go** versions.
+See `godog -h` for general command options.
+
+See implementation examples:
+
+- [rest API server](/_examples/api)
+- [rest API with Database](/_examples/db)
+- [godogs](/_examples/godogs)
+
+## FAQ
+
+### Running Godog with go test
+
+You may integrate running **godog** in your **go test** command. You can run it using go [TestMain](https://golang.org/pkg/testing/#hdr-Main) func available since **go 1.4**. In this case it is not necessary to have **godog** command installed. See the following examples.
+
+The following example binds **godog** flags with specified prefix `godog` in order to prevent flag collisions.
+
+``` go
+package main
+
+import (
+ "flag" // godog v0.10.0 and earlier
+ "os"
+ "testing"
+
+ "github.com/cucumber/godog"
+ "github.com/cucumber/godog/colors"
+ flag "github.com/spf13/pflag" // godog v0.11.0 (latest)
+)
+
+var opts = godog.Options{
+ Output: colors.Colored(os.Stdout),
+ Format: "progress", // can define default values
+}
+
+func init() {
+ godog.BindFlags("godog.", flag.CommandLine, &opts) // godog v0.10.0 and earlier
+ godog.BindCommandLineFlags("godog.", &opts) // godog v0.11.0 (latest)
+}
+
+func TestMain(m *testing.M) {
+ flag.Parse()
+ opts.Paths = flag.Args()
+
+ status := godog.TestSuite{
+ Name: "godogs",
+ TestSuiteInitializer: InitializeTestSuite,
+ ScenarioInitializer: InitializeScenario,
+ Options: &opts,
+ }.Run()
+
+ // Optional: Run `testing` package's logic besides godog.
+ if st := m.Run(); st > status {
+ status = st
+ }
+
+ os.Exit(status)
+}
+```
+
+Then you may run tests with by specifying flags in order to filter features.
+
+```
+go test -v --godog.random --godog.tags=wip
+go test -v --godog.format=pretty --godog.random -race -coverprofile=coverage.txt -covermode=atomic
+```
+
+The following example does not bind godog flags, instead manually configuring needed options.
+
+``` go
+func TestMain(m *testing.M) {
+ opts := godog.Options{
+ Format: "progress",
+ Paths: []string{"features"},
+ Randomize: time.Now().UTC().UnixNano(), // randomize scenario execution order
+ }
+
+ status := godog.TestSuite{
+ Name: "godogs",
+ TestSuiteInitializer: InitializeTestSuite,
+ ScenarioInitializer: InitializeScenario,
+ Options: &opts,
+ }.Run()
+
+ // Optional: Run `testing` package's logic besides godog.
+ if st := m.Run(); st > status {
+ status = st
+ }
+
+ os.Exit(status)
+}
+```
+
+You can even go one step further and reuse **go test** flags, like **verbose** mode in order to switch godog **format**. See the following example:
+
+``` go
+func TestMain(m *testing.M) {
+ format := "progress"
+ for _, arg := range os.Args[1:] {
+ if arg == "-test.v=true" { // go test transforms -v option
+ format = "pretty"
+ break
+ }
+ }
+
+ opts := godog.Options{
+ Format: format,
+ Paths: []string{"features"},
+ }
+
+ status := godog.TestSuite{
+ Name: "godogs",
+ TestSuiteInitializer: InitializeTestSuite,
+ ScenarioInitializer: InitializeScenario,
+ Options: &opts,
+ }.Run()
+
+ // Optional: Run `testing` package's logic besides godog.
+ if st := m.Run(); st > status {
+ status = st
+ }
+
+ os.Exit(status)
+}
+```
+
+Now when running `go test -v` it will use **pretty** format.
+
+### Tags
+
+If you want to filter scenarios by tags, you can use the `-t=` or `--tags=` where `` is one of the following:
+
+- `@wip` - run all scenarios with wip tag
+- `~@wip` - exclude all scenarios with wip tag
+- `@wip && ~@new` - run wip scenarios, but exclude new
+- `@wip,@undone` - run wip or undone scenarios
+
+### Using assertion packages like testify with Godog
+A more extensive example can be [found here](/_examples/assert-godogs).
+
+``` go
+func thereShouldBeRemaining(remaining int) error {
+ return assertExpectedAndActual(
+ assert.Equal, Godogs, remaining,
+ "Expected %d godogs to be remaining, but there is %d", remaining, Godogs,
+ )
+}
+
+// assertExpectedAndActual is a helper function to allow the step function to call
+// assertion functions where you want to compare an expected and an actual value.
+func assertExpectedAndActual(a expectedAndActualAssertion, expected, actual interface{}, msgAndArgs ...interface{}) error {
+ var t asserter
+ a(&t, expected, actual, msgAndArgs...)
+ return t.err
+}
+
+type expectedAndActualAssertion func(t assert.TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool
+
+// asserter is used to be able to retrieve the error reported by the called assertion
+type asserter struct {
+ err error
+}
+
+// Errorf is used by the called assertion to report an error
+func (a *asserter) Errorf(format string, args ...interface{}) {
+ a.err = fmt.Errorf(format, args...)
+}
+```
+
+### Configure common options for godog CLI
+
+There are no global options or configuration files. Alias your common or project based commands: `alias godog-wip="godog --format=progress --tags=@wip"`
+
+### Testing browser interactions
+
+**godog** does not come with builtin packages to connect to the browser. You may want to look at [selenium](http://www.seleniumhq.org/) and probably [phantomjs](http://phantomjs.org/). See also the following components:
+
+1. [browsersteps](https://github.com/llonchj/browsersteps) - provides basic context steps to start selenium and navigate browser content.
+2. You may wish to have [goquery](https://github.com/PuerkitoBio/goquery)
+ in order to work with HTML responses like with JQuery.
+
+### Concurrency
+
+When concurrency is configured in options, godog will execute the scenarios concurrently, which is support by all supplied formatters.
+
+In order to support concurrency well, you should reset the state and isolate each scenario. They should not share any state. It is suggested to run the suite concurrently in order to make sure there is no state corruption or race conditions in the application.
+
+It is also useful to randomize the order of scenario execution, which you can now do with **--random** command option.
+
+### Building your own custom formatter
+A simple example can be [found here](/_examples/custom-formatter).
+
+## License
+**Godog** and **Gherkin** are licensed under the [MIT][license] and developed as a part of the [cucumber project][cucumber]
+
+[godoc]: https://pkg.go.dev/github.com/cucumber/godog "Documentation on godog"
+[golang]: https://golang.org/ "GO programming language"
+[behat]: http://docs.behat.org/ "Behavior driven development framework for PHP"
+[cucumber]: https://cucumber.io/ "Behavior driven development framework"
+[license]: https://en.wikipedia.org/wiki/MIT_License "The MIT license"
diff --git a/vendor/github.com/cucumber/godog/colors/ansi_others.go b/vendor/github.com/cucumber/godog/colors/ansi_others.go
new file mode 100644
index 00000000..4ce4e779
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/colors/ansi_others.go
@@ -0,0 +1,18 @@
+// Copyright 2014 shiena Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+// +build !windows
+
+package colors
+
+import "io"
+
+type ansiColorWriter struct {
+ w io.Writer
+ mode outputMode
+}
+
+func (cw *ansiColorWriter) Write(p []byte) (int, error) {
+ return cw.w.Write(p)
+}
diff --git a/vendor/github.com/cucumber/godog/colors/ansi_windows.go b/vendor/github.com/cucumber/godog/colors/ansi_windows.go
new file mode 100644
index 00000000..d80f8463
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/colors/ansi_windows.go
@@ -0,0 +1,417 @@
+// Copyright 2014 shiena Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+
+package colors
+
+import (
+ "bytes"
+ "io"
+ "strings"
+ "syscall"
+ "unsafe"
+)
+
+type csiState int
+
+const (
+ outsideCsiCode csiState = iota
+ firstCsiCode
+ secondCsiCode
+)
+
+type parseResult int
+
+const (
+ noConsole parseResult = iota
+ changedColor
+ unknown
+)
+
+type ansiColorWriter struct {
+ w io.Writer
+ mode outputMode
+ state csiState
+ paramStartBuf bytes.Buffer
+ paramBuf bytes.Buffer
+}
+
+const (
+ firstCsiChar byte = '\x1b'
+ secondeCsiChar byte = '['
+ separatorChar byte = ';'
+ sgrCode byte = 'm'
+)
+
+const (
+ foregroundBlue = uint16(0x0001)
+ foregroundGreen = uint16(0x0002)
+ foregroundRed = uint16(0x0004)
+ foregroundIntensity = uint16(0x0008)
+ backgroundBlue = uint16(0x0010)
+ backgroundGreen = uint16(0x0020)
+ backgroundRed = uint16(0x0040)
+ backgroundIntensity = uint16(0x0080)
+ underscore = uint16(0x8000)
+
+ foregroundMask = foregroundBlue | foregroundGreen | foregroundRed | foregroundIntensity
+ backgroundMask = backgroundBlue | backgroundGreen | backgroundRed | backgroundIntensity
+)
+
+const (
+ ansiReset = "0"
+ ansiIntensityOn = "1"
+ ansiIntensityOff = "21"
+ ansiUnderlineOn = "4"
+ ansiUnderlineOff = "24"
+ ansiBlinkOn = "5"
+ ansiBlinkOff = "25"
+
+ ansiForegroundBlack = "30"
+ ansiForegroundRed = "31"
+ ansiForegroundGreen = "32"
+ ansiForegroundYellow = "33"
+ ansiForegroundBlue = "34"
+ ansiForegroundMagenta = "35"
+ ansiForegroundCyan = "36"
+ ansiForegroundWhite = "37"
+ ansiForegroundDefault = "39"
+
+ ansiBackgroundBlack = "40"
+ ansiBackgroundRed = "41"
+ ansiBackgroundGreen = "42"
+ ansiBackgroundYellow = "43"
+ ansiBackgroundBlue = "44"
+ ansiBackgroundMagenta = "45"
+ ansiBackgroundCyan = "46"
+ ansiBackgroundWhite = "47"
+ ansiBackgroundDefault = "49"
+
+ ansiLightForegroundGray = "90"
+ ansiLightForegroundRed = "91"
+ ansiLightForegroundGreen = "92"
+ ansiLightForegroundYellow = "93"
+ ansiLightForegroundBlue = "94"
+ ansiLightForegroundMagenta = "95"
+ ansiLightForegroundCyan = "96"
+ ansiLightForegroundWhite = "97"
+
+ ansiLightBackgroundGray = "100"
+ ansiLightBackgroundRed = "101"
+ ansiLightBackgroundGreen = "102"
+ ansiLightBackgroundYellow = "103"
+ ansiLightBackgroundBlue = "104"
+ ansiLightBackgroundMagenta = "105"
+ ansiLightBackgroundCyan = "106"
+ ansiLightBackgroundWhite = "107"
+)
+
+type drawType int
+
+const (
+ foreground drawType = iota
+ background
+)
+
+type winColor struct {
+ code uint16
+ drawType drawType
+}
+
+var colorMap = map[string]winColor{
+ ansiForegroundBlack: {0, foreground},
+ ansiForegroundRed: {foregroundRed, foreground},
+ ansiForegroundGreen: {foregroundGreen, foreground},
+ ansiForegroundYellow: {foregroundRed | foregroundGreen, foreground},
+ ansiForegroundBlue: {foregroundBlue, foreground},
+ ansiForegroundMagenta: {foregroundRed | foregroundBlue, foreground},
+ ansiForegroundCyan: {foregroundGreen | foregroundBlue, foreground},
+ ansiForegroundWhite: {foregroundRed | foregroundGreen | foregroundBlue, foreground},
+ ansiForegroundDefault: {foregroundRed | foregroundGreen | foregroundBlue, foreground},
+
+ ansiBackgroundBlack: {0, background},
+ ansiBackgroundRed: {backgroundRed, background},
+ ansiBackgroundGreen: {backgroundGreen, background},
+ ansiBackgroundYellow: {backgroundRed | backgroundGreen, background},
+ ansiBackgroundBlue: {backgroundBlue, background},
+ ansiBackgroundMagenta: {backgroundRed | backgroundBlue, background},
+ ansiBackgroundCyan: {backgroundGreen | backgroundBlue, background},
+ ansiBackgroundWhite: {backgroundRed | backgroundGreen | backgroundBlue, background},
+ ansiBackgroundDefault: {0, background},
+
+ ansiLightForegroundGray: {foregroundIntensity, foreground},
+ ansiLightForegroundRed: {foregroundIntensity | foregroundRed, foreground},
+ ansiLightForegroundGreen: {foregroundIntensity | foregroundGreen, foreground},
+ ansiLightForegroundYellow: {foregroundIntensity | foregroundRed | foregroundGreen, foreground},
+ ansiLightForegroundBlue: {foregroundIntensity | foregroundBlue, foreground},
+ ansiLightForegroundMagenta: {foregroundIntensity | foregroundRed | foregroundBlue, foreground},
+ ansiLightForegroundCyan: {foregroundIntensity | foregroundGreen | foregroundBlue, foreground},
+ ansiLightForegroundWhite: {foregroundIntensity | foregroundRed | foregroundGreen | foregroundBlue, foreground},
+
+ ansiLightBackgroundGray: {backgroundIntensity, background},
+ ansiLightBackgroundRed: {backgroundIntensity | backgroundRed, background},
+ ansiLightBackgroundGreen: {backgroundIntensity | backgroundGreen, background},
+ ansiLightBackgroundYellow: {backgroundIntensity | backgroundRed | backgroundGreen, background},
+ ansiLightBackgroundBlue: {backgroundIntensity | backgroundBlue, background},
+ ansiLightBackgroundMagenta: {backgroundIntensity | backgroundRed | backgroundBlue, background},
+ ansiLightBackgroundCyan: {backgroundIntensity | backgroundGreen | backgroundBlue, background},
+ ansiLightBackgroundWhite: {backgroundIntensity | backgroundRed | backgroundGreen | backgroundBlue, background},
+}
+
+var (
+ kernel32 = syscall.NewLazyDLL("kernel32.dll")
+ procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute")
+ procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
+ defaultAttr *textAttributes
+)
+
+func init() {
+ screenInfo := getConsoleScreenBufferInfo(uintptr(syscall.Stdout))
+ if screenInfo != nil {
+ colorMap[ansiForegroundDefault] = winColor{
+ screenInfo.WAttributes & (foregroundRed | foregroundGreen | foregroundBlue),
+ foreground,
+ }
+ colorMap[ansiBackgroundDefault] = winColor{
+ screenInfo.WAttributes & (backgroundRed | backgroundGreen | backgroundBlue),
+ background,
+ }
+ defaultAttr = convertTextAttr(screenInfo.WAttributes)
+ }
+}
+
+type coord struct {
+ X, Y int16
+}
+
+type smallRect struct {
+ Left, Top, Right, Bottom int16
+}
+
+type consoleScreenBufferInfo struct {
+ DwSize coord
+ DwCursorPosition coord
+ WAttributes uint16
+ SrWindow smallRect
+ DwMaximumWindowSize coord
+}
+
+func getConsoleScreenBufferInfo(hConsoleOutput uintptr) *consoleScreenBufferInfo {
+ var csbi consoleScreenBufferInfo
+ ret, _, _ := procGetConsoleScreenBufferInfo.Call(
+ hConsoleOutput,
+ uintptr(unsafe.Pointer(&csbi)))
+ if ret == 0 {
+ return nil
+ }
+ return &csbi
+}
+
+func setConsoleTextAttribute(hConsoleOutput uintptr, wAttributes uint16) bool {
+ ret, _, _ := procSetConsoleTextAttribute.Call(
+ hConsoleOutput,
+ uintptr(wAttributes))
+ return ret != 0
+}
+
+type textAttributes struct {
+ foregroundColor uint16
+ backgroundColor uint16
+ foregroundIntensity uint16
+ backgroundIntensity uint16
+ underscore uint16
+ otherAttributes uint16
+}
+
+func convertTextAttr(winAttr uint16) *textAttributes {
+ fgColor := winAttr & (foregroundRed | foregroundGreen | foregroundBlue)
+ bgColor := winAttr & (backgroundRed | backgroundGreen | backgroundBlue)
+ fgIntensity := winAttr & foregroundIntensity
+ bgIntensity := winAttr & backgroundIntensity
+ underline := winAttr & underscore
+ otherAttributes := winAttr &^ (foregroundMask | backgroundMask | underscore)
+ return &textAttributes{fgColor, bgColor, fgIntensity, bgIntensity, underline, otherAttributes}
+}
+
+func convertWinAttr(textAttr *textAttributes) uint16 {
+ var winAttr uint16
+ winAttr |= textAttr.foregroundColor
+ winAttr |= textAttr.backgroundColor
+ winAttr |= textAttr.foregroundIntensity
+ winAttr |= textAttr.backgroundIntensity
+ winAttr |= textAttr.underscore
+ winAttr |= textAttr.otherAttributes
+ return winAttr
+}
+
+func changeColor(param []byte) parseResult {
+ screenInfo := getConsoleScreenBufferInfo(uintptr(syscall.Stdout))
+ if screenInfo == nil {
+ return noConsole
+ }
+
+ winAttr := convertTextAttr(screenInfo.WAttributes)
+ strParam := string(param)
+ if len(strParam) <= 0 {
+ strParam = "0"
+ }
+ csiParam := strings.Split(strParam, string(separatorChar))
+ for _, p := range csiParam {
+ c, ok := colorMap[p]
+ switch {
+ case !ok:
+ switch p {
+ case ansiReset:
+ winAttr.foregroundColor = defaultAttr.foregroundColor
+ winAttr.backgroundColor = defaultAttr.backgroundColor
+ winAttr.foregroundIntensity = defaultAttr.foregroundIntensity
+ winAttr.backgroundIntensity = defaultAttr.backgroundIntensity
+ winAttr.underscore = 0
+ winAttr.otherAttributes = 0
+ case ansiIntensityOn:
+ winAttr.foregroundIntensity = foregroundIntensity
+ case ansiIntensityOff:
+ winAttr.foregroundIntensity = 0
+ case ansiUnderlineOn:
+ winAttr.underscore = underscore
+ case ansiUnderlineOff:
+ winAttr.underscore = 0
+ case ansiBlinkOn:
+ winAttr.backgroundIntensity = backgroundIntensity
+ case ansiBlinkOff:
+ winAttr.backgroundIntensity = 0
+ default:
+ // unknown code
+ }
+ case c.drawType == foreground:
+ winAttr.foregroundColor = c.code
+ case c.drawType == background:
+ winAttr.backgroundColor = c.code
+ }
+ }
+ winTextAttribute := convertWinAttr(winAttr)
+ setConsoleTextAttribute(uintptr(syscall.Stdout), winTextAttribute)
+
+ return changedColor
+}
+
+func parseEscapeSequence(command byte, param []byte) parseResult {
+ if defaultAttr == nil {
+ return noConsole
+ }
+
+ switch command {
+ case sgrCode:
+ return changeColor(param)
+ default:
+ return unknown
+ }
+}
+
+func (cw *ansiColorWriter) flushBuffer() (int, error) {
+ return cw.flushTo(cw.w)
+}
+
+func (cw *ansiColorWriter) resetBuffer() (int, error) {
+ return cw.flushTo(nil)
+}
+
+func (cw *ansiColorWriter) flushTo(w io.Writer) (int, error) {
+ var n1, n2 int
+ var err error
+
+ startBytes := cw.paramStartBuf.Bytes()
+ cw.paramStartBuf.Reset()
+ if w != nil {
+ n1, err = cw.w.Write(startBytes)
+ if err != nil {
+ return n1, err
+ }
+ } else {
+ n1 = len(startBytes)
+ }
+ paramBytes := cw.paramBuf.Bytes()
+ cw.paramBuf.Reset()
+ if w != nil {
+ n2, err = cw.w.Write(paramBytes)
+ if err != nil {
+ return n1 + n2, err
+ }
+ } else {
+ n2 = len(paramBytes)
+ }
+ return n1 + n2, nil
+}
+
+func isParameterChar(b byte) bool {
+ return ('0' <= b && b <= '9') || b == separatorChar
+}
+
+func (cw *ansiColorWriter) Write(p []byte) (int, error) {
+ r, nw, first, last := 0, 0, 0, 0
+ if cw.mode != discardNonColorEscSeq {
+ cw.state = outsideCsiCode
+ cw.resetBuffer()
+ }
+
+ var err error
+ for i, ch := range p {
+ switch cw.state {
+ case outsideCsiCode:
+ if ch == firstCsiChar {
+ cw.paramStartBuf.WriteByte(ch)
+ cw.state = firstCsiCode
+ }
+ case firstCsiCode:
+ switch ch {
+ case firstCsiChar:
+ cw.paramStartBuf.WriteByte(ch)
+ break
+ case secondeCsiChar:
+ cw.paramStartBuf.WriteByte(ch)
+ cw.state = secondCsiCode
+ last = i - 1
+ default:
+ cw.resetBuffer()
+ cw.state = outsideCsiCode
+ }
+ case secondCsiCode:
+ if isParameterChar(ch) {
+ cw.paramBuf.WriteByte(ch)
+ } else {
+ nw, err = cw.w.Write(p[first:last])
+ r += nw
+ if err != nil {
+ return r, err
+ }
+ first = i + 1
+ result := parseEscapeSequence(ch, cw.paramBuf.Bytes())
+ if result == noConsole || (cw.mode == outputNonColorEscSeq && result == unknown) {
+ cw.paramBuf.WriteByte(ch)
+ nw, err := cw.flushBuffer()
+ if err != nil {
+ return r, err
+ }
+ r += nw
+ } else {
+ n, _ := cw.resetBuffer()
+ // Add one more to the size of the buffer for the last ch
+ r += n + 1
+ }
+
+ cw.state = outsideCsiCode
+ }
+ default:
+ cw.state = outsideCsiCode
+ }
+ }
+
+ if cw.mode != discardNonColorEscSeq || cw.state == outsideCsiCode {
+ nw, err = cw.w.Write(p[first:])
+ r += nw
+ }
+
+ return r, err
+}
diff --git a/vendor/github.com/cucumber/godog/colors/colors.go b/vendor/github.com/cucumber/godog/colors/colors.go
new file mode 100644
index 00000000..539747bf
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/colors/colors.go
@@ -0,0 +1,68 @@
+package colors
+
+import (
+ "fmt"
+ "strings"
+)
+
+const ansiEscape = "\x1b"
+
+// a color code type
+type color int
+
+// some ansi colors
+const (
+ black color = iota + 30
+ red
+ green
+ yellow
+ blue // unused
+ magenta // unused
+ cyan
+ white
+)
+
+func colorize(s interface{}, c color) string {
+ return fmt.Sprintf("%s[%dm%v%s[0m", ansiEscape, c, s, ansiEscape)
+}
+
+// ColorFunc is a helper type to create colorized strings.
+type ColorFunc func(interface{}) string
+
+// Bold will accept a ColorFunc and return a new ColorFunc
+// that will make the string bold.
+func Bold(fn ColorFunc) ColorFunc {
+ return ColorFunc(func(input interface{}) string {
+ return strings.Replace(fn(input), ansiEscape+"[", ansiEscape+"[1;", 1)
+ })
+}
+
+// Green will accept an interface and return a colorized green string.
+func Green(s interface{}) string {
+ return colorize(s, green)
+}
+
+// Red will accept an interface and return a colorized green string.
+func Red(s interface{}) string {
+ return colorize(s, red)
+}
+
+// Cyan will accept an interface and return a colorized green string.
+func Cyan(s interface{}) string {
+ return colorize(s, cyan)
+}
+
+// Black will accept an interface and return a colorized green string.
+func Black(s interface{}) string {
+ return colorize(s, black)
+}
+
+// Yellow will accept an interface and return a colorized green string.
+func Yellow(s interface{}) string {
+ return colorize(s, yellow)
+}
+
+// White will accept an interface and return a colorized green string.
+func White(s interface{}) string {
+ return colorize(s, white)
+}
diff --git a/vendor/github.com/cucumber/godog/colors/no_colors.go b/vendor/github.com/cucumber/godog/colors/no_colors.go
new file mode 100644
index 00000000..2eeb8024
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/colors/no_colors.go
@@ -0,0 +1,59 @@
+package colors
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+)
+
+type noColors struct {
+ out io.Writer
+ lastbuf bytes.Buffer
+}
+
+// Uncolored will accept and io.Writer and return a
+// new io.Writer that won't include colors.
+func Uncolored(w io.Writer) io.Writer {
+ return &noColors{out: w}
+}
+
+func (w *noColors) Write(data []byte) (n int, err error) {
+ er := bytes.NewBuffer(data)
+loop:
+ for {
+ c1, _, err := er.ReadRune()
+ if err != nil {
+ break loop
+ }
+ if c1 != 0x1b {
+ fmt.Fprint(w.out, string(c1))
+ continue
+ }
+ c2, _, err := er.ReadRune()
+ if err != nil {
+ w.lastbuf.WriteRune(c1)
+ break loop
+ }
+ if c2 != 0x5b {
+ w.lastbuf.WriteRune(c1)
+ w.lastbuf.WriteRune(c2)
+ continue
+ }
+
+ var buf bytes.Buffer
+ for {
+ c, _, err := er.ReadRune()
+ if err != nil {
+ w.lastbuf.WriteRune(c1)
+ w.lastbuf.WriteRune(c2)
+ w.lastbuf.Write(buf.Bytes())
+ break loop
+ }
+ if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
+ break
+ }
+ buf.Write([]byte(string(c)))
+ }
+ }
+ return len(data) - w.lastbuf.Len(), nil
+}
diff --git a/vendor/github.com/cucumber/godog/colors/writer.go b/vendor/github.com/cucumber/godog/colors/writer.go
new file mode 100644
index 00000000..469c7a5e
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/colors/writer.go
@@ -0,0 +1,41 @@
+// Copyright 2014 shiena Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package colors
+
+import "io"
+
+type outputMode int
+
+// DiscardNonColorEscSeq supports the divided color escape sequence.
+// But non-color escape sequence is not output.
+// Please use the OutputNonColorEscSeq If you want to output a non-color
+// escape sequences such as ncurses. However, it does not support the divided
+// color escape sequence.
+const (
+ _ outputMode = iota
+ discardNonColorEscSeq
+ outputNonColorEscSeq // unused
+)
+
+// Colored creates and initializes a new ansiColorWriter
+// using io.Writer w as its initial contents.
+// In the console of Windows, which change the foreground and background
+// colors of the text by the escape sequence.
+// In the console of other systems, which writes to w all text.
+func Colored(w io.Writer) io.Writer {
+ return createModeAnsiColorWriter(w, discardNonColorEscSeq)
+}
+
+// NewModeAnsiColorWriter create and initializes a new ansiColorWriter
+// by specifying the outputMode.
+func createModeAnsiColorWriter(w io.Writer, mode outputMode) io.Writer {
+ if _, ok := w.(*ansiColorWriter); !ok {
+ return &ansiColorWriter{
+ w: w,
+ mode: mode,
+ }
+ }
+ return w
+}
diff --git a/vendor/github.com/cucumber/godog/flags_deprecated.go b/vendor/github.com/cucumber/godog/flags_deprecated.go
new file mode 100644
index 00000000..b7b0f2b6
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/flags_deprecated.go
@@ -0,0 +1,238 @@
+package godog
+
+import (
+ "flag"
+ "fmt"
+ "io"
+ "strconv"
+ "strings"
+
+ "github.com/cucumber/godog/colors"
+ "github.com/cucumber/godog/internal/utils"
+)
+
+// repeats a space n times
+var s = utils.S
+
+var descFeaturesArgument = "Optional feature(s) to run. Can be:\n" +
+ s(4) + "- dir " + colors.Yellow("(features/)") + "\n" +
+ s(4) + "- feature " + colors.Yellow("(*.feature)") + "\n" +
+ s(4) + "- scenario at specific line " + colors.Yellow("(*.feature:10)") + "\n" +
+ "If no feature paths are listed, suite tries " + colors.Yellow("features") + " path by default.\n"
+
+var descConcurrencyOption = "Run the test suite with concurrency level:\n" +
+ s(4) + "- " + colors.Yellow(`= 1`) + ": supports all types of formats.\n" +
+ s(4) + "- " + colors.Yellow(`>= 2`) + ": only supports " + colors.Yellow("progress") + ". Note, that\n" +
+ s(4) + "your context needs to support parallel execution."
+
+var descTagsOption = "Filter scenarios by tags. Expression can be:\n" +
+ s(4) + "- " + colors.Yellow(`"@wip"`) + ": run all scenarios with wip tag\n" +
+ s(4) + "- " + colors.Yellow(`"~@wip"`) + ": exclude all scenarios with wip tag\n" +
+ s(4) + "- " + colors.Yellow(`"@wip && ~@new"`) + ": run wip scenarios, but exclude new\n" +
+ s(4) + "- " + colors.Yellow(`"@wip,@undone"`) + ": run wip or undone scenarios"
+
+var descRandomOption = "Randomly shuffle the scenario execution order.\n" +
+ "Specify SEED to reproduce the shuffling from a previous run.\n" +
+ s(4) + `e.g. ` + colors.Yellow(`--random`) + " or " + colors.Yellow(`--random=5738`)
+
+// FlagSet allows to manage flags by external suite runner
+// builds flag.FlagSet with godog flags binded
+//
+// Deprecated:
+func FlagSet(opt *Options) *flag.FlagSet {
+ set := flag.NewFlagSet("godog", flag.ExitOnError)
+ BindFlags("", set, opt)
+ set.Usage = usage(set, opt.Output)
+ return set
+}
+
+// BindFlags binds godog flags to given flag set prefixed
+// by given prefix, without overriding usage
+//
+// Deprecated: Use BindCommandLineFlags(prefix, &opts)
+// instead of BindFlags(prefix, flag.CommandLine, &opts)
+func BindFlags(prefix string, set *flag.FlagSet, opt *Options) {
+ descFormatOption := "How to format tests output. Built-in formats:\n"
+ // @TODO: sort by name
+ for name, desc := range AvailableFormatters() {
+ descFormatOption += s(4) + "- " + colors.Yellow(name) + ": " + desc + "\n"
+ }
+ descFormatOption = strings.TrimSpace(descFormatOption)
+
+ // override flag defaults if any corresponding properties were supplied on the incoming `opt`
+ defFormatOption := "pretty"
+ if opt.Format != "" {
+ defFormatOption = opt.Format
+ }
+
+ defTagsOption := ""
+ if opt.Tags != "" {
+ defTagsOption = opt.Tags
+ }
+
+ defConcurrencyOption := 1
+ if opt.Concurrency != 0 {
+ defConcurrencyOption = opt.Concurrency
+ }
+
+ defShowStepDefinitions := false
+ if opt.ShowStepDefinitions {
+ defShowStepDefinitions = opt.ShowStepDefinitions
+ }
+
+ defStopOnFailure := false
+ if opt.StopOnFailure {
+ defStopOnFailure = opt.StopOnFailure
+ }
+
+ defStrict := false
+ if opt.Strict {
+ defStrict = opt.Strict
+ }
+
+ defNoColors := false
+ if opt.NoColors {
+ defNoColors = opt.NoColors
+ }
+
+ set.StringVar(&opt.Format, prefix+"format", defFormatOption, descFormatOption)
+ set.StringVar(&opt.Format, prefix+"f", defFormatOption, descFormatOption)
+ set.StringVar(&opt.Tags, prefix+"tags", defTagsOption, descTagsOption)
+ set.StringVar(&opt.Tags, prefix+"t", defTagsOption, descTagsOption)
+ set.IntVar(&opt.Concurrency, prefix+"concurrency", defConcurrencyOption, descConcurrencyOption)
+ set.IntVar(&opt.Concurrency, prefix+"c", defConcurrencyOption, descConcurrencyOption)
+ set.BoolVar(&opt.ShowStepDefinitions, prefix+"definitions", defShowStepDefinitions, "Print all available step definitions.")
+ set.BoolVar(&opt.ShowStepDefinitions, prefix+"d", defShowStepDefinitions, "Print all available step definitions.")
+ set.BoolVar(&opt.StopOnFailure, prefix+"stop-on-failure", defStopOnFailure, "Stop processing on first failed scenario.")
+ set.BoolVar(&opt.Strict, prefix+"strict", defStrict, "Fail suite when there are pending or undefined steps.")
+ set.BoolVar(&opt.NoColors, prefix+"no-colors", defNoColors, "Disable ansi colors.")
+ set.Var(&randomSeed{&opt.Randomize}, prefix+"random", descRandomOption)
+}
+
+type flagged struct {
+ short, long, descr, dflt string
+}
+
+func (f *flagged) name() string {
+ var name string
+ switch {
+ case len(f.short) > 0 && len(f.long) > 0:
+ name = fmt.Sprintf("-%s, --%s", f.short, f.long)
+ case len(f.long) > 0:
+ name = fmt.Sprintf("--%s", f.long)
+ case len(f.short) > 0:
+ name = fmt.Sprintf("-%s", f.short)
+ }
+
+ if f.long == "random" {
+ // `random` is special in that we will later assign it randomly
+ // if the user specifies `--random` without specifying one,
+ // so mask the "default" value here to avoid UI confusion about
+ // what the value will end up being.
+ name += "[=SEED]"
+ } else if f.dflt != "true" && f.dflt != "false" {
+ name += "=" + f.dflt
+ }
+ return name
+}
+
+func usage(set *flag.FlagSet, w io.Writer) func() {
+ return func() {
+ var list []*flagged
+ var longest int
+ set.VisitAll(func(f *flag.Flag) {
+ var fl *flagged
+ for _, flg := range list {
+ if flg.descr == f.Usage {
+ fl = flg
+ break
+ }
+ }
+ if nil == fl {
+ fl = &flagged{
+ dflt: f.DefValue,
+ descr: f.Usage,
+ }
+ list = append(list, fl)
+ }
+ if len(f.Name) > 2 {
+ fl.long = f.Name
+ } else {
+ fl.short = f.Name
+ }
+ })
+
+ for _, f := range list {
+ if len(f.name()) > longest {
+ longest = len(f.name())
+ }
+ }
+
+ // prints an option or argument with a description, or only description
+ opt := func(name, desc string) string {
+ var ret []string
+ lines := strings.Split(desc, "\n")
+ ret = append(ret, s(2)+colors.Green(name)+s(longest+2-len(name))+lines[0])
+ if len(lines) > 1 {
+ for _, ln := range lines[1:] {
+ ret = append(ret, s(2)+s(longest+2)+ln)
+ }
+ }
+ return strings.Join(ret, "\n")
+ }
+
+ // --- GENERAL ---
+ fmt.Fprintln(w, colors.Yellow("Usage:"))
+ fmt.Fprintf(w, s(2)+"godog [options] []\n\n")
+ // description
+ fmt.Fprintln(w, "Builds a test package and runs given feature files.")
+ fmt.Fprintf(w, "Command should be run from the directory of tested package and contain buildable go source.\n\n")
+
+ // --- ARGUMENTS ---
+ fmt.Fprintln(w, colors.Yellow("Arguments:"))
+ // --> features
+ fmt.Fprintln(w, opt("features", descFeaturesArgument))
+
+ // --- OPTIONS ---
+ fmt.Fprintln(w, colors.Yellow("Options:"))
+ for _, f := range list {
+ fmt.Fprintln(w, opt(f.name(), f.descr))
+ }
+ fmt.Fprintln(w, "")
+ }
+}
+
+// randomSeed implements `flag.Value`, see https://golang.org/pkg/flag/#Value
+type randomSeed struct {
+ ref *int64
+}
+
+func (rs *randomSeed) Set(s string) error {
+ if s == "true" {
+ *rs.ref = makeRandomSeed()
+ return nil
+ }
+
+ if s == "false" {
+ *rs.ref = 0
+ return nil
+ }
+
+ i, err := strconv.ParseInt(s, 10, 64)
+ *rs.ref = i
+ return err
+}
+
+func (rs *randomSeed) String() string {
+ if rs.ref == nil {
+ return "0"
+ }
+ return strconv.FormatInt(*rs.ref, 10)
+}
+
+// If a Value has an IsBoolFlag() bool method returning true, the command-line
+// parser makes -name equivalent to -name=true rather than using the next
+// command-line argument.
+func (rs *randomSeed) IsBoolFlag() bool {
+ return *rs.ref == 0
+}
diff --git a/vendor/github.com/cucumber/godog/flags_v0110.go b/vendor/github.com/cucumber/godog/flags_v0110.go
new file mode 100644
index 00000000..eddf0279
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/flags_v0110.go
@@ -0,0 +1,33 @@
+package godog
+
+import (
+ "errors"
+ "flag"
+ "math/rand"
+ "time"
+
+ "github.com/spf13/pflag"
+
+ "github.com/cucumber/godog/internal/flags"
+)
+
+// Choose randomly assigns a convenient pseudo-random seed value.
+// The resulting seed will be between `1-99999` for later ease of specification.
+func makeRandomSeed() int64 {
+ return rand.New(rand.NewSource(time.Now().UTC().UnixNano())).Int63n(99998) + 1
+}
+
+func flagSet(opt *Options) *pflag.FlagSet {
+ set := pflag.NewFlagSet("godog", pflag.ExitOnError)
+ flags.BindRunCmdFlags("", set, opt)
+ pflag.ErrHelp = errors.New("godog: help requested")
+ return set
+}
+
+// BindCommandLineFlags binds godog flags to given flag set prefixed
+// by given prefix, without overriding usage
+func BindCommandLineFlags(prefix string, opts *Options) {
+ flagSet := pflag.CommandLine
+ flags.BindRunCmdFlags(prefix, flagSet, opts)
+ pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
+}
diff --git a/vendor/github.com/cucumber/godog/fmt.go b/vendor/github.com/cucumber/godog/fmt.go
new file mode 100644
index 00000000..5934ddb7
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/fmt.go
@@ -0,0 +1,76 @@
+package godog
+
+import (
+ "fmt"
+ "io"
+ "strings"
+ "unicode/utf8"
+
+ "github.com/cucumber/godog/colors"
+ "github.com/cucumber/godog/formatters"
+ internal_fmt "github.com/cucumber/godog/internal/formatters"
+ "github.com/cucumber/godog/internal/models"
+ "github.com/cucumber/godog/internal/storage"
+)
+
+// FindFmt searches available formatters registered
+// and returns FormaterFunc matched by given
+// format name or nil otherwise
+func FindFmt(name string) FormatterFunc {
+ return formatters.FindFmt(name)
+}
+
+// Format registers a feature suite output
+// formatter by given name, description and
+// FormatterFunc constructor function, to initialize
+// formatter with the output recorder.
+func Format(name, description string, f FormatterFunc) {
+ formatters.Format(name, description, f)
+}
+
+// AvailableFormatters gives a map of all
+// formatters registered with their name as key
+// and description as value
+func AvailableFormatters() map[string]string {
+ return formatters.AvailableFormatters()
+}
+
+// Formatter is an interface for feature runner
+// output summary presentation.
+//
+// New formatters may be created to represent
+// suite results in different ways. These new
+// formatters needs to be registered with a
+// godog.Format function call
+type Formatter = formatters.Formatter
+
+type storageFormatter interface {
+ SetStorage(*storage.Storage)
+}
+
+// FormatterFunc builds a formatter with given
+// suite name and io.Writer to record output
+type FormatterFunc = formatters.FormatterFunc
+
+func printStepDefinitions(steps []*models.StepDefinition, w io.Writer) {
+ var longest int
+ for _, def := range steps {
+ n := utf8.RuneCountInString(def.Expr.String())
+ if longest < n {
+ longest = n
+ }
+ }
+
+ for _, def := range steps {
+ n := utf8.RuneCountInString(def.Expr.String())
+ location := internal_fmt.DefinitionID(def)
+ spaces := strings.Repeat(" ", longest-n)
+ fmt.Fprintln(w,
+ colors.Yellow(def.Expr.String())+spaces,
+ colors.Bold(colors.Black)("# "+location))
+ }
+
+ if len(steps) == 0 {
+ fmt.Fprintln(w, "there were no contexts registered, could not find any step definition..")
+ }
+}
diff --git a/vendor/github.com/cucumber/godog/formatters/fmt.go b/vendor/github.com/cucumber/godog/formatters/fmt.go
new file mode 100644
index 00000000..49131437
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/formatters/fmt.go
@@ -0,0 +1,91 @@
+package formatters
+
+import (
+ "io"
+ "regexp"
+
+ "github.com/cucumber/messages-go/v10"
+)
+
+type registeredFormatter struct {
+ name string
+ description string
+ fmt FormatterFunc
+}
+
+var registeredFormatters []*registeredFormatter
+
+// FindFmt searches available formatters registered
+// and returns FormaterFunc matched by given
+// format name or nil otherwise
+func FindFmt(name string) FormatterFunc {
+ for _, el := range registeredFormatters {
+ if el.name == name {
+ return el.fmt
+ }
+ }
+
+ return nil
+}
+
+// Format registers a feature suite output
+// formatter by given name, description and
+// FormatterFunc constructor function, to initialize
+// formatter with the output recorder.
+func Format(name, description string, f FormatterFunc) {
+ registeredFormatters = append(registeredFormatters, ®isteredFormatter{
+ name: name,
+ fmt: f,
+ description: description,
+ })
+}
+
+// AvailableFormatters gives a map of all
+// formatters registered with their name as key
+// and description as value
+func AvailableFormatters() map[string]string {
+ fmts := make(map[string]string, len(registeredFormatters))
+
+ for _, f := range registeredFormatters {
+ fmts[f.name] = f.description
+ }
+
+ return fmts
+}
+
+// Formatter is an interface for feature runner
+// output summary presentation.
+//
+// New formatters may be created to represent
+// suite results in different ways. These new
+// formatters needs to be registered with a
+// godog.Format function call
+type Formatter interface {
+ TestRunStarted()
+ Feature(*messages.GherkinDocument, string, []byte)
+ Pickle(*messages.Pickle)
+ Defined(*messages.Pickle, *messages.Pickle_PickleStep, *StepDefinition)
+ Failed(*messages.Pickle, *messages.Pickle_PickleStep, *StepDefinition, error)
+ Passed(*messages.Pickle, *messages.Pickle_PickleStep, *StepDefinition)
+ Skipped(*messages.Pickle, *messages.Pickle_PickleStep, *StepDefinition)
+ Undefined(*messages.Pickle, *messages.Pickle_PickleStep, *StepDefinition)
+ Pending(*messages.Pickle, *messages.Pickle_PickleStep, *StepDefinition)
+ Summary()
+}
+
+// FormatterFunc builds a formatter with given
+// suite name and io.Writer to record output
+type FormatterFunc func(string, io.Writer) Formatter
+
+// StepDefinition is a registered step definition
+// contains a StepHandler and regexp which
+// is used to match a step. Args which
+// were matched by last executed step
+//
+// This structure is passed to the formatter
+// when step is matched and is either failed
+// or successful
+type StepDefinition struct {
+ Expr *regexp.Regexp
+ Handler interface{}
+}
diff --git a/vendor/github.com/cucumber/godog/go.mod b/vendor/github.com/cucumber/godog/go.mod
new file mode 100644
index 00000000..05fa7a40
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/go.mod
@@ -0,0 +1,16 @@
+module github.com/cucumber/godog
+
+go 1.15
+
+require (
+ github.com/cucumber/gherkin-go/v11 v11.0.0
+ github.com/cucumber/messages-go/v10 v10.0.3
+ github.com/gofrs/uuid v3.3.0+incompatible // indirect
+ github.com/hashicorp/go-memdb v1.3.0
+ github.com/hashicorp/go-uuid v1.0.2 // indirect
+ github.com/spf13/cobra v1.1.1
+ github.com/spf13/pflag v1.0.5
+ github.com/stretchr/testify v1.6.1
+ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
+ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
+)
diff --git a/vendor/github.com/cucumber/godog/go.sum b/vendor/github.com/cucumber/godog/go.sum
new file mode 100644
index 00000000..d0157443
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/go.sum
@@ -0,0 +1,343 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/aslakhellesoy/gox v1.0.100/go.mod h1:AJl542QsKKG96COVsv0N74HHzVQgDIQPceVUh1aeU2M=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cucumber/gherkin-go/v11 v11.0.0 h1:cwVwN1Qn2VRSfHZNLEh5x00tPBmZcjATBWDpxsR5Xug=
+github.com/cucumber/gherkin-go/v11 v11.0.0/go.mod h1:CX33k2XU2qog4e+TFjOValoq6mIUq0DmVccZs238R9w=
+github.com/cucumber/messages-go/v10 v10.0.1/go.mod h1:kA5T38CBlBbYLU12TIrJ4fk4wSkVVOgyh7Enyy8WnSg=
+github.com/cucumber/messages-go/v10 v10.0.3 h1:m/9SD/K/A15WP7i1aemIv7cwvUw+viS51Ui5HBw1cdE=
+github.com/cucumber/messages-go/v10 v10.0.3/go.mod h1:9jMZ2Y8ZxjLY6TG2+x344nt5rXstVVDYSdS5ySfI1WY=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
+github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84=
+github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
+github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-immutable-radix v1.3.0 h1:8exGP7ego3OmkfksihtSouGMZ+hQrhxx+FVELeXpVPE=
+github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-memdb v1.3.0 h1:xdXq34gBOMEloa9rlGStLxmfX/dyIK8htOv36dQUwHU=
+github.com/hashicorp/go-memdb v1.3.0/go.mod h1:Mluclgwib3R93Hk5fxEfiRhB+6Dar64wWh71LpNSe3g=
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
+github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
+github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
+github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
+github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
+github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
+github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
+github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
+github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4=
+github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
+github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
diff --git a/vendor/github.com/cucumber/godog/godog.go b/vendor/github.com/cucumber/godog/godog.go
new file mode 100644
index 00000000..b97c233c
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/godog.go
@@ -0,0 +1,42 @@
+/*
+Package godog is the official Cucumber BDD framework for Golang, it merges specification
+and test documentation into one cohesive whole.
+
+Godog does not intervene with the standard "go test" command and it's behavior.
+You can leverage both frameworks to functionally test your application while
+maintaining all test related source code in *_test.go files.
+
+Godog acts similar compared to go test command. It uses go
+compiler and linker tool in order to produce test executable. Godog
+contexts needs to be exported same as Test functions for go test.
+
+For example, imagine you're about to create the famous UNIX ls command.
+Before you begin, you describe how the feature should work, see the example below..
+
+Example:
+ Feature: ls
+ In order to see the directory structure
+ As a UNIX user
+ I need to be able to list the current directory's contents
+
+ Scenario:
+ Given I am in a directory "test"
+ And I have a file named "foo"
+ And I have a file named "bar"
+ When I run ls
+ Then I should get output:
+ """
+ bar
+ foo
+ """
+
+Now, wouldn't it be cool if something could read this sentence and use it to actually
+run a test against the ls command? Hey, that's exactly what this package does!
+As you'll see, Godog is easy to learn, quick to use, and will put the fun back into tests.
+
+Godog was inspired by Behat and Cucumber the above description is taken from it's documentation.
+*/
+package godog
+
+// Version of package - based on Semantic Versioning 2.0.0 http://semver.org/
+const Version = "v0.11.0"
diff --git a/vendor/github.com/cucumber/godog/internal/builder/ast.go b/vendor/github.com/cucumber/godog/internal/builder/ast.go
new file mode 100644
index 00000000..c4f82407
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/builder/ast.go
@@ -0,0 +1,31 @@
+package builder
+
+import "go/ast"
+
+func astContexts(f *ast.File, selectName string) []string {
+ var contexts []string
+ for _, d := range f.Decls {
+ switch fun := d.(type) {
+ case *ast.FuncDecl:
+ for _, param := range fun.Type.Params.List {
+ switch expr := param.Type.(type) {
+ case *ast.StarExpr:
+ switch x := expr.X.(type) {
+ case *ast.Ident:
+ if x.Name == selectName {
+ contexts = append(contexts, fun.Name.Name)
+ }
+ case *ast.SelectorExpr:
+ switch t := x.X.(type) {
+ case *ast.Ident:
+ if t.Name == "godog" && x.Sel.Name == selectName {
+ contexts = append(contexts, fun.Name.Name)
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return contexts
+}
diff --git a/vendor/github.com/cucumber/godog/internal/builder/builder.go b/vendor/github.com/cucumber/godog/internal/builder/builder.go
new file mode 100644
index 00000000..626e7bb1
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/builder/builder.go
@@ -0,0 +1,454 @@
+package builder
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "go/build"
+ "go/parser"
+ "go/token"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path"
+ "path/filepath"
+ "strings"
+ "text/template"
+ "time"
+ "unicode"
+)
+
+var (
+ tooldir = findToolDir()
+ compiler = filepath.Join(tooldir, "compile")
+ linker = filepath.Join(tooldir, "link")
+ gopaths = filepath.SplitList(build.Default.GOPATH)
+ godogImportPath = "github.com/cucumber/godog"
+
+ // godep
+ runnerTemplate = template.Must(template.New("testmain").Parse(`package main
+
+import (
+ "github.com/cucumber/godog"
+ {{if or .TestSuiteContexts .ScenarioContexts}}_test "{{.ImportPath}}"{{end}}
+ {{if or .XTestSuiteContexts .XScenarioContexts}}_xtest "{{.ImportPath}}_test"{{end}}
+ {{if or .XTestSuiteContexts .XScenarioContexts}}"testing/internal/testdeps"{{end}}
+ "os"
+)
+
+{{if or .XTestSuiteContexts .XScenarioContexts}}
+func init() {
+ testdeps.ImportPath = "{{.ImportPath}}"
+}
+{{end}}
+
+func main() {
+ status := godog.TestSuite{
+ Name: "{{ .Name }}",
+ TestSuiteInitializer: func (ctx *godog.TestSuiteContext) {
+ os.Setenv("GODOG_TESTED_PACKAGE", "{{.ImportPath}}")
+ {{range .TestSuiteContexts}}
+ _test.{{ . }}(ctx)
+ {{end}}
+ {{range .XTestSuiteContexts}}
+ _xtest.{{ . }}(ctx)
+ {{end}}
+ },
+ ScenarioInitializer: func (ctx *godog.ScenarioContext) {
+ {{range .ScenarioContexts}}
+ _test.{{ . }}(ctx)
+ {{end}}
+ {{range .XScenarioContexts}}
+ _xtest.{{ . }}(ctx)
+ {{end}}
+ },
+ }.Run()
+
+ os.Exit(status)
+}`))
+
+ // temp file for import
+ tempFileTemplate = template.Must(template.New("temp").Parse(`package {{.Name}}
+
+import "github.com/cucumber/godog"
+
+var _ = godog.Version
+`))
+)
+
+// Build creates a test package like go test command at given target path.
+// If there are no go files in tested directory, then
+// it simply builds a godog executable to scan features.
+//
+// If there are go test files, it first builds a test
+// package with standard go test command.
+//
+// Finally it generates godog suite executable which
+// registers exported godog contexts from the test files
+// of tested package.
+//
+// Returns the path to generated executable
+func Build(bin string) error {
+ abs, err := filepath.Abs(".")
+ if err != nil {
+ return err
+ }
+
+ // we allow package to be nil, if godog is run only when
+ // there is a feature file in empty directory
+ pkg := importPackage(abs)
+ src, err := buildTestMain(pkg)
+ if err != nil {
+ return err
+ }
+
+ // may need to produce temp file for godog dependency
+ srcTemp, err := buildTempFile(pkg)
+ if err != nil {
+ return err
+ }
+
+ if srcTemp != nil {
+ // @TODO: in case of modules we cannot build it our selves, we need to have this hacky option
+ pathTemp := filepath.Join(abs, "godog_dependency_file_test.go")
+ err = ioutil.WriteFile(pathTemp, srcTemp, 0644)
+ if err != nil {
+ return err
+ }
+ defer os.Remove(pathTemp)
+ }
+
+ workdir := ""
+ testdir := workdir
+
+ // build and compile the tested package.
+ // generated test executable will be removed
+ // since we do not need it for godog suite.
+ // we also print back the temp WORK directory
+ // go has built. We will reuse it for our suite workdir.
+ temp := fmt.Sprintf(filepath.Join("%s", "temp-%d.test"), os.TempDir(), time.Now().UnixNano())
+ testOutput, err := exec.Command("go", "test", "-c", "-work", "-o", temp).CombinedOutput()
+ if err != nil {
+ return fmt.Errorf("failed to compile tested package: %s, reason: %v, output: %s", abs, err, string(testOutput))
+ }
+ defer os.Remove(temp)
+
+ // extract go-build temporary directory as our workdir
+ linesOut := strings.Split(strings.TrimSpace(string(testOutput)), "\n")
+ // it may have some compilation warnings, in the output, but these are not
+ // considered to be errors, since command exit status is 0
+ for _, ln := range linesOut {
+ if !strings.HasPrefix(ln, "WORK=") {
+ continue
+ }
+ workdir = strings.Replace(ln, "WORK=", "", 1)
+ break
+ }
+
+ // may not locate it in output
+ if workdir == testdir {
+ return fmt.Errorf("expected WORK dir path to be present in output: %s", string(testOutput))
+ }
+
+ // check whether workdir exists
+ stats, err := os.Stat(workdir)
+ if os.IsNotExist(err) {
+ return fmt.Errorf("expected WORK dir: %s to be available", workdir)
+ }
+
+ if !stats.IsDir() {
+ return fmt.Errorf("expected WORK dir: %s to be directory", workdir)
+ }
+ testdir = filepath.Join(workdir, "b001")
+ defer os.RemoveAll(workdir)
+
+ // replace _testmain.go file with our own
+ testmain := filepath.Join(testdir, "_testmain.go")
+ err = ioutil.WriteFile(testmain, src, 0644)
+ if err != nil {
+ return err
+ }
+
+ // godog package may be vendored and may need importmap
+ vendored := maybeVendoredGodog()
+
+ // compile godog testmain package archive
+ // we do not depend on CGO so a lot of checks are not necessary
+ linkerCfg := filepath.Join(testdir, "importcfg.link")
+ compilerCfg := linkerCfg
+ if vendored != nil {
+ data, err := ioutil.ReadFile(linkerCfg)
+ if err != nil {
+ return err
+ }
+
+ data = append(data, []byte(fmt.Sprintf("importmap %s=%s\n", godogImportPath, vendored.ImportPath))...)
+ compilerCfg = filepath.Join(testdir, "importcfg")
+
+ err = ioutil.WriteFile(compilerCfg, data, 0644)
+ if err != nil {
+ return err
+ }
+ }
+
+ testMainPkgOut := filepath.Join(testdir, "main.a")
+ args := []string{
+ "-o", testMainPkgOut,
+ "-importcfg", compilerCfg,
+ "-p", "main",
+ "-complete",
+ }
+
+ args = append(args, "-pack", testmain)
+ cmd := exec.Command(compiler, args...)
+ cmd.Env = os.Environ()
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ return fmt.Errorf("failed to compile testmain package: %v - output: %s", err, string(out))
+ }
+
+ // link test suite executable
+ args = []string{
+ "-o", bin,
+ "-importcfg", linkerCfg,
+ "-buildmode=exe",
+ }
+ args = append(args, testMainPkgOut)
+ cmd = exec.Command(linker, args...)
+ cmd.Env = os.Environ()
+
+ out, err = cmd.CombinedOutput()
+ if err != nil {
+ msg := `failed to link test executable:
+ reason: %s
+ command: %s`
+ return fmt.Errorf(msg, string(out), linker+" '"+strings.Join(args, "' '")+"'")
+ }
+
+ return nil
+}
+
+func maybeVendoredGodog() *build.Package {
+ dir, err := filepath.Abs(".")
+ if err != nil {
+ return nil
+ }
+
+ for _, gopath := range gopaths {
+ gopath = filepath.Join(gopath, "src")
+ for strings.HasPrefix(dir, gopath) && dir != gopath {
+ pkg, err := build.ImportDir(filepath.Join(dir, "vendor", godogImportPath), 0)
+ if err != nil {
+ dir = filepath.Dir(dir)
+ continue
+ }
+ return pkg
+ }
+ }
+ return nil
+}
+
+func normaliseLocalImportPath(dir string) string {
+ return path.Join("_", strings.Map(makeImportValid, filepath.ToSlash(dir)))
+}
+func importPackage(dir string) *build.Package {
+ pkg, _ := build.ImportDir(dir, 0)
+
+ // normalize import path for local import packages
+ // taken from go source code
+ // see: https://github.com/golang/go/blob/go1.7rc5/src/cmd/go/pkg.go#L279
+ if pkg != nil && pkg.ImportPath == "." {
+ pkg.ImportPath = normaliseLocalImportPath(dir)
+ }
+
+ return pkg
+}
+
+// from go src
+func makeImportValid(r rune) rune {
+ // Should match Go spec, compilers, and ../../go/parser/parser.go:/isValidImport.
+ const illegalChars = `!"#$%&'()*,:;<=>?[\]^{|}` + "`\uFFFD"
+ if !unicode.IsGraphic(r) || unicode.IsSpace(r) || strings.ContainsRune(illegalChars, r) {
+ return '_'
+ }
+ return r
+}
+
+// build temporary file content if godog
+// package is not present in currently tested package
+func buildTempFile(pkg *build.Package) ([]byte, error) {
+ shouldBuild := true
+ var name string
+ if pkg != nil {
+ name = pkg.Name
+ all := pkg.Imports
+ all = append(all, pkg.TestImports...)
+ all = append(all, pkg.XTestImports...)
+ for _, imp := range all {
+ if imp == godogImportPath {
+ shouldBuild = false
+ break
+ }
+ }
+
+ // maybe we are testing the godog package on it's own
+ if name == "godog" {
+ if parseImport(pkg.ImportPath, pkg.Root) == godogImportPath {
+ shouldBuild = false
+ }
+ }
+ }
+
+ if name == "" {
+ name = "main"
+ }
+
+ if !shouldBuild {
+ return nil, nil
+ }
+
+ data := struct{ Name string }{name}
+ var buf bytes.Buffer
+ if err := tempFileTemplate.Execute(&buf, data); err != nil {
+ return nil, err
+ }
+ return buf.Bytes(), nil
+}
+
+// buildTestMain if given package is valid
+// it scans test files for contexts
+// and produces a testmain source code.
+func buildTestMain(pkg *build.Package) ([]byte, error) {
+ var (
+ ctxs, xctxs contexts
+ err error
+ name = "main"
+ importPath string
+ )
+
+ if nil != pkg {
+ if ctxs, err = processPackageTestFiles(pkg.TestGoFiles); err != nil {
+ return nil, err
+ }
+
+ if xctxs, err = processPackageTestFiles(pkg.XTestGoFiles); err != nil {
+ return nil, err
+ }
+
+ importPath = parseImport(pkg.ImportPath, pkg.Root)
+ name = pkg.Name
+ } else {
+ name = "main"
+ }
+
+ data := struct {
+ Name string
+ ImportPath string
+ TestSuiteContexts []string
+ ScenarioContexts []string
+ XTestSuiteContexts []string
+ XScenarioContexts []string
+ }{
+ Name: name,
+ ImportPath: importPath,
+ TestSuiteContexts: ctxs.testSuiteCtxs,
+ ScenarioContexts: ctxs.scenarioCtxs,
+ XTestSuiteContexts: xctxs.testSuiteCtxs,
+ XScenarioContexts: xctxs.scenarioCtxs,
+ }
+
+ var buf bytes.Buffer
+ if err = runnerTemplate.Execute(&buf, data); err != nil {
+ return nil, err
+ }
+ return buf.Bytes(), nil
+}
+
+// parseImport parses the import path to deal with go module.
+func parseImport(rawPath, rootPath string) string {
+ // with go > 1.11 and go module enabled out of the GOPATH,
+ // the import path begins with an underscore and the GOPATH is unknown on build.
+ if rootPath != "" {
+ // go < 1.11 or it's a module inside the GOPATH
+ return rawPath
+ }
+ // for module support, query the module import path
+ cmd := exec.Command("go", "list", "-m", "-json")
+ out, err := cmd.StdoutPipe()
+ if err != nil {
+ // Unable to read stdout
+ return rawPath
+ }
+ if cmd.Start() != nil {
+ // Does not using modules
+ return rawPath
+ }
+ var mod struct {
+ Dir string `json:"Dir"`
+ Path string `json:"Path"`
+ }
+ if json.NewDecoder(out).Decode(&mod) != nil {
+ // Unexpected result
+ return rawPath
+ }
+ if cmd.Wait() != nil {
+ return rawPath
+ }
+ // Concatenates the module path with the current sub-folders if needed
+ return mod.Path + filepath.ToSlash(strings.TrimPrefix(rawPath, normaliseLocalImportPath(mod.Dir)))
+}
+
+type contexts struct {
+ deprecatedFeatureCtxs []string
+ testSuiteCtxs []string
+ scenarioCtxs []string
+}
+
+func (ctxs contexts) validate() error {
+ var allCtxs []string
+ allCtxs = append(allCtxs, ctxs.deprecatedFeatureCtxs...)
+ allCtxs = append(allCtxs, ctxs.testSuiteCtxs...)
+ allCtxs = append(allCtxs, ctxs.scenarioCtxs...)
+
+ var failed []string
+ for _, ctx := range allCtxs {
+ runes := []rune(ctx)
+ if unicode.IsLower(runes[0]) {
+ expected := append([]rune{unicode.ToUpper(runes[0])}, runes[1:]...)
+ failed = append(failed, fmt.Sprintf("%s - should be: %s", ctx, string(expected)))
+ }
+ }
+
+ if len(failed) > 0 {
+ return fmt.Errorf("godog contexts must be exported:\n\t%s", strings.Join(failed, "\n\t"))
+ }
+
+ return nil
+}
+
+// processPackageTestFiles runs through ast of each test
+// file pack and looks for godog suite contexts to register
+// on run
+func processPackageTestFiles(packs ...[]string) (ctxs contexts, _ error) {
+ fset := token.NewFileSet()
+ for _, pack := range packs {
+ for _, testFile := range pack {
+ node, err := parser.ParseFile(fset, testFile, nil, 0)
+ if err != nil {
+ return ctxs, err
+ }
+
+ ctxs.testSuiteCtxs = append(ctxs.testSuiteCtxs, astContexts(node, "TestSuiteContext")...)
+ ctxs.scenarioCtxs = append(ctxs.scenarioCtxs, astContexts(node, "ScenarioContext")...)
+ }
+ }
+
+ return ctxs, ctxs.validate()
+}
+
+func findToolDir() string {
+ if out, err := exec.Command("go", "env", "GOTOOLDIR").Output(); err != nil {
+ return filepath.Clean(strings.TrimSpace(string(out)))
+ }
+ return filepath.Clean(build.ToolDir)
+}
diff --git a/vendor/github.com/cucumber/godog/internal/flags/flags.go b/vendor/github.com/cucumber/godog/internal/flags/flags.go
new file mode 100644
index 00000000..2d4a60d1
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/flags/flags.go
@@ -0,0 +1,49 @@
+package flags
+
+import (
+ "github.com/spf13/pflag"
+)
+
+// BindRunCmdFlags is an internal func to bind run subcommand flags.
+func BindRunCmdFlags(prefix string, flagSet *pflag.FlagSet, opts *Options) {
+ if opts.Concurrency == 0 {
+ opts.Concurrency = 1
+ }
+
+ if opts.Format == "" {
+ opts.Format = "pretty"
+ }
+
+ flagSet.BoolVar(&opts.NoColors, prefix+"no-colors", opts.NoColors, "disable ansi colors")
+ flagSet.IntVarP(&opts.Concurrency, prefix+"concurrency", "c", opts.Concurrency, "run the test suite with concurrency")
+ flagSet.StringVarP(&opts.Tags, prefix+"tags", "t", opts.Tags, `filter scenarios by tags, expression can be:
+ "@wip" run all scenarios with wip tag
+ "~@wip" exclude all scenarios with wip tag
+ "@wip && ~@new" run wip scenarios, but exclude new
+ "@wip,@undone" run wip or undone scenarios`)
+ flagSet.StringVarP(&opts.Format, prefix+"format", "f", opts.Format, `will write a report according to the selected formatter
+
+usage:
+ -f
+ will use the formatter and write the report on stdout
+ -f :
+ will use the formatter and write the report to the file path
+
+built-in formatters are:
+ progress prints a character per step
+ cucumber produces a Cucumber JSON report
+ events produces JSON event stream, based on spec: 0.1.0
+ junit produces JUnit compatible XML report
+ pretty prints every feature with runtime statuses
+ `)
+
+ flagSet.BoolVarP(&opts.ShowStepDefinitions, prefix+"definitions", "d", opts.ShowStepDefinitions, "print all available step definitions")
+ flagSet.BoolVar(&opts.StopOnFailure, prefix+"stop-on-failure", opts.StopOnFailure, "stop processing on first failed scenario")
+ flagSet.BoolVar(&opts.Strict, prefix+"strict", opts.Strict, "fail suite when there are pending or undefined steps")
+
+ flagSet.Int64Var(&opts.Randomize, prefix+"random", opts.Randomize, `randomly shuffle the scenario execution order
+ --random
+specify SEED to reproduce the shuffling from a previous run
+ --random=5738`)
+ flagSet.Lookup(prefix + "random").NoOptDefVal = "-1"
+}
diff --git a/vendor/github.com/cucumber/godog/internal/flags/options.go b/vendor/github.com/cucumber/godog/internal/flags/options.go
new file mode 100644
index 00000000..0becdec7
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/flags/options.go
@@ -0,0 +1,59 @@
+package flags
+
+import (
+ "io"
+)
+
+// Options are suite run options
+// flags are mapped to these options.
+//
+// It can also be used together with godog.RunWithOptions
+// to run test suite from go source directly
+//
+// See the flags for more details
+type Options struct {
+ // Print step definitions found and exit
+ ShowStepDefinitions bool
+
+ // Randomize, if not `0`, will be used to run scenarios in a random order.
+ //
+ // Randomizing scenario order is especially helpful for detecting
+ // situations where you have state leaking between scenarios, which can
+ // cause flickering or fragile tests.
+ //
+ // The default value of `0` means "do not randomize".
+ //
+ // The magic value of `-1` means "pick a random seed for me", and godog will
+ // assign a seed on it's own during the `RunWithOptions` phase, similar to if
+ // you specified `--random` on the command line.
+ //
+ // Any other value will be used as the random seed for shuffling. Re-using the
+ // same seed will allow you to reproduce the shuffle order of a previous run
+ // to isolate an error condition.
+ Randomize int64
+
+ // Stops on the first failure
+ StopOnFailure bool
+
+ // Fail suite when there are pending or undefined steps
+ Strict bool
+
+ // Forces ansi color stripping
+ NoColors bool
+
+ // Various filters for scenarios parsed
+ // from feature files
+ Tags string
+
+ // The formatter name
+ Format string
+
+ // Concurrency rate, not all formatters accepts this
+ Concurrency int
+
+ // All feature file paths
+ Paths []string
+
+ // Where it should print formatter output
+ Output io.Writer
+}
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/fmt.go b/vendor/github.com/cucumber/godog/internal/formatters/fmt.go
new file mode 100644
index 00000000..e41b5d0c
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/fmt.go
@@ -0,0 +1,104 @@
+package formatters
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "regexp"
+ "runtime"
+ "strconv"
+ "strings"
+
+ "github.com/cucumber/godog/colors"
+ "github.com/cucumber/godog/internal/models"
+ "github.com/cucumber/godog/internal/utils"
+ "github.com/cucumber/messages-go/v10"
+)
+
+var (
+ red = colors.Red
+ redb = colors.Bold(colors.Red)
+ green = colors.Green
+ blackb = colors.Bold(colors.Black)
+ yellow = colors.Yellow
+ cyan = colors.Cyan
+ cyanb = colors.Bold(colors.Cyan)
+ whiteb = colors.Bold(colors.White)
+)
+
+// repeats a space n times
+var s = utils.S
+
+var (
+ passed = models.Passed
+ failed = models.Failed
+ skipped = models.Skipped
+ undefined = models.Undefined
+ pending = models.Pending
+)
+
+type sortFeaturesByName []*models.Feature
+
+func (s sortFeaturesByName) Len() int { return len(s) }
+func (s sortFeaturesByName) Less(i, j int) bool { return s[i].Feature.Name < s[j].Feature.Name }
+func (s sortFeaturesByName) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+
+type sortPicklesByID []*messages.Pickle
+
+func (s sortPicklesByID) Len() int { return len(s) }
+func (s sortPicklesByID) Less(i, j int) bool {
+ iID := mustConvertStringToInt(s[i].Id)
+ jID := mustConvertStringToInt(s[j].Id)
+ return iID < jID
+}
+func (s sortPicklesByID) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+
+type sortPickleStepResultsByPickleStepID []models.PickleStepResult
+
+func (s sortPickleStepResultsByPickleStepID) Len() int { return len(s) }
+func (s sortPickleStepResultsByPickleStepID) Less(i, j int) bool {
+ iID := mustConvertStringToInt(s[i].PickleStepID)
+ jID := mustConvertStringToInt(s[j].PickleStepID)
+ return iID < jID
+}
+func (s sortPickleStepResultsByPickleStepID) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+
+func mustConvertStringToInt(s string) int {
+ i, err := strconv.Atoi(s)
+ if err != nil {
+ panic(err)
+ }
+
+ return i
+}
+
+// DefinitionID ...
+func DefinitionID(sd *models.StepDefinition) string {
+ ptr := sd.HandlerValue.Pointer()
+ f := runtime.FuncForPC(ptr)
+ file, line := f.FileLine(ptr)
+ dir := filepath.Dir(file)
+
+ fn := strings.Replace(f.Name(), dir, "", -1)
+ var parts []string
+ for _, gr := range matchFuncDefRef.FindAllStringSubmatch(fn, -1) {
+ parts = append(parts, strings.Trim(gr[1], "_."))
+ }
+ if len(parts) > 0 {
+ // case when suite is a structure with methods
+ fn = strings.Join(parts, ".")
+ } else {
+ // case when steps are just plain funcs
+ fn = strings.Trim(fn, "_.")
+ }
+
+ if pkg := os.Getenv("GODOG_TESTED_PACKAGE"); len(pkg) > 0 {
+ fn = strings.Replace(fn, pkg, "", 1)
+ fn = strings.TrimLeft(fn, ".")
+ fn = strings.Replace(fn, "..", ".", -1)
+ }
+
+ return fmt.Sprintf("%s:%d -> %s", filepath.Base(file), line, fn)
+}
+
+var matchFuncDefRef = regexp.MustCompile(`\(([^\)]+)\)`)
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/fmt_base.go b/vendor/github.com/cucumber/godog/internal/formatters/fmt_base.go
new file mode 100644
index 00000000..715e29fc
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/fmt_base.go
@@ -0,0 +1,262 @@
+package formatters
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "os"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+ "unicode"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/colors"
+ "github.com/cucumber/godog/formatters"
+ "github.com/cucumber/godog/internal/models"
+ "github.com/cucumber/godog/internal/storage"
+ "github.com/cucumber/godog/internal/utils"
+)
+
+// BaseFormatterFunc implements the FormatterFunc for the base formatter
+func BaseFormatterFunc(suite string, out io.Writer) formatters.Formatter {
+ return NewBaseFmt(suite, out)
+}
+
+// NewBaseFmt creates a new base formatter
+func NewBaseFmt(suite string, out io.Writer) *Basefmt {
+ return &Basefmt{
+ suiteName: suite,
+ indent: 2,
+ out: out,
+ lock: new(sync.Mutex),
+ }
+}
+
+// Basefmt ...
+type Basefmt struct {
+ suiteName string
+ out io.Writer
+ indent int
+
+ storage *storage.Storage
+ lock *sync.Mutex
+}
+
+// SetStorage ...
+func (f *Basefmt) SetStorage(st *storage.Storage) {
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.storage = st
+}
+
+// TestRunStarted ...
+func (f *Basefmt) TestRunStarted() {}
+
+// Feature ...
+func (f *Basefmt) Feature(*messages.GherkinDocument, string, []byte) {}
+
+// Pickle ...
+func (f *Basefmt) Pickle(*messages.Pickle) {}
+
+// Defined ...
+func (f *Basefmt) Defined(*messages.Pickle, *messages.Pickle_PickleStep, *formatters.StepDefinition) {
+}
+
+// Passed ...
+func (f *Basefmt) Passed(*messages.Pickle, *messages.Pickle_PickleStep, *formatters.StepDefinition) {}
+
+// Skipped ...
+func (f *Basefmt) Skipped(*messages.Pickle, *messages.Pickle_PickleStep, *formatters.StepDefinition) {
+}
+
+// Undefined ...
+func (f *Basefmt) Undefined(*messages.Pickle, *messages.Pickle_PickleStep, *formatters.StepDefinition) {
+}
+
+// Failed ...
+func (f *Basefmt) Failed(*messages.Pickle, *messages.Pickle_PickleStep, *formatters.StepDefinition, error) {
+}
+
+// Pending ...
+func (f *Basefmt) Pending(*messages.Pickle, *messages.Pickle_PickleStep, *formatters.StepDefinition) {
+}
+
+// Summary ...
+func (f *Basefmt) Summary() {
+ var totalSc, passedSc, undefinedSc int
+ var totalSt, passedSt, failedSt, skippedSt, pendingSt, undefinedSt int
+
+ pickleResults := f.storage.MustGetPickleResults()
+ for _, pr := range pickleResults {
+ var prStatus models.StepResultStatus
+ totalSc++
+
+ pickleStepResults := f.storage.MustGetPickleStepResultsByPickleID(pr.PickleID)
+
+ if len(pickleStepResults) == 0 {
+ prStatus = undefined
+ }
+
+ for _, sr := range pickleStepResults {
+ totalSt++
+
+ switch sr.Status {
+ case passed:
+ prStatus = passed
+ passedSt++
+ case failed:
+ prStatus = failed
+ failedSt++
+ case skipped:
+ skippedSt++
+ case undefined:
+ prStatus = undefined
+ undefinedSt++
+ case pending:
+ prStatus = pending
+ pendingSt++
+ }
+ }
+
+ if prStatus == passed {
+ passedSc++
+ } else if prStatus == undefined {
+ undefinedSc++
+ }
+ }
+
+ var steps, parts, scenarios []string
+ if passedSt > 0 {
+ steps = append(steps, green(fmt.Sprintf("%d passed", passedSt)))
+ }
+ if failedSt > 0 {
+ parts = append(parts, red(fmt.Sprintf("%d failed", failedSt)))
+ steps = append(steps, red(fmt.Sprintf("%d failed", failedSt)))
+ }
+ if pendingSt > 0 {
+ parts = append(parts, yellow(fmt.Sprintf("%d pending", pendingSt)))
+ steps = append(steps, yellow(fmt.Sprintf("%d pending", pendingSt)))
+ }
+ if undefinedSt > 0 {
+ parts = append(parts, yellow(fmt.Sprintf("%d undefined", undefinedSc)))
+ steps = append(steps, yellow(fmt.Sprintf("%d undefined", undefinedSt)))
+ } else if undefinedSc > 0 {
+ // there may be some scenarios without steps
+ parts = append(parts, yellow(fmt.Sprintf("%d undefined", undefinedSc)))
+ }
+ if skippedSt > 0 {
+ steps = append(steps, cyan(fmt.Sprintf("%d skipped", skippedSt)))
+ }
+ if passedSc > 0 {
+ scenarios = append(scenarios, green(fmt.Sprintf("%d passed", passedSc)))
+ }
+ scenarios = append(scenarios, parts...)
+
+ testRunStartedAt := f.storage.MustGetTestRunStarted().StartedAt
+ elapsed := utils.TimeNowFunc().Sub(testRunStartedAt)
+
+ fmt.Fprintln(f.out, "")
+
+ if totalSc == 0 {
+ fmt.Fprintln(f.out, "No scenarios")
+ } else {
+ fmt.Fprintln(f.out, fmt.Sprintf("%d scenarios (%s)", totalSc, strings.Join(scenarios, ", ")))
+ }
+
+ if totalSt == 0 {
+ fmt.Fprintln(f.out, "No steps")
+ } else {
+ fmt.Fprintln(f.out, fmt.Sprintf("%d steps (%s)", totalSt, strings.Join(steps, ", ")))
+ }
+
+ elapsedString := elapsed.String()
+ if elapsed.Nanoseconds() == 0 {
+ // go 1.5 and 1.6 prints 0 instead of 0s, if duration is zero.
+ elapsedString = "0s"
+ }
+ fmt.Fprintln(f.out, elapsedString)
+
+ // prints used randomization seed
+ seed, err := strconv.ParseInt(os.Getenv("GODOG_SEED"), 10, 64)
+ if err == nil && seed != 0 {
+ fmt.Fprintln(f.out, "")
+ fmt.Fprintln(f.out, "Randomized with seed:", colors.Yellow(seed))
+ }
+
+ if text := f.Snippets(); text != "" {
+ fmt.Fprintln(f.out, "")
+ fmt.Fprintln(f.out, yellow("You can implement step definitions for undefined steps with these snippets:"))
+ fmt.Fprintln(f.out, yellow(text))
+ }
+}
+
+// Snippets ...
+func (f *Basefmt) Snippets() string {
+ undefinedStepResults := f.storage.MustGetPickleStepResultsByStatus(undefined)
+ if len(undefinedStepResults) == 0 {
+ return ""
+ }
+
+ var index int
+ var snips []undefinedSnippet
+ // build snippets
+ for _, u := range undefinedStepResults {
+ pickleStep := f.storage.MustGetPickleStep(u.PickleStepID)
+
+ steps := []string{pickleStep.Text}
+ arg := pickleStep.Argument
+ if u.Def != nil {
+ steps = u.Def.Undefined
+ arg = nil
+ }
+ for _, step := range steps {
+ expr := snippetExprCleanup.ReplaceAllString(step, "\\$1")
+ expr = snippetNumbers.ReplaceAllString(expr, "(\\d+)")
+ expr = snippetExprQuoted.ReplaceAllString(expr, "$1\"([^\"]*)\"$2")
+ expr = "^" + strings.TrimSpace(expr) + "$"
+
+ name := snippetNumbers.ReplaceAllString(step, " ")
+ name = snippetExprQuoted.ReplaceAllString(name, " ")
+ name = strings.TrimSpace(snippetMethodName.ReplaceAllString(name, ""))
+ var words []string
+ for i, w := range strings.Split(name, " ") {
+ switch {
+ case i != 0:
+ w = strings.Title(w)
+ case len(w) > 0:
+ w = string(unicode.ToLower(rune(w[0]))) + w[1:]
+ }
+ words = append(words, w)
+ }
+ name = strings.Join(words, "")
+ if len(name) == 0 {
+ index++
+ name = fmt.Sprintf("StepDefinitioninition%d", index)
+ }
+
+ var found bool
+ for _, snip := range snips {
+ if snip.Expr == expr {
+ found = true
+ break
+ }
+ }
+ if !found {
+ snips = append(snips, undefinedSnippet{Method: name, Expr: expr, argument: arg})
+ }
+ }
+ }
+
+ sort.Sort(snippetSortByMethod(snips))
+
+ var buf bytes.Buffer
+ if err := undefinedSnippetsTpl.Execute(&buf, snips); err != nil {
+ panic(err)
+ }
+ // there may be trailing spaces
+ return strings.Replace(buf.String(), " \n", "\n", -1)
+}
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/fmt_cucumber.go b/vendor/github.com/cucumber/godog/internal/formatters/fmt_cucumber.go
new file mode 100644
index 00000000..5f3743e4
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/fmt_cucumber.go
@@ -0,0 +1,301 @@
+package formatters
+
+/*
+ The specification for the formatting originated from https://www.relishapp.com/cucumber/cucumber/docs/formatters/json-output-formatter.
+ I found that documentation was misleading or out dated. To validate formatting I create a ruby cucumber test harness and ran the
+ same feature files through godog and the ruby cucumber.
+
+ The docstrings in the cucumber.feature represent the cucumber output for those same feature definitions.
+
+ I did note that comments in ruby could be at just about any level in particular Feature, Scenario and Step. In godog I
+ could only find comments under the Feature data structure.
+*/
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+ "sort"
+ "strings"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/formatters"
+ "github.com/cucumber/godog/internal/models"
+)
+
+func init() {
+ formatters.Format("cucumber", "Produces cucumber JSON format output.", CucumberFormatterFunc)
+}
+
+// CucumberFormatterFunc implements the FormatterFunc for the cucumber formatter
+func CucumberFormatterFunc(suite string, out io.Writer) formatters.Formatter {
+ return &cukefmt{Basefmt: NewBaseFmt(suite, out)}
+}
+
+type cukefmt struct {
+ *Basefmt
+}
+
+func (f *cukefmt) Summary() {
+ features := f.storage.MustGetFeatures()
+
+ res := f.buildCukeFeatures(features)
+
+ dat, err := json.MarshalIndent(res, "", " ")
+ if err != nil {
+ panic(err)
+ }
+
+ fmt.Fprintf(f.out, "%s\n", string(dat))
+}
+
+func (f *cukefmt) buildCukeFeatures(features []*models.Feature) (res []CukeFeatureJSON) {
+ sort.Sort(sortFeaturesByName(features))
+
+ res = make([]CukeFeatureJSON, len(features))
+
+ for idx, feat := range features {
+ cukeFeature := buildCukeFeature(feat)
+
+ pickles := f.storage.MustGetPickles(feat.Uri)
+ sort.Sort(sortPicklesByID(pickles))
+
+ cukeFeature.Elements = f.buildCukeElements(pickles)
+
+ for jdx, elem := range cukeFeature.Elements {
+ elem.ID = cukeFeature.ID + ";" + makeCukeID(elem.Name) + elem.ID
+ elem.Tags = append(cukeFeature.Tags, elem.Tags...)
+ cukeFeature.Elements[jdx] = elem
+ }
+
+ res[idx] = cukeFeature
+ }
+
+ return res
+}
+
+func (f *cukefmt) buildCukeElements(pickles []*messages.Pickle) (res []cukeElement) {
+ res = make([]cukeElement, len(pickles))
+
+ for idx, pickle := range pickles {
+ pickleResult := f.storage.MustGetPickleResult(pickle.Id)
+ pickleStepResults := f.storage.MustGetPickleStepResultsByPickleID(pickle.Id)
+
+ cukeElement := f.buildCukeElement(pickle)
+
+ stepStartedAt := pickleResult.StartedAt
+
+ cukeElement.Steps = make([]cukeStep, len(pickleStepResults))
+ sort.Sort(sortPickleStepResultsByPickleStepID(pickleStepResults))
+
+ for jdx, stepResult := range pickleStepResults {
+ cukeStep := f.buildCukeStep(pickle, stepResult)
+
+ stepResultFinishedAt := stepResult.FinishedAt
+ d := int(stepResultFinishedAt.Sub(stepStartedAt).Nanoseconds())
+ stepStartedAt = stepResultFinishedAt
+
+ cukeStep.Result.Duration = &d
+ if stepResult.Status == undefined ||
+ stepResult.Status == pending ||
+ stepResult.Status == skipped {
+ cukeStep.Result.Duration = nil
+ }
+
+ cukeElement.Steps[jdx] = cukeStep
+ }
+
+ res[idx] = cukeElement
+ }
+
+ return res
+}
+
+type cukeComment struct {
+ Value string `json:"value"`
+ Line int `json:"line"`
+}
+
+type cukeDocstring struct {
+ Value string `json:"value"`
+ ContentType string `json:"content_type"`
+ Line int `json:"line"`
+}
+
+type cukeTag struct {
+ Name string `json:"name"`
+ Line int `json:"line"`
+}
+
+type cukeResult struct {
+ Status string `json:"status"`
+ Error string `json:"error_message,omitempty"`
+ Duration *int `json:"duration,omitempty"`
+}
+
+type cukeMatch struct {
+ Location string `json:"location"`
+}
+
+type cukeStep struct {
+ Keyword string `json:"keyword"`
+ Name string `json:"name"`
+ Line int `json:"line"`
+ Docstring *cukeDocstring `json:"doc_string,omitempty"`
+ Match cukeMatch `json:"match"`
+ Result cukeResult `json:"result"`
+ DataTable []*cukeDataTableRow `json:"rows,omitempty"`
+}
+
+type cukeDataTableRow struct {
+ Cells []string `json:"cells"`
+}
+
+type cukeElement struct {
+ ID string `json:"id"`
+ Keyword string `json:"keyword"`
+ Name string `json:"name"`
+ Description string `json:"description"`
+ Line int `json:"line"`
+ Type string `json:"type"`
+ Tags []cukeTag `json:"tags,omitempty"`
+ Steps []cukeStep `json:"steps,omitempty"`
+}
+
+// CukeFeatureJSON ...
+type CukeFeatureJSON struct {
+ URI string `json:"uri"`
+ ID string `json:"id"`
+ Keyword string `json:"keyword"`
+ Name string `json:"name"`
+ Description string `json:"description"`
+ Line int `json:"line"`
+ Comments []cukeComment `json:"comments,omitempty"`
+ Tags []cukeTag `json:"tags,omitempty"`
+ Elements []cukeElement `json:"elements,omitempty"`
+}
+
+func buildCukeFeature(feat *models.Feature) CukeFeatureJSON {
+ cukeFeature := CukeFeatureJSON{
+ URI: feat.Uri,
+ ID: makeCukeID(feat.Feature.Name),
+ Keyword: feat.Feature.Keyword,
+ Name: feat.Feature.Name,
+ Description: feat.Feature.Description,
+ Line: int(feat.Feature.Location.Line),
+ Comments: make([]cukeComment, len(feat.Comments)),
+ Tags: make([]cukeTag, len(feat.Feature.Tags)),
+ }
+
+ for idx, element := range feat.Feature.Tags {
+ cukeFeature.Tags[idx].Line = int(element.Location.Line)
+ cukeFeature.Tags[idx].Name = element.Name
+ }
+
+ for idx, comment := range feat.Comments {
+ cukeFeature.Comments[idx].Value = strings.TrimSpace(comment.Text)
+ cukeFeature.Comments[idx].Line = int(comment.Location.Line)
+ }
+
+ return cukeFeature
+}
+
+func (f *cukefmt) buildCukeElement(pickle *messages.Pickle) (cukeElement cukeElement) {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ scenario := feature.FindScenario(pickle.AstNodeIds[0])
+
+ cukeElement.Name = pickle.Name
+ cukeElement.Line = int(scenario.Location.Line)
+ cukeElement.Description = scenario.Description
+ cukeElement.Keyword = scenario.Keyword
+ cukeElement.Type = "scenario"
+
+ cukeElement.Tags = make([]cukeTag, len(scenario.Tags))
+ for idx, element := range scenario.Tags {
+ cukeElement.Tags[idx].Line = int(element.Location.Line)
+ cukeElement.Tags[idx].Name = element.Name
+ }
+
+ if len(pickle.AstNodeIds) == 1 {
+ return
+ }
+
+ example, _ := feature.FindExample(pickle.AstNodeIds[1])
+
+ for _, tag := range example.Tags {
+ tag := cukeTag{Line: int(tag.Location.Line), Name: tag.Name}
+ cukeElement.Tags = append(cukeElement.Tags, tag)
+ }
+
+ examples := scenario.GetExamples()
+ if len(examples) > 0 {
+ rowID := pickle.AstNodeIds[1]
+
+ for _, example := range examples {
+ for idx, row := range example.TableBody {
+ if rowID == row.Id {
+ cukeElement.ID += fmt.Sprintf(";%s;%d", makeCukeID(example.Name), idx+2)
+ cukeElement.Line = int(row.Location.Line)
+ }
+ }
+ }
+ }
+
+ return cukeElement
+}
+
+func (f *cukefmt) buildCukeStep(pickle *messages.Pickle, stepResult models.PickleStepResult) (cukeStep cukeStep) {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ pickleStep := f.storage.MustGetPickleStep(stepResult.PickleStepID)
+ step := feature.FindStep(pickleStep.AstNodeIds[0])
+
+ line := step.Location.Line
+ if len(pickle.AstNodeIds) == 2 {
+ _, row := feature.FindExample(pickle.AstNodeIds[1])
+ line = row.Location.Line
+ }
+
+ cukeStep.Name = pickleStep.Text
+ cukeStep.Line = int(line)
+ cukeStep.Keyword = step.Keyword
+
+ arg := pickleStep.Argument
+
+ if arg.GetDocString() != nil && step.GetDocString() != nil {
+ cukeStep.Docstring = &cukeDocstring{}
+ cukeStep.Docstring.ContentType = strings.TrimSpace(arg.GetDocString().MediaType)
+ cukeStep.Docstring.Line = int(step.GetDocString().Location.Line)
+ cukeStep.Docstring.Value = arg.GetDocString().Content
+ }
+
+ if arg.GetDataTable() != nil {
+ cukeStep.DataTable = make([]*cukeDataTableRow, len(arg.GetDataTable().Rows))
+ for i, row := range arg.GetDataTable().Rows {
+ cells := make([]string, len(row.Cells))
+ for j, cell := range row.Cells {
+ cells[j] = cell.Value
+ }
+ cukeStep.DataTable[i] = &cukeDataTableRow{Cells: cells}
+ }
+ }
+
+ if stepResult.Def != nil {
+ cukeStep.Match.Location = strings.Split(DefinitionID(stepResult.Def), " ")[0]
+ }
+
+ cukeStep.Result.Status = stepResult.Status.String()
+ if stepResult.Err != nil {
+ cukeStep.Result.Error = stepResult.Err.Error()
+ }
+
+ if stepResult.Status == undefined || stepResult.Status == pending {
+ cukeStep.Match.Location = fmt.Sprintf("%s:%d", pickle.Uri, step.Location.Line)
+ }
+
+ return cukeStep
+}
+
+func makeCukeID(name string) string {
+ return strings.Replace(strings.ToLower(name), " ", "-", -1)
+}
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/fmt_events.go b/vendor/github.com/cucumber/godog/internal/formatters/fmt_events.go
new file mode 100644
index 00000000..7ce84af5
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/fmt_events.go
@@ -0,0 +1,301 @@
+package formatters
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/formatters"
+ "github.com/cucumber/godog/internal/utils"
+)
+
+const nanoSec = 1000000
+const spec = "0.1.0"
+
+func init() {
+ formatters.Format("events", fmt.Sprintf("Produces JSON event stream, based on spec: %s.", spec), EventsFormatterFunc)
+}
+
+// EventsFormatterFunc implements the FormatterFunc for the events formatter
+func EventsFormatterFunc(suite string, out io.Writer) formatters.Formatter {
+ return &eventsFormatter{Basefmt: NewBaseFmt(suite, out)}
+}
+
+type eventsFormatter struct {
+ *Basefmt
+}
+
+func (f *eventsFormatter) event(ev interface{}) {
+ data, err := json.Marshal(ev)
+ if err != nil {
+ panic(fmt.Sprintf("failed to marshal stream event: %+v - %v", ev, err))
+ }
+ fmt.Fprintln(f.out, string(data))
+}
+
+func (f *eventsFormatter) Pickle(pickle *messages.Pickle) {
+ f.Basefmt.Pickle(pickle)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.event(&struct {
+ Event string `json:"event"`
+ Location string `json:"location"`
+ Timestamp int64 `json:"timestamp"`
+ }{
+ "TestCaseStarted",
+ f.scenarioLocation(pickle),
+ utils.TimeNowFunc().UnixNano() / nanoSec,
+ })
+
+ if len(pickle.Steps) == 0 {
+ // @TODO: is status undefined or passed? when there are no steps
+ // for this scenario
+ f.event(&struct {
+ Event string `json:"event"`
+ Location string `json:"location"`
+ Timestamp int64 `json:"timestamp"`
+ Status string `json:"status"`
+ }{
+ "TestCaseFinished",
+ f.scenarioLocation(pickle),
+ utils.TimeNowFunc().UnixNano() / nanoSec,
+ "undefined",
+ })
+ }
+}
+
+func (f *eventsFormatter) TestRunStarted() {
+ f.Basefmt.TestRunStarted()
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.event(&struct {
+ Event string `json:"event"`
+ Version string `json:"version"`
+ Timestamp int64 `json:"timestamp"`
+ Suite string `json:"suite"`
+ }{
+ "TestRunStarted",
+ spec,
+ utils.TimeNowFunc().UnixNano() / nanoSec,
+ f.suiteName,
+ })
+}
+
+func (f *eventsFormatter) Feature(ft *messages.GherkinDocument, p string, c []byte) {
+ f.Basefmt.Feature(ft, p, c)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.event(&struct {
+ Event string `json:"event"`
+ Location string `json:"location"`
+ Source string `json:"source"`
+ }{
+ "TestSource",
+ fmt.Sprintf("%s:%d", p, ft.Feature.Location.Line),
+ string(c),
+ })
+}
+
+func (f *eventsFormatter) Summary() {
+ // @TODO: determine status
+ status := passed
+
+ f.storage.MustGetPickleStepResultsByStatus(failed)
+
+ if len(f.storage.MustGetPickleStepResultsByStatus(failed)) > 0 {
+ status = failed
+ } else if len(f.storage.MustGetPickleStepResultsByStatus(passed)) == 0 {
+ if len(f.storage.MustGetPickleStepResultsByStatus(undefined)) > len(f.storage.MustGetPickleStepResultsByStatus(pending)) {
+ status = undefined
+ } else {
+ status = pending
+ }
+ }
+
+ snips := f.Snippets()
+ if len(snips) > 0 {
+ snips = "You can implement step definitions for undefined steps with these snippets:\n" + snips
+ }
+
+ f.event(&struct {
+ Event string `json:"event"`
+ Status string `json:"status"`
+ Timestamp int64 `json:"timestamp"`
+ Snippets string `json:"snippets"`
+ Memory string `json:"memory"`
+ }{
+ "TestRunFinished",
+ status.String(),
+ utils.TimeNowFunc().UnixNano() / nanoSec,
+ snips,
+ "", // @TODO not sure that could be correctly implemented
+ })
+}
+
+func (f *eventsFormatter) step(pickle *messages.Pickle, pickleStep *messages.Pickle_PickleStep) {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ pickleStepResult := f.storage.MustGetPickleStepResult(pickleStep.Id)
+ step := feature.FindStep(pickleStep.AstNodeIds[0])
+
+ var errMsg string
+ if pickleStepResult.Err != nil {
+ errMsg = pickleStepResult.Err.Error()
+ }
+ f.event(&struct {
+ Event string `json:"event"`
+ Location string `json:"location"`
+ Timestamp int64 `json:"timestamp"`
+ Status string `json:"status"`
+ Summary string `json:"summary,omitempty"`
+ }{
+ "TestStepFinished",
+ fmt.Sprintf("%s:%d", pickle.Uri, step.Location.Line),
+ utils.TimeNowFunc().UnixNano() / nanoSec,
+ pickleStepResult.Status.String(),
+ errMsg,
+ })
+
+ if isLastStep(pickle, pickleStep) {
+ var status string
+
+ pickleStepResults := f.storage.MustGetPickleStepResultsByPickleID(pickle.Id)
+ for _, stepResult := range pickleStepResults {
+ switch stepResult.Status {
+ case passed, failed, undefined, pending:
+ status = stepResult.Status.String()
+ }
+ }
+
+ f.event(&struct {
+ Event string `json:"event"`
+ Location string `json:"location"`
+ Timestamp int64 `json:"timestamp"`
+ Status string `json:"status"`
+ }{
+ "TestCaseFinished",
+ f.scenarioLocation(pickle),
+ utils.TimeNowFunc().UnixNano() / nanoSec,
+ status,
+ })
+ }
+}
+
+func (f *eventsFormatter) Defined(pickle *messages.Pickle, pickleStep *messages.Pickle_PickleStep, def *formatters.StepDefinition) {
+ f.Basefmt.Defined(pickle, pickleStep, def)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ step := feature.FindStep(pickleStep.AstNodeIds[0])
+
+ if def != nil {
+ matchedDef := f.storage.MustGetStepDefintionMatch(pickleStep.AstNodeIds[0])
+
+ m := def.Expr.FindStringSubmatchIndex(pickleStep.Text)[2:]
+ var args [][2]int
+ for i := 0; i < len(m)/2; i++ {
+ pair := m[i : i*2+2]
+ var idxs [2]int
+ idxs[0] = pair[0]
+ idxs[1] = pair[1]
+ args = append(args, idxs)
+ }
+
+ if len(args) == 0 {
+ args = make([][2]int, 0)
+ }
+
+ f.event(&struct {
+ Event string `json:"event"`
+ Location string `json:"location"`
+ DefID string `json:"definition_id"`
+ Args [][2]int `json:"arguments"`
+ }{
+ "StepDefinitionFound",
+ fmt.Sprintf("%s:%d", pickle.Uri, step.Location.Line),
+ DefinitionID(matchedDef),
+ args,
+ })
+ }
+
+ f.event(&struct {
+ Event string `json:"event"`
+ Location string `json:"location"`
+ Timestamp int64 `json:"timestamp"`
+ }{
+ "TestStepStarted",
+ fmt.Sprintf("%s:%d", pickle.Uri, step.Location.Line),
+ utils.TimeNowFunc().UnixNano() / nanoSec,
+ })
+}
+
+func (f *eventsFormatter) Passed(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Passed(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(pickle, step)
+}
+
+func (f *eventsFormatter) Skipped(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Skipped(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(pickle, step)
+}
+
+func (f *eventsFormatter) Undefined(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Undefined(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(pickle, step)
+}
+
+func (f *eventsFormatter) Failed(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition, err error) {
+ f.Basefmt.Failed(pickle, step, match, err)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(pickle, step)
+}
+
+func (f *eventsFormatter) Pending(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Pending(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(pickle, step)
+}
+
+func (f *eventsFormatter) scenarioLocation(pickle *messages.Pickle) string {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ scenario := feature.FindScenario(pickle.AstNodeIds[0])
+
+ line := scenario.Location.Line
+ if len(pickle.AstNodeIds) == 2 {
+ _, row := feature.FindExample(pickle.AstNodeIds[1])
+ line = row.Location.Line
+ }
+
+ return fmt.Sprintf("%s:%d", pickle.Uri, line)
+}
+
+func isLastStep(pickle *messages.Pickle, step *messages.Pickle_PickleStep) bool {
+ return pickle.Steps[len(pickle.Steps)-1].Id == step.Id
+}
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/fmt_junit.go b/vendor/github.com/cucumber/godog/internal/formatters/fmt_junit.go
new file mode 100644
index 00000000..8beab0da
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/fmt_junit.go
@@ -0,0 +1,199 @@
+package formatters
+
+import (
+ "encoding/xml"
+ "fmt"
+ "io"
+ "os"
+ "sort"
+ "strconv"
+ "time"
+
+ "github.com/cucumber/godog/formatters"
+ "github.com/cucumber/godog/internal/utils"
+)
+
+func init() {
+ formatters.Format("junit", "Prints junit compatible xml to stdout", JUnitFormatterFunc)
+}
+
+// JUnitFormatterFunc implements the FormatterFunc for the junit formatter
+func JUnitFormatterFunc(suite string, out io.Writer) formatters.Formatter {
+ return &junitFormatter{Basefmt: NewBaseFmt(suite, out)}
+}
+
+type junitFormatter struct {
+ *Basefmt
+}
+
+func (f *junitFormatter) Summary() {
+ suite := f.buildJUNITPackageSuite()
+
+ _, err := io.WriteString(f.out, xml.Header)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "failed to write junit string:", err)
+ }
+
+ enc := xml.NewEncoder(f.out)
+ enc.Indent("", s(2))
+ if err = enc.Encode(suite); err != nil {
+ fmt.Fprintln(os.Stderr, "failed to write junit xml:", err)
+ }
+}
+
+func junitTimeDuration(from, to time.Time) string {
+ return strconv.FormatFloat(to.Sub(from).Seconds(), 'f', -1, 64)
+}
+
+func (f *junitFormatter) buildJUNITPackageSuite() JunitPackageSuite {
+ features := f.storage.MustGetFeatures()
+ sort.Sort(sortFeaturesByName(features))
+
+ testRunStartedAt := f.storage.MustGetTestRunStarted().StartedAt
+
+ suite := JunitPackageSuite{
+ Name: f.suiteName,
+ TestSuites: make([]*junitTestSuite, len(features)),
+ Time: junitTimeDuration(testRunStartedAt, utils.TimeNowFunc()),
+ }
+
+ for idx, feature := range features {
+ pickles := f.storage.MustGetPickles(feature.Uri)
+ sort.Sort(sortPicklesByID(pickles))
+
+ ts := junitTestSuite{
+ Name: feature.Feature.Name,
+ TestCases: make([]*junitTestCase, len(pickles)),
+ }
+
+ var testcaseNames = make(map[string]int)
+ for _, pickle := range pickles {
+ testcaseNames[pickle.Name] = testcaseNames[pickle.Name] + 1
+ }
+
+ firstPickleStartedAt := testRunStartedAt
+ lastPickleFinishedAt := testRunStartedAt
+
+ var outlineNo = make(map[string]int)
+ for idx, pickle := range pickles {
+ tc := junitTestCase{}
+
+ pickleResult := f.storage.MustGetPickleResult(pickle.Id)
+
+ if idx == 0 {
+ firstPickleStartedAt = pickleResult.StartedAt
+ }
+
+ lastPickleFinishedAt = pickleResult.StartedAt
+
+ if len(pickle.Steps) > 0 {
+ lastStep := pickle.Steps[len(pickle.Steps)-1]
+ lastPickleStepResult := f.storage.MustGetPickleStepResult(lastStep.Id)
+ lastPickleFinishedAt = lastPickleStepResult.FinishedAt
+ }
+
+ tc.Time = junitTimeDuration(pickleResult.StartedAt, lastPickleFinishedAt)
+
+ tc.Name = pickle.Name
+ if testcaseNames[tc.Name] > 1 {
+ outlineNo[tc.Name] = outlineNo[tc.Name] + 1
+ tc.Name += fmt.Sprintf(" #%d", outlineNo[tc.Name])
+ }
+
+ ts.Tests++
+ suite.Tests++
+
+ pickleStepResults := f.storage.MustGetPickleStepResultsByPickleID(pickle.Id)
+ for _, stepResult := range pickleStepResults {
+ pickleStep := f.storage.MustGetPickleStep(stepResult.PickleStepID)
+
+ switch stepResult.Status {
+ case passed:
+ tc.Status = passed.String()
+ case failed:
+ tc.Status = failed.String()
+ tc.Failure = &junitFailure{
+ Message: fmt.Sprintf("Step %s: %s", pickleStep.Text, stepResult.Err),
+ }
+ case skipped:
+ tc.Error = append(tc.Error, &junitError{
+ Type: "skipped",
+ Message: fmt.Sprintf("Step %s", pickleStep.Text),
+ })
+ case undefined:
+ tc.Status = undefined.String()
+ tc.Error = append(tc.Error, &junitError{
+ Type: "undefined",
+ Message: fmt.Sprintf("Step %s", pickleStep.Text),
+ })
+ case pending:
+ tc.Status = pending.String()
+ tc.Error = append(tc.Error, &junitError{
+ Type: "pending",
+ Message: fmt.Sprintf("Step %s: TODO: write pending definition", pickleStep.Text),
+ })
+ }
+ }
+
+ switch tc.Status {
+ case failed.String():
+ ts.Failures++
+ suite.Failures++
+ case undefined.String(), pending.String():
+ ts.Errors++
+ suite.Errors++
+ }
+
+ ts.TestCases[idx] = &tc
+ }
+
+ ts.Time = junitTimeDuration(firstPickleStartedAt, lastPickleFinishedAt)
+
+ suite.TestSuites[idx] = &ts
+ }
+
+ return suite
+}
+
+type junitFailure struct {
+ Message string `xml:"message,attr"`
+ Type string `xml:"type,attr,omitempty"`
+}
+
+type junitError struct {
+ XMLName xml.Name `xml:"error,omitempty"`
+ Message string `xml:"message,attr"`
+ Type string `xml:"type,attr"`
+}
+
+type junitTestCase struct {
+ XMLName xml.Name `xml:"testcase"`
+ Name string `xml:"name,attr"`
+ Status string `xml:"status,attr"`
+ Time string `xml:"time,attr"`
+ Failure *junitFailure `xml:"failure,omitempty"`
+ Error []*junitError
+}
+
+type junitTestSuite struct {
+ XMLName xml.Name `xml:"testsuite"`
+ Name string `xml:"name,attr"`
+ Tests int `xml:"tests,attr"`
+ Skipped int `xml:"skipped,attr"`
+ Failures int `xml:"failures,attr"`
+ Errors int `xml:"errors,attr"`
+ Time string `xml:"time,attr"`
+ TestCases []*junitTestCase
+}
+
+// JunitPackageSuite ...
+type JunitPackageSuite struct {
+ XMLName xml.Name `xml:"testsuites"`
+ Name string `xml:"name,attr"`
+ Tests int `xml:"tests,attr"`
+ Skipped int `xml:"skipped,attr"`
+ Failures int `xml:"failures,attr"`
+ Errors int `xml:"errors,attr"`
+ Time string `xml:"time,attr"`
+ TestSuites []*junitTestSuite
+}
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/fmt_pretty.go b/vendor/github.com/cucumber/godog/internal/formatters/fmt_pretty.go
new file mode 100644
index 00000000..87cef37a
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/fmt_pretty.go
@@ -0,0 +1,535 @@
+package formatters
+
+import (
+ "fmt"
+ "io"
+ "regexp"
+ "sort"
+ "strings"
+ "unicode/utf8"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/colors"
+ "github.com/cucumber/godog/formatters"
+)
+
+func init() {
+ formatters.Format("pretty", "Prints every feature with runtime statuses.", PrettyFormatterFunc)
+}
+
+// PrettyFormatterFunc implements the FormatterFunc for the pretty formatter
+func PrettyFormatterFunc(suite string, out io.Writer) formatters.Formatter {
+ return &pretty{Basefmt: NewBaseFmt(suite, out)}
+}
+
+var outlinePlaceholderRegexp = regexp.MustCompile("<[^>]+>")
+
+// a built in default pretty formatter
+type pretty struct {
+ *Basefmt
+ firstFeature *bool
+}
+
+func (f *pretty) TestRunStarted() {
+ f.Basefmt.TestRunStarted()
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ firstFeature := true
+ f.firstFeature = &firstFeature
+}
+
+func (f *pretty) Feature(gd *messages.GherkinDocument, p string, c []byte) {
+ f.lock.Lock()
+ if !*f.firstFeature {
+ fmt.Fprintln(f.out, "")
+ }
+
+ *f.firstFeature = false
+ f.lock.Unlock()
+
+ f.Basefmt.Feature(gd, p, c)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.printFeature(gd.Feature)
+}
+
+// Pickle takes a gherkin node for formatting
+func (f *pretty) Pickle(pickle *messages.Pickle) {
+ f.Basefmt.Pickle(pickle)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ if len(pickle.Steps) == 0 {
+ f.printUndefinedPickle(pickle)
+ return
+ }
+}
+
+func (f *pretty) Passed(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Passed(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.printStep(pickle, step)
+}
+
+func (f *pretty) Skipped(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Skipped(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.printStep(pickle, step)
+}
+
+func (f *pretty) Undefined(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Undefined(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.printStep(pickle, step)
+}
+
+func (f *pretty) Failed(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition, err error) {
+ f.Basefmt.Failed(pickle, step, match, err)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.printStep(pickle, step)
+}
+
+func (f *pretty) Pending(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Pending(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.printStep(pickle, step)
+}
+
+func (f *pretty) printFeature(feature *messages.GherkinDocument_Feature) {
+ fmt.Fprintln(f.out, keywordAndName(feature.Keyword, feature.Name))
+ if strings.TrimSpace(feature.Description) != "" {
+ for _, line := range strings.Split(feature.Description, "\n") {
+ fmt.Fprintln(f.out, s(f.indent)+strings.TrimSpace(line))
+ }
+ }
+}
+
+func keywordAndName(keyword, name string) string {
+ title := whiteb(keyword + ":")
+ if len(name) > 0 {
+ title += " " + name
+ }
+ return title
+}
+
+func (f *pretty) scenarioLengths(pickle *messages.Pickle) (scenarioHeaderLength int, maxLength int) {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ astScenario := feature.FindScenario(pickle.AstNodeIds[0])
+ astBackground := feature.FindBackground(pickle.AstNodeIds[0])
+
+ scenarioHeaderLength = f.lengthPickle(astScenario.Keyword, astScenario.Name)
+ maxLength = f.longestStep(astScenario.Steps, scenarioHeaderLength)
+
+ if astBackground != nil {
+ maxLength = f.longestStep(astBackground.Steps, maxLength)
+ }
+
+ return scenarioHeaderLength, maxLength
+}
+
+func (f *pretty) printScenarioHeader(pickle *messages.Pickle, astScenario *messages.GherkinDocument_Feature_Scenario, spaceFilling int) {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ text := s(f.indent) + keywordAndName(astScenario.Keyword, astScenario.Name)
+ text += s(spaceFilling) + line(feature.Uri, astScenario.Location)
+ fmt.Fprintln(f.out, "\n"+text)
+}
+
+func (f *pretty) printUndefinedPickle(pickle *messages.Pickle) {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ astScenario := feature.FindScenario(pickle.AstNodeIds[0])
+ astBackground := feature.FindBackground(pickle.AstNodeIds[0])
+
+ scenarioHeaderLength, maxLength := f.scenarioLengths(pickle)
+
+ if astBackground != nil {
+ fmt.Fprintln(f.out, "\n"+s(f.indent)+keywordAndName(astBackground.Keyword, astBackground.Name))
+ for _, step := range astBackground.Steps {
+ text := s(f.indent*2) + cyan(strings.TrimSpace(step.Keyword)) + " " + cyan(step.Text)
+ fmt.Fprintln(f.out, text)
+ }
+ }
+
+ // do not print scenario headers and examples multiple times
+ if len(astScenario.Examples) > 0 {
+ exampleTable, exampleRow := feature.FindExample(pickle.AstNodeIds[1])
+ firstExampleRow := exampleTable.TableBody[0].Id == exampleRow.Id
+ firstExamplesTable := astScenario.Examples[0].Location.Line == exampleTable.Location.Line
+
+ if !(firstExamplesTable && firstExampleRow) {
+ return
+ }
+ }
+
+ f.printScenarioHeader(pickle, astScenario, maxLength-scenarioHeaderLength)
+
+ for _, examples := range astScenario.Examples {
+ max := longestExampleRow(examples, cyan, cyan)
+
+ fmt.Fprintln(f.out, "")
+ fmt.Fprintln(f.out, s(f.indent*2)+keywordAndName(examples.Keyword, examples.Name))
+
+ f.printTableHeader(examples.TableHeader, max)
+
+ for _, row := range examples.TableBody {
+ f.printTableRow(row, max, cyan)
+ }
+ }
+}
+
+// Summary sumarize the feature formatter output
+func (f *pretty) Summary() {
+ failedStepResults := f.storage.MustGetPickleStepResultsByStatus(failed)
+ if len(failedStepResults) > 0 {
+ fmt.Fprintln(f.out, "\n--- "+red("Failed steps:")+"\n")
+
+ sort.Sort(sortPickleStepResultsByPickleStepID(failedStepResults))
+
+ for _, fail := range failedStepResults {
+ pickle := f.storage.MustGetPickle(fail.PickleID)
+ pickleStep := f.storage.MustGetPickleStep(fail.PickleStepID)
+ feature := f.storage.MustGetFeature(pickle.Uri)
+
+ astScenario := feature.FindScenario(pickle.AstNodeIds[0])
+ scenarioDesc := fmt.Sprintf("%s: %s", astScenario.Keyword, pickle.Name)
+
+ astStep := feature.FindStep(pickleStep.AstNodeIds[0])
+ stepDesc := strings.TrimSpace(astStep.Keyword) + " " + pickleStep.Text
+
+ fmt.Fprintln(f.out, s(f.indent)+red(scenarioDesc)+line(feature.Uri, astScenario.Location))
+ fmt.Fprintln(f.out, s(f.indent*2)+red(stepDesc)+line(feature.Uri, astStep.Location))
+ fmt.Fprintln(f.out, s(f.indent*3)+red("Error: ")+redb(fmt.Sprintf("%+v", fail.Err))+"\n")
+ }
+ }
+
+ f.Basefmt.Summary()
+}
+
+func (f *pretty) printOutlineExample(pickle *messages.Pickle, backgroundSteps int) {
+ var errorMsg string
+ var clr = green
+
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ astScenario := feature.FindScenario(pickle.AstNodeIds[0])
+ scenarioHeaderLength, maxLength := f.scenarioLengths(pickle)
+
+ exampleTable, exampleRow := feature.FindExample(pickle.AstNodeIds[1])
+ printExampleHeader := exampleTable.TableBody[0].Id == exampleRow.Id
+ firstExamplesTable := astScenario.Examples[0].Location.Line == exampleTable.Location.Line
+
+ pickleStepResults := f.storage.MustGetPickleStepResultsByPickleID(pickle.Id)
+
+ firstExecutedScenarioStep := len(pickleStepResults) == backgroundSteps+1
+ if firstExamplesTable && printExampleHeader && firstExecutedScenarioStep {
+ f.printScenarioHeader(pickle, astScenario, maxLength-scenarioHeaderLength)
+ }
+
+ if len(exampleTable.TableBody) == 0 {
+ // do not print empty examples
+ return
+ }
+
+ lastStep := len(pickleStepResults) == len(pickle.Steps)
+ if !lastStep {
+ // do not print examples unless all steps has finished
+ return
+ }
+
+ for _, result := range pickleStepResults {
+ // determine example row status
+ switch {
+ case result.Status == failed:
+ errorMsg = result.Err.Error()
+ clr = result.Status.Color()
+ case result.Status == undefined || result.Status == pending:
+ clr = result.Status.Color()
+ case result.Status == skipped && clr == nil:
+ clr = cyan
+ }
+
+ if firstExamplesTable && printExampleHeader {
+ // in first example, we need to print steps
+
+ pickleStep := f.storage.MustGetPickleStep(result.PickleStepID)
+ astStep := feature.FindStep(pickleStep.AstNodeIds[0])
+
+ var text = ""
+ if result.Def != nil {
+ if m := outlinePlaceholderRegexp.FindAllStringIndex(astStep.Text, -1); len(m) > 0 {
+ var pos int
+ for i := 0; i < len(m); i++ {
+ pair := m[i]
+ text += cyan(astStep.Text[pos:pair[0]])
+ text += cyanb(astStep.Text[pair[0]:pair[1]])
+ pos = pair[1]
+ }
+ text += cyan(astStep.Text[pos:len(astStep.Text)])
+ } else {
+ text = cyan(astStep.Text)
+ }
+
+ _, maxLength := f.scenarioLengths(pickle)
+ stepLength := f.lengthPickleStep(astStep.Keyword, astStep.Text)
+
+ text += s(maxLength - stepLength)
+ text += " " + blackb("# "+DefinitionID(result.Def))
+ }
+
+ // print the step outline
+ fmt.Fprintln(f.out, s(f.indent*2)+cyan(strings.TrimSpace(astStep.Keyword))+" "+text)
+
+ if table := pickleStep.Argument.GetDataTable(); table != nil {
+ f.printTable(table, cyan)
+ }
+
+ if docString := astStep.GetDocString(); docString != nil {
+ f.printDocString(docString)
+ }
+ }
+ }
+
+ max := longestExampleRow(exampleTable, clr, cyan)
+
+ // an example table header
+ if printExampleHeader {
+ fmt.Fprintln(f.out, "")
+ fmt.Fprintln(f.out, s(f.indent*2)+keywordAndName(exampleTable.Keyword, exampleTable.Name))
+
+ f.printTableHeader(exampleTable.TableHeader, max)
+ }
+
+ f.printTableRow(exampleRow, max, clr)
+
+ if errorMsg != "" {
+ fmt.Fprintln(f.out, s(f.indent*4)+redb(errorMsg))
+ }
+}
+
+func (f *pretty) printTableRow(row *messages.GherkinDocument_Feature_TableRow, max []int, clr colors.ColorFunc) {
+ cells := make([]string, len(row.Cells))
+
+ for i, cell := range row.Cells {
+ val := clr(cell.Value)
+ ln := utf8.RuneCountInString(val)
+ cells[i] = val + s(max[i]-ln)
+ }
+
+ fmt.Fprintln(f.out, s(f.indent*3)+"| "+strings.Join(cells, " | ")+" |")
+}
+
+func (f *pretty) printTableHeader(row *messages.GherkinDocument_Feature_TableRow, max []int) {
+ f.printTableRow(row, max, cyan)
+}
+
+func (f *pretty) printStep(pickle *messages.Pickle, pickleStep *messages.Pickle_PickleStep) {
+ feature := f.storage.MustGetFeature(pickle.Uri)
+ astBackground := feature.FindBackground(pickle.AstNodeIds[0])
+ astScenario := feature.FindScenario(pickle.AstNodeIds[0])
+ astStep := feature.FindStep(pickleStep.AstNodeIds[0])
+
+ var astBackgroundStep bool
+ var firstExecutedBackgroundStep bool
+ var backgroundSteps int
+ if astBackground != nil {
+ backgroundSteps = len(astBackground.Steps)
+
+ for idx, step := range astBackground.Steps {
+ if step.Id == pickleStep.AstNodeIds[0] {
+ astBackgroundStep = true
+ firstExecutedBackgroundStep = idx == 0
+ break
+ }
+ }
+ }
+
+ firstPickle := feature.Pickles[0].Id == pickle.Id
+
+ if astBackgroundStep && !firstPickle {
+ return
+ }
+
+ if astBackgroundStep && firstExecutedBackgroundStep {
+ fmt.Fprintln(f.out, "\n"+s(f.indent)+keywordAndName(astBackground.Keyword, astBackground.Name))
+ }
+
+ if !astBackgroundStep && len(astScenario.Examples) > 0 {
+ f.printOutlineExample(pickle, backgroundSteps)
+ return
+ }
+
+ scenarioHeaderLength, maxLength := f.scenarioLengths(pickle)
+ stepLength := f.lengthPickleStep(astStep.Keyword, pickleStep.Text)
+
+ firstExecutedScenarioStep := astScenario.Steps[0].Id == pickleStep.AstNodeIds[0]
+ if !astBackgroundStep && firstExecutedScenarioStep {
+ f.printScenarioHeader(pickle, astScenario, maxLength-scenarioHeaderLength)
+ }
+
+ pickleStepResult := f.storage.MustGetPickleStepResult(pickleStep.Id)
+ text := s(f.indent*2) + pickleStepResult.Status.Color()(strings.TrimSpace(astStep.Keyword)) + " " + pickleStepResult.Status.Color()(pickleStep.Text)
+ if pickleStepResult.Def != nil {
+ text += s(maxLength - stepLength + 1)
+ text += blackb("# " + DefinitionID(pickleStepResult.Def))
+ }
+ fmt.Fprintln(f.out, text)
+
+ if table := pickleStep.Argument.GetDataTable(); table != nil {
+ f.printTable(table, cyan)
+ }
+
+ if docString := astStep.GetDocString(); docString != nil {
+ f.printDocString(docString)
+ }
+
+ if pickleStepResult.Err != nil {
+ fmt.Fprintln(f.out, s(f.indent*2)+redb(fmt.Sprintf("%+v", pickleStepResult.Err)))
+ }
+
+ if pickleStepResult.Status == pending {
+ fmt.Fprintln(f.out, s(f.indent*3)+yellow("TODO: write pending definition"))
+ }
+}
+
+func (f *pretty) printDocString(docString *messages.GherkinDocument_Feature_Step_DocString) {
+ var ct string
+
+ if len(docString.MediaType) > 0 {
+ ct = " " + cyan(docString.MediaType)
+ }
+
+ fmt.Fprintln(f.out, s(f.indent*3)+cyan(docString.Delimiter)+ct)
+
+ for _, ln := range strings.Split(docString.Content, "\n") {
+ fmt.Fprintln(f.out, s(f.indent*3)+cyan(ln))
+ }
+
+ fmt.Fprintln(f.out, s(f.indent*3)+cyan(docString.Delimiter))
+}
+
+// print table with aligned table cells
+// @TODO: need to make example header cells bold
+func (f *pretty) printTable(t *messages.PickleStepArgument_PickleTable, c colors.ColorFunc) {
+ maxColLengths := maxColLengths(t, c)
+ var cols = make([]string, len(t.Rows[0].Cells))
+
+ for _, row := range t.Rows {
+ for i, cell := range row.Cells {
+ val := c(cell.Value)
+ colLength := utf8.RuneCountInString(val)
+ cols[i] = val + s(maxColLengths[i]-colLength)
+ }
+
+ fmt.Fprintln(f.out, s(f.indent*3)+"| "+strings.Join(cols, " | ")+" |")
+ }
+}
+
+// longest gives a list of longest columns of all rows in Table
+func maxColLengths(t *messages.PickleStepArgument_PickleTable, clrs ...colors.ColorFunc) []int {
+ if t == nil {
+ return []int{}
+ }
+
+ longest := make([]int, len(t.Rows[0].Cells))
+ for _, row := range t.Rows {
+ for i, cell := range row.Cells {
+ for _, c := range clrs {
+ ln := utf8.RuneCountInString(c(cell.Value))
+ if longest[i] < ln {
+ longest[i] = ln
+ }
+ }
+
+ ln := utf8.RuneCountInString(cell.Value)
+ if longest[i] < ln {
+ longest[i] = ln
+ }
+ }
+ }
+
+ return longest
+}
+
+func longestExampleRow(t *messages.GherkinDocument_Feature_Scenario_Examples, clrs ...colors.ColorFunc) []int {
+ if t == nil {
+ return []int{}
+ }
+
+ longest := make([]int, len(t.TableHeader.Cells))
+ for i, cell := range t.TableHeader.Cells {
+ for _, c := range clrs {
+ ln := utf8.RuneCountInString(c(cell.Value))
+ if longest[i] < ln {
+ longest[i] = ln
+ }
+ }
+
+ ln := utf8.RuneCountInString(cell.Value)
+ if longest[i] < ln {
+ longest[i] = ln
+ }
+ }
+
+ for _, row := range t.TableBody {
+ for i, cell := range row.Cells {
+ for _, c := range clrs {
+ ln := utf8.RuneCountInString(c(cell.Value))
+ if longest[i] < ln {
+ longest[i] = ln
+ }
+ }
+
+ ln := utf8.RuneCountInString(cell.Value)
+ if longest[i] < ln {
+ longest[i] = ln
+ }
+ }
+ }
+
+ return longest
+}
+
+func (f *pretty) longestStep(steps []*messages.GherkinDocument_Feature_Step, pickleLength int) int {
+ max := pickleLength
+
+ for _, step := range steps {
+ length := f.lengthPickleStep(step.Keyword, step.Text)
+ if length > max {
+ max = length
+ }
+ }
+
+ return max
+}
+
+// a line number representation in feature file
+func line(path string, loc *messages.Location) string {
+ return " " + blackb(fmt.Sprintf("# %s:%d", path, loc.Line))
+}
+
+func (f *pretty) lengthPickleStep(keyword, text string) int {
+ return f.indent*2 + utf8.RuneCountInString(strings.TrimSpace(keyword)+" "+text)
+}
+
+func (f *pretty) lengthPickle(keyword, name string) int {
+ return f.indent + utf8.RuneCountInString(strings.TrimSpace(keyword)+": "+name)
+}
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/fmt_progress.go b/vendor/github.com/cucumber/godog/internal/formatters/fmt_progress.go
new file mode 100644
index 00000000..a9494820
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/fmt_progress.go
@@ -0,0 +1,149 @@
+package formatters
+
+import (
+ "fmt"
+ "io"
+ "math"
+ "sort"
+ "strings"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/formatters"
+)
+
+func init() {
+ formatters.Format("progress", "Prints a character per step.", ProgressFormatterFunc)
+}
+
+// ProgressFormatterFunc implements the FormatterFunc for the progress formatter
+func ProgressFormatterFunc(suite string, out io.Writer) formatters.Formatter {
+ steps := 0
+ return &progress{
+ Basefmt: NewBaseFmt(suite, out),
+ stepsPerRow: 70,
+ steps: &steps,
+ }
+}
+
+type progress struct {
+ *Basefmt
+ stepsPerRow int
+ steps *int
+}
+
+func (f *progress) Summary() {
+ left := math.Mod(float64(*f.steps), float64(f.stepsPerRow))
+ if left != 0 {
+ if *f.steps > f.stepsPerRow {
+ fmt.Fprintf(f.out, s(f.stepsPerRow-int(left))+fmt.Sprintf(" %d\n", *f.steps))
+ } else {
+ fmt.Fprintf(f.out, " %d\n", *f.steps)
+ }
+ }
+
+ var failedStepsOutput []string
+
+ failedSteps := f.storage.MustGetPickleStepResultsByStatus(failed)
+ sort.Sort(sortPickleStepResultsByPickleStepID(failedSteps))
+
+ for _, sr := range failedSteps {
+ if sr.Status == failed {
+ pickle := f.storage.MustGetPickle(sr.PickleID)
+ pickleStep := f.storage.MustGetPickleStep(sr.PickleStepID)
+ feature := f.storage.MustGetFeature(pickle.Uri)
+
+ sc := feature.FindScenario(pickle.AstNodeIds[0])
+ scenarioDesc := fmt.Sprintf("%s: %s", sc.Keyword, pickle.Name)
+ scenarioLine := fmt.Sprintf("%s:%d", pickle.Uri, sc.Location.Line)
+
+ step := feature.FindStep(pickleStep.AstNodeIds[0])
+ stepDesc := strings.TrimSpace(step.Keyword) + " " + pickleStep.Text
+ stepLine := fmt.Sprintf("%s:%d", pickle.Uri, step.Location.Line)
+
+ failedStepsOutput = append(
+ failedStepsOutput,
+ s(2)+red(scenarioDesc)+blackb(" # "+scenarioLine),
+ s(4)+red(stepDesc)+blackb(" # "+stepLine),
+ s(6)+red("Error: ")+redb(fmt.Sprintf("%+v", sr.Err)),
+ "",
+ )
+ }
+ }
+
+ if len(failedStepsOutput) > 0 {
+ fmt.Fprintln(f.out, "\n\n--- "+red("Failed steps:")+"\n")
+ fmt.Fprint(f.out, strings.Join(failedStepsOutput, "\n"))
+ }
+ fmt.Fprintln(f.out, "")
+
+ f.Basefmt.Summary()
+}
+
+func (f *progress) step(pickleStepID string) {
+ pickleStepResult := f.storage.MustGetPickleStepResult(pickleStepID)
+
+ switch pickleStepResult.Status {
+ case passed:
+ fmt.Fprint(f.out, green("."))
+ case skipped:
+ fmt.Fprint(f.out, cyan("-"))
+ case failed:
+ fmt.Fprint(f.out, red("F"))
+ case undefined:
+ fmt.Fprint(f.out, yellow("U"))
+ case pending:
+ fmt.Fprint(f.out, yellow("P"))
+ }
+
+ *f.steps++
+
+ if math.Mod(float64(*f.steps), float64(f.stepsPerRow)) == 0 {
+ fmt.Fprintf(f.out, " %d\n", *f.steps)
+ }
+}
+
+func (f *progress) Passed(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Passed(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(step.Id)
+}
+
+func (f *progress) Skipped(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Skipped(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(step.Id)
+}
+
+func (f *progress) Undefined(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Undefined(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(step.Id)
+}
+
+func (f *progress) Failed(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition, err error) {
+ f.Basefmt.Failed(pickle, step, match, err)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(step.Id)
+}
+
+func (f *progress) Pending(pickle *messages.Pickle, step *messages.Pickle_PickleStep, match *formatters.StepDefinition) {
+ f.Basefmt.Pending(pickle, step, match)
+
+ f.lock.Lock()
+ defer f.lock.Unlock()
+
+ f.step(step.Id)
+}
diff --git a/vendor/github.com/cucumber/godog/internal/formatters/undefined_snippets_gen.go b/vendor/github.com/cucumber/godog/internal/formatters/undefined_snippets_gen.go
new file mode 100644
index 00000000..d47f3bc1
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/formatters/undefined_snippets_gen.go
@@ -0,0 +1,108 @@
+package formatters
+
+import (
+ "fmt"
+ "reflect"
+ "regexp"
+ "strings"
+ "text/template"
+
+ "github.com/cucumber/messages-go/v10"
+)
+
+// some snippet formatting regexps
+var snippetExprCleanup = regexp.MustCompile("([\\/\\[\\]\\(\\)\\\\^\\$\\.\\|\\?\\*\\+\\'])")
+var snippetExprQuoted = regexp.MustCompile("(\\W|^)\"(?:[^\"]*)\"(\\W|$)")
+var snippetMethodName = regexp.MustCompile("[^a-zA-Z\\_\\ ]")
+var snippetNumbers = regexp.MustCompile("(\\d+)")
+
+var snippetHelperFuncs = template.FuncMap{
+ "backticked": func(s string) string {
+ return "`" + s + "`"
+ },
+}
+
+var undefinedSnippetsTpl = template.Must(template.New("snippets").Funcs(snippetHelperFuncs).Parse(`
+{{ range . }}func {{ .Method }}({{ .Args }}) error {
+ return godog.ErrPending
+}
+
+{{end}}func InitializeScenario(ctx *godog.ScenarioContext) { {{ range . }}
+ ctx.Step({{ backticked .Expr }}, {{ .Method }}){{end}}
+}
+`))
+
+type undefinedSnippet struct {
+ Method string
+ Expr string
+ argument *messages.PickleStepArgument
+}
+
+func (s undefinedSnippet) Args() (ret string) {
+ var (
+ args []string
+ pos int
+ breakLoop bool
+ )
+
+ for !breakLoop {
+ part := s.Expr[pos:]
+ ipos := strings.Index(part, "(\\d+)")
+ spos := strings.Index(part, "\"([^\"]*)\"")
+
+ switch {
+ case spos == -1 && ipos == -1:
+ breakLoop = true
+ case spos == -1:
+ pos += ipos + len("(\\d+)")
+ args = append(args, reflect.Int.String())
+ case ipos == -1:
+ pos += spos + len("\"([^\"]*)\"")
+ args = append(args, reflect.String.String())
+ case ipos < spos:
+ pos += ipos + len("(\\d+)")
+ args = append(args, reflect.Int.String())
+ case spos < ipos:
+ pos += spos + len("\"([^\"]*)\"")
+ args = append(args, reflect.String.String())
+ }
+ }
+
+ if s.argument != nil {
+ if s.argument.GetDocString() != nil {
+ args = append(args, "*messages.PickleStepArgument_PickleDocString")
+ }
+
+ if s.argument.GetDataTable() != nil {
+ args = append(args, "*messages.PickleStepArgument_PickleTable")
+ }
+ }
+
+ var last string
+
+ for i, arg := range args {
+ if last == "" || last == arg {
+ ret += fmt.Sprintf("arg%d, ", i+1)
+ } else {
+ ret = strings.TrimRight(ret, ", ") + fmt.Sprintf(" %s, arg%d, ", last, i+1)
+ }
+
+ last = arg
+ }
+
+ return strings.TrimSpace(strings.TrimRight(ret, ", ") + " " + last)
+}
+
+type snippetSortByMethod []undefinedSnippet
+
+func (s snippetSortByMethod) Len() int {
+ return len(s)
+}
+
+func (s snippetSortByMethod) Swap(i, j int) {
+ s[i], s[j] = s[j], s[i]
+}
+
+func (s snippetSortByMethod) Less(i, j int) bool {
+ return s[i].Method < s[j].Method
+}
diff --git a/vendor/github.com/cucumber/godog/internal/models/feature.go b/vendor/github.com/cucumber/godog/internal/models/feature.go
new file mode 100644
index 00000000..bf1c77b2
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/models/feature.go
@@ -0,0 +1,82 @@
+package models
+
+import (
+ "github.com/cucumber/messages-go/v10"
+)
+
+// Feature is an internal object to group together
+// the parsed gherkin document, the pickles and the
+// raw content.
+type Feature struct {
+ *messages.GherkinDocument
+ Pickles []*messages.Pickle
+ Content []byte
+}
+
+// FindScenario ...
+func (f Feature) FindScenario(astScenarioID string) *messages.GherkinDocument_Feature_Scenario {
+ for _, child := range f.GherkinDocument.Feature.Children {
+ if sc := child.GetScenario(); sc != nil && sc.Id == astScenarioID {
+ return sc
+ }
+ }
+
+ return nil
+}
+
+// FindBackground ...
+func (f Feature) FindBackground(astScenarioID string) *messages.GherkinDocument_Feature_Background {
+ var bg *messages.GherkinDocument_Feature_Background
+
+ for _, child := range f.GherkinDocument.Feature.Children {
+ if tmp := child.GetBackground(); tmp != nil {
+ bg = tmp
+ }
+
+ if sc := child.GetScenario(); sc != nil && sc.Id == astScenarioID {
+ return bg
+ }
+ }
+
+ return nil
+}
+
+// FindExample ...
+func (f Feature) FindExample(exampleAstID string) (*messages.GherkinDocument_Feature_Scenario_Examples, *messages.GherkinDocument_Feature_TableRow) {
+ for _, child := range f.GherkinDocument.Feature.Children {
+ if sc := child.GetScenario(); sc != nil {
+ for _, example := range sc.Examples {
+ for _, row := range example.TableBody {
+ if row.Id == exampleAstID {
+ return example, row
+ }
+ }
+ }
+ }
+ }
+
+ return nil, nil
+}
+
+// FindStep ...
+func (f Feature) FindStep(astStepID string) *messages.GherkinDocument_Feature_Step {
+ for _, child := range f.GherkinDocument.Feature.Children {
+ if sc := child.GetScenario(); sc != nil {
+ for _, step := range sc.GetSteps() {
+ if step.Id == astStepID {
+ return step
+ }
+ }
+ }
+
+ if bg := child.GetBackground(); bg != nil {
+ for _, step := range bg.GetSteps() {
+ if step.Id == astStepID {
+ return step
+ }
+ }
+ }
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/cucumber/godog/internal/models/results.go b/vendor/github.com/cucumber/godog/internal/models/results.go
new file mode 100644
index 00000000..461a5b8a
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/models/results.go
@@ -0,0 +1,84 @@
+package models
+
+import (
+ "time"
+
+ "github.com/cucumber/godog/colors"
+ "github.com/cucumber/godog/internal/utils"
+)
+
+// TestRunStarted ...
+type TestRunStarted struct {
+ StartedAt time.Time
+}
+
+// PickleResult ...
+type PickleResult struct {
+ PickleID string
+ StartedAt time.Time
+}
+
+// PickleStepResult ...
+type PickleStepResult struct {
+ Status StepResultStatus
+ FinishedAt time.Time
+ Err error
+
+ PickleID string
+ PickleStepID string
+
+ Def *StepDefinition
+}
+
+// NewStepResult ...
+func NewStepResult(pickleID, pickleStepID string, match *StepDefinition) PickleStepResult {
+ return PickleStepResult{FinishedAt: utils.TimeNowFunc(), PickleID: pickleID, PickleStepID: pickleStepID, Def: match}
+}
+
+// StepResultStatus ...
+type StepResultStatus int
+
+const (
+ // Passed ...
+ Passed StepResultStatus = iota
+ // Failed ...
+ Failed
+ // Skipped ...
+ Skipped
+ // Undefined ...
+ Undefined
+ // Pending ...
+ Pending
+)
+
+// Color ...
+func (st StepResultStatus) Color() colors.ColorFunc {
+ switch st {
+ case Passed:
+ return colors.Green
+ case Failed:
+ return colors.Red
+ case Skipped:
+ return colors.Cyan
+ default:
+ return colors.Yellow
+ }
+}
+
+// String ...
+func (st StepResultStatus) String() string {
+ switch st {
+ case Passed:
+ return "passed"
+ case Failed:
+ return "failed"
+ case Skipped:
+ return "skipped"
+ case Undefined:
+ return "undefined"
+ case Pending:
+ return "pending"
+ default:
+ return "unknown"
+ }
+}
diff --git a/vendor/github.com/cucumber/godog/internal/models/stepdef.go b/vendor/github.com/cucumber/godog/internal/models/stepdef.go
new file mode 100644
index 00000000..be23bf57
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/models/stepdef.go
@@ -0,0 +1,178 @@
+package models
+
+import (
+ "fmt"
+ "reflect"
+ "strconv"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/formatters"
+)
+
+var typeOfBytes = reflect.TypeOf([]byte(nil))
+
+// StepDefinition ...
+type StepDefinition struct {
+ formatters.StepDefinition
+
+ Args []interface{}
+ HandlerValue reflect.Value
+
+ // multistep related
+ Nested bool
+ Undefined []string
+}
+
+// Run a step with the matched arguments using reflect
+func (sd *StepDefinition) Run() interface{} {
+ typ := sd.HandlerValue.Type()
+ if len(sd.Args) < typ.NumIn() {
+ return fmt.Errorf("func expects %d arguments, which is more than %d matched from step", typ.NumIn(), len(sd.Args))
+ }
+ var values []reflect.Value
+ for i := 0; i < typ.NumIn(); i++ {
+ param := typ.In(i)
+ switch param.Kind() {
+ case reflect.Int:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ v, err := strconv.ParseInt(s, 10, 0)
+ if err != nil {
+ return fmt.Errorf(`cannot convert argument %d: "%s" to int: %s`, i, s, err)
+ }
+ values = append(values, reflect.ValueOf(int(v)))
+ case reflect.Int64:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ v, err := strconv.ParseInt(s, 10, 64)
+ if err != nil {
+ return fmt.Errorf(`cannot convert argument %d: "%s" to int64: %s`, i, s, err)
+ }
+ values = append(values, reflect.ValueOf(int64(v)))
+ case reflect.Int32:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ v, err := strconv.ParseInt(s, 10, 32)
+ if err != nil {
+ return fmt.Errorf(`cannot convert argument %d: "%s" to int32: %s`, i, s, err)
+ }
+ values = append(values, reflect.ValueOf(int32(v)))
+ case reflect.Int16:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ v, err := strconv.ParseInt(s, 10, 16)
+ if err != nil {
+ return fmt.Errorf(`cannot convert argument %d: "%s" to int16: %s`, i, s, err)
+ }
+ values = append(values, reflect.ValueOf(int16(v)))
+ case reflect.Int8:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ v, err := strconv.ParseInt(s, 10, 8)
+ if err != nil {
+ return fmt.Errorf(`cannot convert argument %d: "%s" to int8: %s`, i, s, err)
+ }
+ values = append(values, reflect.ValueOf(int8(v)))
+ case reflect.String:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ values = append(values, reflect.ValueOf(s))
+ case reflect.Float64:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ v, err := strconv.ParseFloat(s, 64)
+ if err != nil {
+ return fmt.Errorf(`cannot convert argument %d: "%s" to float64: %s`, i, s, err)
+ }
+ values = append(values, reflect.ValueOf(v))
+ case reflect.Float32:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ v, err := strconv.ParseFloat(s, 32)
+ if err != nil {
+ return fmt.Errorf(`cannot convert argument %d: "%s" to float32: %s`, i, s, err)
+ }
+ values = append(values, reflect.ValueOf(float32(v)))
+ case reflect.Ptr:
+ arg := sd.Args[i]
+ switch param.Elem().String() {
+ case "messages.PickleStepArgument_PickleDocString":
+ if v, ok := arg.(*messages.PickleStepArgument); ok {
+ values = append(values, reflect.ValueOf(v.GetDocString()))
+ break
+ }
+
+ if v, ok := arg.(*messages.PickleStepArgument_PickleDocString); ok {
+ values = append(values, reflect.ValueOf(v))
+ break
+ }
+
+ return fmt.Errorf(`cannot convert argument %d: "%v" of type "%T" to *messages.PickleStepArgument_PickleDocString`, i, arg, arg)
+ case "messages.PickleStepArgument_PickleTable":
+ if v, ok := arg.(*messages.PickleStepArgument); ok {
+ values = append(values, reflect.ValueOf(v.GetDataTable()))
+ break
+ }
+
+ if v, ok := arg.(*messages.PickleStepArgument_PickleTable); ok {
+ values = append(values, reflect.ValueOf(v))
+ break
+ }
+
+ return fmt.Errorf(`cannot convert argument %d: "%v" of type "%T" to *messages.PickleStepArgument_PickleTable`, i, arg, arg)
+ default:
+ return fmt.Errorf("the argument %d type %T is not supported %s", i, arg, param.Elem().String())
+ }
+ case reflect.Slice:
+ switch param {
+ case typeOfBytes:
+ s, err := sd.shouldBeString(i)
+ if err != nil {
+ return err
+ }
+ values = append(values, reflect.ValueOf([]byte(s)))
+ default:
+ return fmt.Errorf("the slice argument %d type %s is not supported", i, param.Kind())
+ }
+ default:
+ return fmt.Errorf("the argument %d type %s is not supported", i, param.Kind())
+ }
+ }
+
+ return sd.HandlerValue.Call(values)[0].Interface()
+}
+
+func (sd *StepDefinition) shouldBeString(idx int) (string, error) {
+ arg := sd.Args[idx]
+ s, ok := arg.(string)
+ if !ok {
+ return "", fmt.Errorf(`cannot convert argument %d: "%v" of type "%T" to string`, idx, arg, arg)
+ }
+ return s, nil
+}
+
+// GetInternalStepDefinition ...
+func (sd *StepDefinition) GetInternalStepDefinition() *formatters.StepDefinition {
+ if sd == nil {
+ return nil
+ }
+
+ return &sd.StepDefinition
+}
diff --git a/vendor/github.com/cucumber/godog/internal/parser/parser.go b/vendor/github.com/cucumber/godog/internal/parser/parser.go
new file mode 100644
index 00000000..8d9fc9e3
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/parser/parser.go
@@ -0,0 +1,166 @@
+package parser
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "regexp"
+ "strconv"
+ "strings"
+
+ "github.com/cucumber/gherkin-go/v11"
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/internal/models"
+ "github.com/cucumber/godog/internal/tags"
+)
+
+var pathLineRe = regexp.MustCompile(`:([\d]+)$`)
+
+// ExtractFeaturePathLine ...
+func ExtractFeaturePathLine(p string) (string, int) {
+ line := -1
+ retPath := p
+ if m := pathLineRe.FindStringSubmatch(p); len(m) > 0 {
+ if i, err := strconv.Atoi(m[1]); err == nil {
+ line = i
+ retPath = p[:strings.LastIndexByte(p, ':')]
+ }
+ }
+ return retPath, line
+}
+
+func parseFeatureFile(path string, newIDFunc func() string) (*models.Feature, error) {
+ reader, err := os.Open(path)
+ if err != nil {
+ return nil, err
+ }
+
+ defer reader.Close()
+
+ var buf bytes.Buffer
+ gherkinDocument, err := gherkin.ParseGherkinDocument(io.TeeReader(reader, &buf), newIDFunc)
+ if err != nil {
+ return nil, fmt.Errorf("%s - %v", path, err)
+ }
+
+ gherkinDocument.Uri = path
+ pickles := gherkin.Pickles(*gherkinDocument, path, newIDFunc)
+
+ f := models.Feature{GherkinDocument: gherkinDocument, Pickles: pickles, Content: buf.Bytes()}
+ return &f, nil
+}
+
+func parseFeatureDir(dir string, newIDFunc func() string) ([]*models.Feature, error) {
+ var features []*models.Feature
+ return features, filepath.Walk(dir, func(p string, f os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ if f.IsDir() {
+ return nil
+ }
+
+ if !strings.HasSuffix(p, ".feature") {
+ return nil
+ }
+
+ feat, err := parseFeatureFile(p, newIDFunc)
+ if err != nil {
+ return err
+ }
+
+ features = append(features, feat)
+ return nil
+ })
+}
+
+func parsePath(path string, newIDFunc func() string) ([]*models.Feature, error) {
+ var features []*models.Feature
+
+ path, line := ExtractFeaturePathLine(path)
+
+ fi, err := os.Stat(path)
+ if err != nil {
+ return features, err
+ }
+
+ if fi.IsDir() {
+ return parseFeatureDir(path, newIDFunc)
+ }
+
+ ft, err := parseFeatureFile(path, newIDFunc)
+ if err != nil {
+ return features, err
+ }
+
+ // filter scenario by line number
+ var pickles []*messages.Pickle
+ for _, pickle := range ft.Pickles {
+ sc := ft.FindScenario(pickle.AstNodeIds[0])
+
+ if line == -1 || uint32(line) == sc.Location.Line {
+ pickles = append(pickles, pickle)
+ }
+ }
+ ft.Pickles = pickles
+
+ return append(features, ft), nil
+}
+
+// ParseFeatures ...
+func ParseFeatures(filter string, paths []string) ([]*models.Feature, error) {
+ var order int
+
+ featureIdxs := make(map[string]int)
+ uniqueFeatureURI := make(map[string]*models.Feature)
+ newIDFunc := (&messages.Incrementing{}).NewId
+ for _, path := range paths {
+ feats, err := parsePath(path, newIDFunc)
+
+ switch {
+ case os.IsNotExist(err):
+ return nil, fmt.Errorf(`feature path "%s" is not available`, path)
+ case os.IsPermission(err):
+ return nil, fmt.Errorf(`feature path "%s" is not accessible`, path)
+ case err != nil:
+ return nil, err
+ }
+
+ for _, ft := range feats {
+ if _, duplicate := uniqueFeatureURI[ft.Uri]; duplicate {
+ continue
+ }
+
+ uniqueFeatureURI[ft.Uri] = ft
+ featureIdxs[ft.Uri] = order
+
+ order++
+ }
+ }
+
+ var features = make([]*models.Feature, len(uniqueFeatureURI))
+ for uri, feature := range uniqueFeatureURI {
+ idx := featureIdxs[uri]
+ features[idx] = feature
+ }
+
+ features = filterFeatures(filter, features)
+
+ return features, nil
+}
+
+func filterFeatures(filter string, features []*models.Feature) (result []*models.Feature) {
+ for _, ft := range features {
+ ft.Pickles = tags.ApplyTagFilter(filter, ft.Pickles)
+
+ if ft.Feature != nil && len(ft.Pickles) > 0 {
+ result = append(result, ft)
+ }
+ }
+
+ return
+}
diff --git a/vendor/github.com/cucumber/godog/internal/storage/storage.go b/vendor/github.com/cucumber/godog/internal/storage/storage.go
new file mode 100644
index 00000000..a61adf2a
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/storage/storage.go
@@ -0,0 +1,323 @@
+package storage
+
+import (
+ "fmt"
+ "sync"
+
+ "github.com/cucumber/messages-go/v10"
+ "github.com/hashicorp/go-memdb"
+
+ "github.com/cucumber/godog/internal/models"
+)
+
+const (
+ writeMode bool = true
+ readMode bool = false
+
+ tableFeature string = "feature"
+ tableFeatureIndexURI string = "id"
+
+ tablePickle string = "pickle"
+ tablePickleIndexID string = "id"
+ tablePickleIndexURI string = "uri"
+
+ tablePickleStep string = "pickle_step"
+ tablePickleStepIndexID string = "id"
+
+ tablePickleResult string = "pickle_result"
+ tablePickleResultIndexPickleID string = "id"
+
+ tablePickleStepResult string = "pickle_step_result"
+ tablePickleStepResultIndexPickleStepID string = "id"
+ tablePickleStepResultIndexPickleID string = "pickle_id"
+ tablePickleStepResultIndexStatus string = "status"
+
+ tableStepDefintionMatch string = "step_defintion_match"
+ tableStepDefintionMatchIndexStepID string = "id"
+)
+
+// Storage is a thread safe in-mem storage
+type Storage struct {
+ db *memdb.MemDB
+
+ testRunStarted models.TestRunStarted
+ testRunStartedLock *sync.Mutex
+}
+
+// NewStorage will create an in-mem storage that
+// is used across concurrent runners and formatters
+func NewStorage() *Storage {
+ schema := memdb.DBSchema{
+ Tables: map[string]*memdb.TableSchema{
+ tableFeature: {
+ Name: tableFeature,
+ Indexes: map[string]*memdb.IndexSchema{
+ tableFeatureIndexURI: {
+ Name: tableFeatureIndexURI,
+ Unique: true,
+ Indexer: &memdb.StringFieldIndex{Field: "Uri"},
+ },
+ },
+ },
+ tablePickle: {
+ Name: tablePickle,
+ Indexes: map[string]*memdb.IndexSchema{
+ tablePickleIndexID: {
+ Name: tablePickleIndexID,
+ Unique: true,
+ Indexer: &memdb.StringFieldIndex{Field: "Id"},
+ },
+ tablePickleIndexURI: {
+ Name: tablePickleIndexURI,
+ Unique: false,
+ Indexer: &memdb.StringFieldIndex{Field: "Uri"},
+ },
+ },
+ },
+ tablePickleStep: {
+ Name: tablePickleStep,
+ Indexes: map[string]*memdb.IndexSchema{
+ tablePickleStepIndexID: {
+ Name: tablePickleStepIndexID,
+ Unique: true,
+ Indexer: &memdb.StringFieldIndex{Field: "Id"},
+ },
+ },
+ },
+ tablePickleResult: {
+ Name: tablePickleResult,
+ Indexes: map[string]*memdb.IndexSchema{
+ tablePickleResultIndexPickleID: {
+ Name: tablePickleResultIndexPickleID,
+ Unique: true,
+ Indexer: &memdb.StringFieldIndex{Field: "PickleID"},
+ },
+ },
+ },
+ tablePickleStepResult: {
+ Name: tablePickleStepResult,
+ Indexes: map[string]*memdb.IndexSchema{
+ tablePickleStepResultIndexPickleStepID: {
+ Name: tablePickleStepResultIndexPickleStepID,
+ Unique: true,
+ Indexer: &memdb.StringFieldIndex{Field: "PickleStepID"},
+ },
+ tablePickleStepResultIndexPickleID: {
+ Name: tablePickleStepResultIndexPickleID,
+ Unique: false,
+ Indexer: &memdb.StringFieldIndex{Field: "PickleID"},
+ },
+ tablePickleStepResultIndexStatus: {
+ Name: tablePickleStepResultIndexStatus,
+ Unique: false,
+ Indexer: &memdb.IntFieldIndex{Field: "Status"},
+ },
+ },
+ },
+ tableStepDefintionMatch: {
+ Name: tableStepDefintionMatch,
+ Indexes: map[string]*memdb.IndexSchema{
+ tableStepDefintionMatchIndexStepID: {
+ Name: tableStepDefintionMatchIndexStepID,
+ Unique: true,
+ Indexer: &memdb.StringFieldIndex{Field: "StepID"},
+ },
+ },
+ },
+ },
+ }
+
+ db, err := memdb.NewMemDB(&schema)
+ if err != nil {
+ panic(err)
+ }
+
+ return &Storage{db: db, testRunStartedLock: new(sync.Mutex)}
+}
+
+// MustInsertPickle will insert a pickle and it's steps,
+// will panic on error.
+func (s *Storage) MustInsertPickle(p *messages.Pickle) {
+ txn := s.db.Txn(writeMode)
+
+ if err := txn.Insert(tablePickle, p); err != nil {
+ panic(err)
+ }
+
+ for _, step := range p.Steps {
+ if err := txn.Insert(tablePickleStep, step); err != nil {
+ panic(err)
+ }
+ }
+
+ txn.Commit()
+}
+
+// MustGetPickle will retrieve a pickle by id and panic on error.
+func (s *Storage) MustGetPickle(id string) *messages.Pickle {
+ v := s.mustFirst(tablePickle, tablePickleIndexID, id)
+ return v.(*messages.Pickle)
+}
+
+// MustGetPickles will retrieve pickles by URI and panic on error.
+func (s *Storage) MustGetPickles(uri string) (ps []*messages.Pickle) {
+ it := s.mustGet(tablePickle, tablePickleIndexURI, uri)
+ for v := it.Next(); v != nil; v = it.Next() {
+ ps = append(ps, v.(*messages.Pickle))
+ }
+
+ return
+}
+
+// MustGetPickleStep will retrieve a pickle step and panic on error.
+func (s *Storage) MustGetPickleStep(id string) *messages.Pickle_PickleStep {
+ v := s.mustFirst(tablePickleStep, tablePickleStepIndexID, id)
+ return v.(*messages.Pickle_PickleStep)
+}
+
+// MustInsertTestRunStarted will set the test run started event and panic on error.
+func (s *Storage) MustInsertTestRunStarted(trs models.TestRunStarted) {
+ s.testRunStartedLock.Lock()
+ defer s.testRunStartedLock.Unlock()
+
+ s.testRunStarted = trs
+}
+
+// MustGetTestRunStarted will retrieve the test run started event and panic on error.
+func (s *Storage) MustGetTestRunStarted() models.TestRunStarted {
+ s.testRunStartedLock.Lock()
+ defer s.testRunStartedLock.Unlock()
+
+ return s.testRunStarted
+}
+
+// MustInsertPickleResult will instert a pickle result and panic on error.
+func (s *Storage) MustInsertPickleResult(pr models.PickleResult) {
+ s.mustInsert(tablePickleResult, pr)
+}
+
+// MustInsertPickleStepResult will insert a pickle step result and panic on error.
+func (s *Storage) MustInsertPickleStepResult(psr models.PickleStepResult) {
+ s.mustInsert(tablePickleStepResult, psr)
+}
+
+// MustGetPickleResult will retrieve a pickle result by id and panic on error.
+func (s *Storage) MustGetPickleResult(id string) models.PickleResult {
+ v := s.mustFirst(tablePickleResult, tablePickleResultIndexPickleID, id)
+ return v.(models.PickleResult)
+}
+
+// MustGetPickleResults will retrieve all pickle results and panic on error.
+func (s *Storage) MustGetPickleResults() (prs []models.PickleResult) {
+ it := s.mustGet(tablePickleResult, tablePickleResultIndexPickleID)
+ for v := it.Next(); v != nil; v = it.Next() {
+ prs = append(prs, v.(models.PickleResult))
+ }
+
+ return prs
+}
+
+// MustGetPickleStepResult will retrieve a pickle strep result by id and panic on error.
+func (s *Storage) MustGetPickleStepResult(id string) models.PickleStepResult {
+ v := s.mustFirst(tablePickleStepResult, tablePickleStepResultIndexPickleStepID, id)
+ return v.(models.PickleStepResult)
+}
+
+// MustGetPickleStepResultsByPickleID will retrieve pickle strep results by pickle id and panic on error.
+func (s *Storage) MustGetPickleStepResultsByPickleID(pickleID string) (psrs []models.PickleStepResult) {
+ it := s.mustGet(tablePickleStepResult, tablePickleStepResultIndexPickleID, pickleID)
+ for v := it.Next(); v != nil; v = it.Next() {
+ psrs = append(psrs, v.(models.PickleStepResult))
+ }
+
+ return psrs
+}
+
+// MustGetPickleStepResultsByStatus will retrieve pickle strep results by status and panic on error.
+func (s *Storage) MustGetPickleStepResultsByStatus(status models.StepResultStatus) (psrs []models.PickleStepResult) {
+ it := s.mustGet(tablePickleStepResult, tablePickleStepResultIndexStatus, status)
+ for v := it.Next(); v != nil; v = it.Next() {
+ psrs = append(psrs, v.(models.PickleStepResult))
+ }
+
+ return psrs
+}
+
+// MustInsertFeature will insert a feature and panic on error.
+func (s *Storage) MustInsertFeature(f *models.Feature) {
+ s.mustInsert(tableFeature, f)
+}
+
+// MustGetFeature will retrieve a feature by URI and panic on error.
+func (s *Storage) MustGetFeature(uri string) *models.Feature {
+ v := s.mustFirst(tableFeature, tableFeatureIndexURI, uri)
+ return v.(*models.Feature)
+}
+
+// MustGetFeatures will retrieve all features by and panic on error.
+func (s *Storage) MustGetFeatures() (fs []*models.Feature) {
+ it := s.mustGet(tableFeature, tableFeatureIndexURI)
+ for v := it.Next(); v != nil; v = it.Next() {
+ fs = append(fs, v.(*models.Feature))
+ }
+
+ return
+}
+
+type stepDefinitionMatch struct {
+ StepID string
+ StepDefinition *models.StepDefinition
+}
+
+// MustInsertStepDefintionMatch will insert the matched StepDefintion for the step ID and panic on error.
+func (s *Storage) MustInsertStepDefintionMatch(stepID string, match *models.StepDefinition) {
+ d := stepDefinitionMatch{
+ StepID: stepID,
+ StepDefinition: match,
+ }
+
+ s.mustInsert(tableStepDefintionMatch, d)
+}
+
+// MustGetStepDefintionMatch will retrieve the matched StepDefintion for the step ID and panic on error.
+func (s *Storage) MustGetStepDefintionMatch(stepID string) *models.StepDefinition {
+ v := s.mustFirst(tableStepDefintionMatch, tableStepDefintionMatchIndexStepID, stepID)
+ return v.(stepDefinitionMatch).StepDefinition
+}
+
+func (s *Storage) mustInsert(table string, obj interface{}) {
+ txn := s.db.Txn(writeMode)
+
+ if err := txn.Insert(table, obj); err != nil {
+ panic(err)
+ }
+
+ txn.Commit()
+}
+
+func (s *Storage) mustFirst(table, index string, args ...interface{}) interface{} {
+ txn := s.db.Txn(readMode)
+ defer txn.Abort()
+
+ v, err := txn.First(table, index, args...)
+ if err != nil {
+ panic(err)
+ } else if v == nil {
+ err = fmt.Errorf("Couldn't find index: %q in table: %q with args: %+v", index, table, args)
+ panic(err)
+ }
+
+ return v
+}
+
+func (s *Storage) mustGet(table, index string, args ...interface{}) memdb.ResultIterator {
+ txn := s.db.Txn(readMode)
+ defer txn.Abort()
+
+ it, err := txn.Get(table, index, args...)
+ if err != nil {
+ panic(err)
+ }
+
+ return it
+}
diff --git a/vendor/github.com/cucumber/godog/internal/tags/tag_filter.go b/vendor/github.com/cucumber/godog/internal/tags/tag_filter.go
new file mode 100644
index 00000000..53325457
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/tags/tag_filter.go
@@ -0,0 +1,62 @@
+package tags
+
+import (
+ "strings"
+
+ "github.com/cucumber/messages-go/v10"
+)
+
+// ApplyTagFilter will apply a filter string on the
+// array of pickles and returned the filtered list.
+func ApplyTagFilter(filter string, pickles []*messages.Pickle) []*messages.Pickle {
+ if filter == "" {
+ return pickles
+ }
+
+ var result = []*messages.Pickle{}
+
+ for _, pickle := range pickles {
+ if match(filter, pickle.Tags) {
+ result = append(result, pickle)
+ }
+ }
+
+ return result
+}
+
+// Based on http://behat.readthedocs.org/en/v2.5/guides/6.cli.html#gherkin-filters
+func match(filter string, tags []*messages.Pickle_PickleTag) (ok bool) {
+ ok = true
+
+ for _, andTags := range strings.Split(filter, "&&") {
+ var okComma bool
+
+ for _, tag := range strings.Split(andTags, ",") {
+ tag = strings.TrimSpace(tag)
+ tag = strings.Replace(tag, "@", "", -1)
+
+ okComma = contains(tags, tag) || okComma
+
+ if tag[0] == '~' {
+ tag = tag[1:]
+ okComma = !contains(tags, tag) || okComma
+ }
+ }
+
+ ok = ok && okComma
+ }
+
+ return
+}
+
+func contains(tags []*messages.Pickle_PickleTag, tag string) bool {
+ for _, t := range tags {
+ tagName := strings.Replace(t.Name, "@", "", -1)
+
+ if tagName == tag {
+ return true
+ }
+ }
+
+ return false
+}
diff --git a/vendor/github.com/cucumber/godog/internal/utils/utils.go b/vendor/github.com/cucumber/godog/internal/utils/utils.go
new file mode 100644
index 00000000..f1ec21f9
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/internal/utils/utils.go
@@ -0,0 +1,21 @@
+package utils
+
+import (
+ "strings"
+ "time"
+)
+
+// S repeats a space n times
+func S(n int) string {
+ if n < 0 {
+ n = 1
+ }
+ return strings.Repeat(" ", n)
+}
+
+// TimeNowFunc is a utility function to simply testing
+// by allowing TimeNowFunc to be defined to zero time
+// to remove the time domain from tests
+var TimeNowFunc = func() time.Time {
+ return time.Now()
+}
diff --git a/vendor/github.com/cucumber/godog/logo.png b/vendor/github.com/cucumber/godog/logo.png
new file mode 100644
index 00000000..70e6c7aa
Binary files /dev/null and b/vendor/github.com/cucumber/godog/logo.png differ
diff --git a/vendor/github.com/cucumber/godog/logo.svg b/vendor/github.com/cucumber/godog/logo.svg
new file mode 100644
index 00000000..bfda7fdb
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/logo.svg
@@ -0,0 +1,79 @@
+
diff --git a/vendor/github.com/cucumber/godog/options.go b/vendor/github.com/cucumber/godog/options.go
new file mode 100644
index 00000000..2b32cfd8
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/options.go
@@ -0,0 +1,12 @@
+package godog
+
+import "github.com/cucumber/godog/internal/flags"
+
+// Options are suite run options
+// flags are mapped to these options.
+//
+// It can also be used together with godog.RunWithOptions
+// to run test suite from go source directly
+//
+// See the flags for more details
+type Options = flags.Options
diff --git a/vendor/github.com/cucumber/godog/run.go b/vendor/github.com/cucumber/godog/run.go
new file mode 100644
index 00000000..0a822008
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/run.go
@@ -0,0 +1,293 @@
+package godog
+
+import (
+ "fmt"
+ "go/build"
+ "io"
+ "math/rand"
+ "os"
+ "path/filepath"
+ "runtime"
+ "strconv"
+ "strings"
+ "sync"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/colors"
+ "github.com/cucumber/godog/formatters"
+ "github.com/cucumber/godog/internal/models"
+ "github.com/cucumber/godog/internal/parser"
+ "github.com/cucumber/godog/internal/storage"
+ "github.com/cucumber/godog/internal/utils"
+)
+
+const (
+ exitSuccess int = iota
+ exitFailure
+ exitOptionError
+)
+
+type testSuiteInitializer func(*TestSuiteContext)
+type scenarioInitializer func(*ScenarioContext)
+
+type runner struct {
+ randomSeed int64
+ stopOnFailure, strict bool
+
+ features []*models.Feature
+
+ testSuiteInitializer testSuiteInitializer
+ scenarioInitializer scenarioInitializer
+
+ storage *storage.Storage
+ fmt Formatter
+}
+
+func (r *runner) concurrent(rate int) (failed bool) {
+ var copyLock sync.Mutex
+
+ if fmt, ok := r.fmt.(storageFormatter); ok {
+ fmt.SetStorage(r.storage)
+ }
+
+ testSuiteContext := TestSuiteContext{}
+ if r.testSuiteInitializer != nil {
+ r.testSuiteInitializer(&testSuiteContext)
+ }
+
+ testRunStarted := models.TestRunStarted{StartedAt: utils.TimeNowFunc()}
+ r.storage.MustInsertTestRunStarted(testRunStarted)
+ r.fmt.TestRunStarted()
+
+ // run before suite handlers
+ for _, f := range testSuiteContext.beforeSuiteHandlers {
+ f()
+ }
+
+ queue := make(chan int, rate)
+ for _, ft := range r.features {
+ pickles := make([]*messages.Pickle, len(ft.Pickles))
+ if r.randomSeed != 0 {
+ r := rand.New(rand.NewSource(r.randomSeed))
+ perm := r.Perm(len(ft.Pickles))
+ for i, v := range perm {
+ pickles[v] = ft.Pickles[i]
+ }
+ } else {
+ copy(pickles, ft.Pickles)
+ }
+
+ for i, p := range pickles {
+ pickle := *p
+
+ queue <- i // reserve space in queue
+
+ if i == 0 {
+ r.fmt.Feature(ft.GherkinDocument, ft.Uri, ft.Content)
+ }
+
+ go func(fail *bool, pickle *messages.Pickle) {
+ defer func() {
+ <-queue // free a space in queue
+ }()
+
+ if r.stopOnFailure && *fail {
+ return
+ }
+
+ suite := &suite{
+ fmt: r.fmt,
+ randomSeed: r.randomSeed,
+ strict: r.strict,
+ storage: r.storage,
+ }
+
+ if r.scenarioInitializer != nil {
+ sc := ScenarioContext{suite: suite}
+ r.scenarioInitializer(&sc)
+ }
+
+ err := suite.runPickle(pickle)
+ if suite.shouldFail(err) {
+ copyLock.Lock()
+ *fail = true
+ copyLock.Unlock()
+ }
+ }(&failed, &pickle)
+ }
+ }
+
+ // wait until last are processed
+ for i := 0; i < rate; i++ {
+ queue <- i
+ }
+
+ close(queue)
+
+ // run after suite handlers
+ for _, f := range testSuiteContext.afterSuiteHandlers {
+ f()
+ }
+
+ // print summary
+ r.fmt.Summary()
+ return
+}
+
+func runWithOptions(suiteName string, runner runner, opt Options) int {
+ var output io.Writer = os.Stdout
+ if nil != opt.Output {
+ output = opt.Output
+ }
+
+ if formatterParts := strings.SplitN(opt.Format, ":", 2); len(formatterParts) > 1 {
+ f, err := os.Create(formatterParts[1])
+ if err != nil {
+ err = fmt.Errorf(
+ `couldn't create file with name: "%s", error: %s`,
+ formatterParts[1], err.Error(),
+ )
+ fmt.Fprintln(os.Stderr, err)
+
+ return exitOptionError
+ }
+
+ defer f.Close()
+
+ output = f
+ opt.Format = formatterParts[0]
+ }
+
+ if opt.NoColors {
+ output = colors.Uncolored(output)
+ } else {
+ output = colors.Colored(output)
+ }
+
+ if opt.ShowStepDefinitions {
+ s := suite{}
+ sc := ScenarioContext{suite: &s}
+ runner.scenarioInitializer(&sc)
+ printStepDefinitions(s.steps, output)
+ return exitOptionError
+ }
+
+ if len(opt.Paths) == 0 {
+ inf, err := os.Stat("features")
+ if err == nil && inf.IsDir() {
+ opt.Paths = []string{"features"}
+ }
+ }
+
+ if opt.Concurrency < 1 {
+ opt.Concurrency = 1
+ }
+
+ formatter := formatters.FindFmt(opt.Format)
+ if nil == formatter {
+ var names []string
+ for name := range formatters.AvailableFormatters() {
+ names = append(names, name)
+ }
+ fmt.Fprintln(os.Stderr, fmt.Errorf(
+ `unregistered formatter name: "%s", use one of: %s`,
+ opt.Format,
+ strings.Join(names, ", "),
+ ))
+ return exitOptionError
+ }
+ runner.fmt = formatter(suiteName, output)
+
+ var err error
+ if runner.features, err = parser.ParseFeatures(opt.Tags, opt.Paths); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ return exitOptionError
+ }
+
+ runner.storage = storage.NewStorage()
+ for _, feat := range runner.features {
+ runner.storage.MustInsertFeature(feat)
+
+ for _, pickle := range feat.Pickles {
+ runner.storage.MustInsertPickle(pickle)
+ }
+ }
+
+ // user may have specified -1 option to create random seed
+ runner.randomSeed = opt.Randomize
+ if runner.randomSeed == -1 {
+ runner.randomSeed = makeRandomSeed()
+ }
+
+ runner.stopOnFailure = opt.StopOnFailure
+ runner.strict = opt.Strict
+
+ // store chosen seed in environment, so it could be seen in formatter summary report
+ os.Setenv("GODOG_SEED", strconv.FormatInt(runner.randomSeed, 10))
+ // determine tested package
+ _, filename, _, _ := runtime.Caller(1)
+ os.Setenv("GODOG_TESTED_PACKAGE", runsFromPackage(filename))
+
+ failed := runner.concurrent(opt.Concurrency)
+
+ // @TODO: should prevent from having these
+ os.Setenv("GODOG_SEED", "")
+ os.Setenv("GODOG_TESTED_PACKAGE", "")
+ if failed && opt.Format != "events" {
+ return exitFailure
+ }
+ return exitSuccess
+}
+
+func runsFromPackage(fp string) string {
+ dir := filepath.Dir(fp)
+
+ gopaths := filepath.SplitList(build.Default.GOPATH)
+ for _, gp := range gopaths {
+ gp = filepath.Join(gp, "src")
+ if strings.Index(dir, gp) == 0 {
+ return strings.TrimLeft(strings.Replace(dir, gp, "", 1), string(filepath.Separator))
+ }
+ }
+ return dir
+}
+
+// TestSuite allows for configuration
+// of the Test Suite Execution
+type TestSuite struct {
+ Name string
+ TestSuiteInitializer func(*TestSuiteContext)
+ ScenarioInitializer func(*ScenarioContext)
+ Options *Options
+}
+
+// Run will execute the test suite.
+//
+// If options are not set, it will reads
+// all configuration options from flags.
+//
+// The exit codes may vary from:
+// 0 - success
+// 1 - failed
+// 2 - command line usage error
+// 128 - or higher, os signal related error exit codes
+//
+// If there are flag related errors they will be directed to os.Stderr
+func (ts TestSuite) Run() int {
+ if ts.Options == nil {
+ ts.Options = &Options{}
+ ts.Options.Output = colors.Colored(os.Stdout)
+
+ flagSet := flagSet(ts.Options)
+ if err := flagSet.Parse(os.Args[1:]); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ return exitOptionError
+ }
+
+ ts.Options.Paths = flagSet.Args()
+ }
+
+ r := runner{testSuiteInitializer: ts.TestSuiteInitializer, scenarioInitializer: ts.ScenarioInitializer}
+ return runWithOptions(ts.Name, r, *ts.Options)
+}
diff --git a/vendor/github.com/cucumber/godog/stacktrace.go b/vendor/github.com/cucumber/godog/stacktrace.go
new file mode 100644
index 00000000..ed594c94
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/stacktrace.go
@@ -0,0 +1,141 @@
+package godog
+
+import (
+ "fmt"
+ "go/build"
+ "io"
+ "path"
+ "path/filepath"
+ "runtime"
+ "strings"
+)
+
+// Frame represents a program counter inside a stack frame.
+type stackFrame uintptr
+
+// pc returns the program counter for this frame;
+// multiple frames may have the same PC value.
+func (f stackFrame) pc() uintptr { return uintptr(f) - 1 }
+
+// file returns the full path to the file that contains the
+// function for this Frame's pc.
+func (f stackFrame) file() string {
+ fn := runtime.FuncForPC(f.pc())
+ if fn == nil {
+ return "unknown"
+ }
+ file, _ := fn.FileLine(f.pc())
+ return file
+}
+
+func trimGoPath(file string) string {
+ for _, p := range filepath.SplitList(build.Default.GOPATH) {
+ file = strings.Replace(file, filepath.Join(p, "src")+string(filepath.Separator), "", 1)
+ }
+ return file
+}
+
+// line returns the line number of source code of the
+// function for this Frame's pc.
+func (f stackFrame) line() int {
+ fn := runtime.FuncForPC(f.pc())
+ if fn == nil {
+ return 0
+ }
+ _, line := fn.FileLine(f.pc())
+ return line
+}
+
+// Format formats the frame according to the fmt.Formatter interface.
+//
+// %s source file
+// %d source line
+// %n function name
+// %v equivalent to %s:%d
+//
+// Format accepts flags that alter the printing of some verbs, as follows:
+//
+// %+s path of source file relative to the compile time GOPATH
+// %+v equivalent to %+s:%d
+func (f stackFrame) Format(s fmt.State, verb rune) {
+ funcname := func(name string) string {
+ i := strings.LastIndex(name, "/")
+ name = name[i+1:]
+ i = strings.Index(name, ".")
+ return name[i+1:]
+ }
+
+ switch verb {
+ case 's':
+ switch {
+ case s.Flag('+'):
+ pc := f.pc()
+ fn := runtime.FuncForPC(pc)
+ if fn == nil {
+ io.WriteString(s, "unknown")
+ } else {
+ file, _ := fn.FileLine(pc)
+ fmt.Fprintf(s, "%s\n\t%s", fn.Name(), trimGoPath(file))
+ }
+ default:
+ io.WriteString(s, path.Base(f.file()))
+ }
+ case 'd':
+ fmt.Fprintf(s, "%d", f.line())
+ case 'n':
+ name := runtime.FuncForPC(f.pc()).Name()
+ io.WriteString(s, funcname(name))
+ case 'v':
+ f.Format(s, 's')
+ io.WriteString(s, ":")
+ f.Format(s, 'd')
+ }
+}
+
+// stack represents a stack of program counters.
+type stack []uintptr
+
+func (s *stack) Format(st fmt.State, verb rune) {
+ switch verb {
+ case 'v':
+ switch {
+ case st.Flag('+'):
+ for _, pc := range *s {
+ f := stackFrame(pc)
+ fmt.Fprintf(st, "\n%+v", f)
+ }
+ }
+ }
+}
+
+func callStack() *stack {
+ const depth = 32
+ var pcs [depth]uintptr
+ n := runtime.Callers(3, pcs[:])
+ var st stack = pcs[0:n]
+ return &st
+}
+
+// fundamental is an error that has a message and a stack, but no caller.
+type traceError struct {
+ msg string
+ *stack
+}
+
+func (f *traceError) Error() string { return f.msg }
+
+func (f *traceError) Format(s fmt.State, verb rune) {
+ switch verb {
+ case 'v':
+ if s.Flag('+') {
+ io.WriteString(s, f.msg)
+ f.stack.Format(s, verb)
+ return
+ }
+ fallthrough
+ case 's':
+ io.WriteString(s, f.msg)
+ case 'q':
+ fmt.Fprintf(s, "%q", f.msg)
+ }
+}
diff --git a/vendor/github.com/cucumber/godog/suite.go b/vendor/github.com/cucumber/godog/suite.go
new file mode 100644
index 00000000..54740299
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/suite.go
@@ -0,0 +1,292 @@
+package godog
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/formatters"
+ "github.com/cucumber/godog/internal/models"
+ "github.com/cucumber/godog/internal/storage"
+ "github.com/cucumber/godog/internal/utils"
+)
+
+var errorInterface = reflect.TypeOf((*error)(nil)).Elem()
+
+// ErrUndefined is returned in case if step definition was not found
+var ErrUndefined = fmt.Errorf("step is undefined")
+
+// ErrPending should be returned by step definition if
+// step implementation is pending
+var ErrPending = fmt.Errorf("step implementation is pending")
+
+type suite struct {
+ steps []*models.StepDefinition
+
+ fmt Formatter
+ storage *storage.Storage
+
+ failed bool
+ randomSeed int64
+ stopOnFailure bool
+ strict bool
+
+ // suite event handlers
+ beforeScenarioHandlers []func(*Scenario)
+ beforeStepHandlers []func(*Step)
+ afterStepHandlers []func(*Step, error)
+ afterScenarioHandlers []func(*Scenario, error)
+}
+
+func (s *suite) matchStep(step *messages.Pickle_PickleStep) *models.StepDefinition {
+ def := s.matchStepText(step.Text)
+ if def != nil && step.Argument != nil {
+ def.Args = append(def.Args, step.Argument)
+ }
+ return def
+}
+
+func (s *suite) runStep(pickle *messages.Pickle, step *messages.Pickle_PickleStep, prevStepErr error) (err error) {
+ // run before step handlers
+ for _, f := range s.beforeStepHandlers {
+ f(step)
+ }
+
+ match := s.matchStep(step)
+ s.storage.MustInsertStepDefintionMatch(step.AstNodeIds[0], match)
+ s.fmt.Defined(pickle, step, match.GetInternalStepDefinition())
+
+ // user multistep definitions may panic
+ defer func() {
+ if e := recover(); e != nil {
+ err = &traceError{
+ msg: fmt.Sprintf("%v", e),
+ stack: callStack(),
+ }
+ }
+
+ if prevStepErr != nil {
+ return
+ }
+
+ if err == ErrUndefined {
+ return
+ }
+
+ sr := models.NewStepResult(pickle.Id, step.Id, match)
+
+ switch err {
+ case nil:
+ sr.Status = models.Passed
+ s.storage.MustInsertPickleStepResult(sr)
+
+ s.fmt.Passed(pickle, step, match.GetInternalStepDefinition())
+ case ErrPending:
+ sr.Status = models.Pending
+ s.storage.MustInsertPickleStepResult(sr)
+
+ s.fmt.Pending(pickle, step, match.GetInternalStepDefinition())
+ default:
+ sr.Status = models.Failed
+ sr.Err = err
+ s.storage.MustInsertPickleStepResult(sr)
+
+ s.fmt.Failed(pickle, step, match.GetInternalStepDefinition(), err)
+ }
+
+ // run after step handlers
+ for _, f := range s.afterStepHandlers {
+ f(step, err)
+ }
+ }()
+
+ if undef, err := s.maybeUndefined(step.Text, step.Argument); err != nil {
+ return err
+ } else if len(undef) > 0 {
+ if match != nil {
+ match = &models.StepDefinition{
+ StepDefinition: formatters.StepDefinition{
+ Expr: match.Expr,
+ Handler: match.Handler,
+ },
+ Args: match.Args,
+ HandlerValue: match.HandlerValue,
+ Nested: match.Nested,
+ Undefined: undef,
+ }
+ }
+
+ sr := models.NewStepResult(pickle.Id, step.Id, match)
+ sr.Status = models.Undefined
+ s.storage.MustInsertPickleStepResult(sr)
+
+ s.fmt.Undefined(pickle, step, match.GetInternalStepDefinition())
+ return ErrUndefined
+ }
+
+ if prevStepErr != nil {
+ sr := models.NewStepResult(pickle.Id, step.Id, match)
+ sr.Status = models.Skipped
+ s.storage.MustInsertPickleStepResult(sr)
+
+ s.fmt.Skipped(pickle, step, match.GetInternalStepDefinition())
+ return nil
+ }
+
+ err = s.maybeSubSteps(match.Run())
+ return
+}
+
+func (s *suite) maybeUndefined(text string, arg interface{}) ([]string, error) {
+ step := s.matchStepText(text)
+ if nil == step {
+ return []string{text}, nil
+ }
+
+ var undefined []string
+ if !step.Nested {
+ return undefined, nil
+ }
+
+ if arg != nil {
+ step.Args = append(step.Args, arg)
+ }
+
+ for _, next := range step.Run().(Steps) {
+ lines := strings.Split(next, "\n")
+ // @TODO: we cannot currently parse table or content body from nested steps
+ if len(lines) > 1 {
+ return undefined, fmt.Errorf("nested steps cannot be multiline and have table or content body argument")
+ }
+ if len(lines[0]) > 0 && lines[0][len(lines[0])-1] == ':' {
+ return undefined, fmt.Errorf("nested steps cannot be multiline and have table or content body argument")
+ }
+ undef, err := s.maybeUndefined(next, nil)
+ if err != nil {
+ return undefined, err
+ }
+ undefined = append(undefined, undef...)
+ }
+ return undefined, nil
+}
+
+func (s *suite) maybeSubSteps(result interface{}) error {
+ if nil == result {
+ return nil
+ }
+
+ if err, ok := result.(error); ok {
+ return err
+ }
+
+ steps, ok := result.(Steps)
+ if !ok {
+ return fmt.Errorf("unexpected error, should have been []string: %T - %+v", result, result)
+ }
+
+ for _, text := range steps {
+ if def := s.matchStepText(text); def == nil {
+ return ErrUndefined
+ } else if err := s.maybeSubSteps(def.Run()); err != nil {
+ return fmt.Errorf("%s: %+v", text, err)
+ }
+ }
+ return nil
+}
+
+func (s *suite) matchStepText(text string) *models.StepDefinition {
+ for _, h := range s.steps {
+ if m := h.Expr.FindStringSubmatch(text); len(m) > 0 {
+ var args []interface{}
+ for _, m := range m[1:] {
+ args = append(args, m)
+ }
+
+ // since we need to assign arguments
+ // better to copy the step definition
+ return &models.StepDefinition{
+ StepDefinition: formatters.StepDefinition{
+ Expr: h.Expr,
+ Handler: h.Handler,
+ },
+ Args: args,
+ HandlerValue: h.HandlerValue,
+ Nested: h.Nested,
+ }
+ }
+ }
+ return nil
+}
+
+func (s *suite) runSteps(pickle *messages.Pickle, steps []*messages.Pickle_PickleStep) (err error) {
+ for _, step := range steps {
+ stepErr := s.runStep(pickle, step, err)
+ switch stepErr {
+ case ErrUndefined:
+ // do not overwrite failed error
+ if err == ErrUndefined || err == nil {
+ err = stepErr
+ }
+ case ErrPending:
+ err = stepErr
+ case nil:
+ default:
+ err = stepErr
+ }
+ }
+ return
+}
+
+func (s *suite) shouldFail(err error) bool {
+ if err == nil {
+ return false
+ }
+
+ if err == ErrUndefined || err == ErrPending {
+ return s.strict
+ }
+
+ return true
+}
+
+func isEmptyFeature(pickles []*messages.Pickle) bool {
+ for _, pickle := range pickles {
+ if len(pickle.Steps) > 0 {
+ return false
+ }
+ }
+
+ return true
+}
+
+func (s *suite) runPickle(pickle *messages.Pickle) (err error) {
+ if len(pickle.Steps) == 0 {
+ pr := models.PickleResult{PickleID: pickle.Id, StartedAt: utils.TimeNowFunc()}
+ s.storage.MustInsertPickleResult(pr)
+
+ s.fmt.Pickle(pickle)
+ return ErrUndefined
+ }
+
+ // run before scenario handlers
+ for _, f := range s.beforeScenarioHandlers {
+ f(pickle)
+ }
+
+ pr := models.PickleResult{PickleID: pickle.Id, StartedAt: utils.TimeNowFunc()}
+ s.storage.MustInsertPickleResult(pr)
+
+ s.fmt.Pickle(pickle)
+
+ // scenario
+ err = s.runSteps(pickle, pickle.Steps)
+
+ // run after scenario handlers
+ for _, f := range s.afterScenarioHandlers {
+ f(pickle, err)
+ }
+
+ return
+}
diff --git a/vendor/github.com/cucumber/godog/test_context.go b/vendor/github.com/cucumber/godog/test_context.go
new file mode 100644
index 00000000..b7bb650b
--- /dev/null
+++ b/vendor/github.com/cucumber/godog/test_context.go
@@ -0,0 +1,223 @@
+package godog
+
+import (
+ "fmt"
+ "reflect"
+ "regexp"
+
+ "github.com/cucumber/messages-go/v10"
+
+ "github.com/cucumber/godog/formatters"
+ "github.com/cucumber/godog/internal/builder"
+ "github.com/cucumber/godog/internal/models"
+)
+
+// Scenario represents the executed scenario
+type Scenario = messages.Pickle
+
+// Step represents the executed step
+type Step = messages.Pickle_PickleStep
+
+// Steps allows to nest steps
+// instead of returning an error in step func
+// it is possible to return combined steps:
+//
+// func multistep(name string) godog.Steps {
+// return godog.Steps{
+// fmt.Sprintf(`an user named "%s"`, name),
+// fmt.Sprintf(`user "%s" is authenticated`, name),
+// }
+// }
+//
+// These steps will be matched and executed in
+// sequential order. The first one which fails
+// will result in main step failure.
+type Steps []string
+
+// StepDefinition is a registered step definition
+// contains a StepHandler and regexp which
+// is used to match a step. Args which
+// were matched by last executed step
+//
+// This structure is passed to the formatter
+// when step is matched and is either failed
+// or successful
+type StepDefinition = formatters.StepDefinition
+
+// DocString represents the DocString argument made to a step definition
+type DocString = messages.PickleStepArgument_PickleDocString
+
+// Table represents the Table argument made to a step definition
+type Table = messages.PickleStepArgument_PickleTable
+
+// TestSuiteContext allows various contexts
+// to register event handlers.
+//
+// When running a test suite, the instance of TestSuiteContext
+// is passed to all functions (contexts), which
+// have it as a first and only argument.
+//
+// Note that all event hooks does not catch panic errors
+// in order to have a trace information
+type TestSuiteContext struct {
+ beforeSuiteHandlers []func()
+ afterSuiteHandlers []func()
+}
+
+// BeforeSuite registers a function or method
+// to be run once before suite runner.
+//
+// Use it to prepare the test suite for a spin.
+// Connect and prepare database for instance...
+func (ctx *TestSuiteContext) BeforeSuite(fn func()) {
+ ctx.beforeSuiteHandlers = append(ctx.beforeSuiteHandlers, fn)
+}
+
+// AfterSuite registers a function or method
+// to be run once after suite runner
+func (ctx *TestSuiteContext) AfterSuite(fn func()) {
+ ctx.afterSuiteHandlers = append(ctx.afterSuiteHandlers, fn)
+}
+
+// ScenarioContext allows various contexts
+// to register steps and event handlers.
+//
+// When running a scenario, the instance of ScenarioContext
+// is passed to all functions (contexts), which
+// have it as a first and only argument.
+//
+// Note that all event hooks does not catch panic errors
+// in order to have a trace information. Only step
+// executions are catching panic error since it may
+// be a context specific error.
+type ScenarioContext struct {
+ suite *suite
+}
+
+// BeforeScenario registers a function or method
+// to be run before every scenario.
+//
+// It is a good practice to restore the default state
+// before every scenario so it would be isolated from
+// any kind of state.
+func (ctx *ScenarioContext) BeforeScenario(fn func(sc *Scenario)) {
+ ctx.suite.beforeScenarioHandlers = append(ctx.suite.beforeScenarioHandlers, fn)
+}
+
+// AfterScenario registers an function or method
+// to be run after every scenario.
+func (ctx *ScenarioContext) AfterScenario(fn func(sc *Scenario, err error)) {
+ ctx.suite.afterScenarioHandlers = append(ctx.suite.afterScenarioHandlers, fn)
+}
+
+// BeforeStep registers a function or method
+// to be run before every step.
+func (ctx *ScenarioContext) BeforeStep(fn func(st *Step)) {
+ ctx.suite.beforeStepHandlers = append(ctx.suite.beforeStepHandlers, fn)
+}
+
+// AfterStep registers an function or method
+// to be run after every step.
+//
+// It may be convenient to return a different kind of error
+// in order to print more state details which may help
+// in case of step failure
+//
+// In some cases, for example when running a headless
+// browser, to take a screenshot after failure.
+func (ctx *ScenarioContext) AfterStep(fn func(st *Step, err error)) {
+ ctx.suite.afterStepHandlers = append(ctx.suite.afterStepHandlers, fn)
+}
+
+// Step allows to register a *StepDefinition in the
+// Godog feature suite, the definition will be applied
+// to all steps matching the given Regexp expr.
+//
+// It will panic if expr is not a valid regular
+// expression or stepFunc is not a valid step
+// handler.
+//
+// The expression can be of type: *regexp.Regexp, string or []byte
+//
+// The stepFunc may accept one or several arguments of type:
+// - int, int8, int16, int32, int64
+// - float32, float64
+// - string
+// - []byte
+// - *godog.DocString
+// - *godog.Table
+//
+// The stepFunc need to return either an error or []string for multistep
+//
+// Note that if there are two definitions which may match
+// the same step, then only the first matched handler
+// will be applied.
+//
+// If none of the *StepDefinition is matched, then
+// ErrUndefined error will be returned when
+// running steps.
+func (ctx *ScenarioContext) Step(expr, stepFunc interface{}) {
+ var regex *regexp.Regexp
+
+ switch t := expr.(type) {
+ case *regexp.Regexp:
+ regex = t
+ case string:
+ regex = regexp.MustCompile(t)
+ case []byte:
+ regex = regexp.MustCompile(string(t))
+ default:
+ panic(fmt.Sprintf("expecting expr to be a *regexp.Regexp or a string, got type: %T", expr))
+ }
+
+ v := reflect.ValueOf(stepFunc)
+ typ := v.Type()
+ if typ.Kind() != reflect.Func {
+ panic(fmt.Sprintf("expected handler to be func, but got: %T", stepFunc))
+ }
+
+ if typ.NumOut() != 1 {
+ panic(fmt.Sprintf("expected handler to return only one value, but it has: %d", typ.NumOut()))
+ }
+
+ def := &models.StepDefinition{
+ StepDefinition: formatters.StepDefinition{
+ Handler: stepFunc,
+ Expr: regex,
+ },
+ HandlerValue: v,
+ }
+
+ typ = typ.Out(0)
+ switch typ.Kind() {
+ case reflect.Interface:
+ if !typ.Implements(errorInterface) {
+ panic(fmt.Sprintf("expected handler to return an error, but got: %s", typ.Kind()))
+ }
+ case reflect.Slice:
+ if typ.Elem().Kind() != reflect.String {
+ panic(fmt.Sprintf("expected handler to return []string for multistep, but got: []%s", typ.Kind()))
+ }
+ def.Nested = true
+ default:
+ panic(fmt.Sprintf("expected handler to return an error or []string, but got: %s", typ.Kind()))
+ }
+
+ ctx.suite.steps = append(ctx.suite.steps, def)
+}
+
+// Build creates a test package like go test command at given target path.
+// If there are no go files in tested directory, then
+// it simply builds a godog executable to scan features.
+//
+// If there are go test files, it first builds a test
+// package with standard go test command.
+//
+// Finally it generates godog suite executable which
+// registers exported godog contexts from the test files
+// of tested package.
+//
+// Returns the path to generated executable
+func Build(bin string) error {
+ return builder.Build(bin)
+}
diff --git a/vendor/github.com/cucumber/messages-go/v10/.gitignore b/vendor/github.com/cucumber/messages-go/v10/.gitignore
new file mode 100644
index 00000000..8d5dc492
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/.gitignore
@@ -0,0 +1,15 @@
+.built
+.compared
+.deps
+.dist
+.dist-compressed
+.go-get
+.gofmt
+.linted
+.tested*
+acceptance/
+bin/
+dist/
+dist_compressed/
+*.bin
+*.iml
diff --git a/vendor/github.com/cucumber/messages-go/v10/.rsync b/vendor/github.com/cucumber/messages-go/v10/.rsync
new file mode 100644
index 00000000..4e6e75d7
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/.rsync
@@ -0,0 +1,4 @@
+../../LICENSE LICENSE
+../../.templates/github/ .github/
+../../.templates/go/ .
+../messages.proto messages.proto
diff --git a/vendor/github.com/cucumber/messages-go/v10/.subrepo b/vendor/github.com/cucumber/messages-go/v10/.subrepo
new file mode 100644
index 00000000..5584a069
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/.subrepo
@@ -0,0 +1 @@
+cucumber/messages-go
diff --git a/vendor/github.com/cucumber/messages-go/v10/LICENSE b/vendor/github.com/cucumber/messages-go/v10/LICENSE
new file mode 100644
index 00000000..725ba9f4
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Cucumber Ltd
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/cucumber/messages-go/v10/Makefile b/vendor/github.com/cucumber/messages-go/v10/Makefile
new file mode 100644
index 00000000..6f66bde7
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/Makefile
@@ -0,0 +1,18 @@
+include default.mk
+
+GOGO_PROTOBUF_VERSION=v1.3.1
+
+.deps: messages.pb.go
+
+.go-get:
+ go get github.com/gogo/protobuf/protoc-gen-gogofaster@$(GOGO_PROTOBUF_VERSION)
+ touch $@
+
+messages.pb.go: messages.proto .go-get
+ protoc \
+ -I=. \
+ --gogofaster_out=Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types:. \
+ $<
+
+clean:
+ rm -f .go-get
diff --git a/vendor/github.com/cucumber/messages-go/v10/default.mk b/vendor/github.com/cucumber/messages-go/v10/default.mk
new file mode 100644
index 00000000..7383846d
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/default.mk
@@ -0,0 +1,123 @@
+SHELL := /usr/bin/env bash
+GOPATH := $(shell go env GOPATH)
+PATH := $(PATH):$(GOPATH)/bin
+GO_SOURCE_FILES := $(shell find . -name "*.go" | sort)
+LIBNAME := $(shell basename $$(dirname $$(pwd)))
+EXE_BASE_NAME := cucumber-$(LIBNAME)
+GOX_LDFLAGS := "-X main.version=${NEW_VERSION}"
+EXES := $(shell find dist -name '$(EXE_BASE_NAME)-*')
+UPX_EXES = $(patsubst dist/$(EXE_BASE_NAME)-%,dist_compressed/$(EXE_BASE_NAME)-%,$(EXES))
+# Determine if we're on linux or osx (ignoring other OSes as we're not building on them)
+OS := $(shell [[ "$$(uname)" == "Darwin" ]] && echo "darwin" || echo "linux")
+# Determine if we're on 386 or amd64 (ignoring other processors as we're not building on them)
+ARCH := $(shell [[ "$$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "386")
+EXE = dist/$(EXE_BASE_NAME)-$(OS)-$(ARCH)
+REPLACEMENTS := $(shell sed -n "/^\s*github.com\/cucumber/p" go.mod | perl -wpe 's/\s*(github.com\/cucumber\/(.*)-go\/v\d+).*/q{replace } . $$1 . q{ => ..\/..\/} . $$2 . q{\/go}/eg')
+CURRENT_MAJOR := $(shell sed -n "/^module/p" go.mod | awk '{ print $$0 "/v1" }' | cut -d'/' -f4 | cut -d'v' -f2)
+NEW_MAJOR := $(shell echo ${NEW_VERSION} | awk -F'.' '{print $$1}')
+
+default: .linted .tested
+.PHONY: default
+
+# Run the .dist target if there is a main file
+ifneq (,$(wildcard ./cmd/main.go))
+default: dist
+endif
+
+.deps:
+ touch $@
+
+dist: $(EXE)
+ifndef NO_UPX_COMPRESSION
+ make .dist-compressed
+endif
+ touch $@
+
+$(EXE): .deps $(GO_SOURCE_FILES)
+ mkdir -p dist
+ifndef NO_CROSS_COMPILE
+ # Cross-compile executable for many platforms
+ go get github.com/aslakhellesoy/gox
+ gox -buildmode=exe -ldflags $(GOX_LDFLAGS) -output "dist/$(EXE_BASE_NAME)-{{.OS}}-{{.Arch}}" -rebuild ./cmd
+else
+ # Compile executable for the local platform only
+ go build -ldflags $(GOX_LDFLAGS) -o $@ ./cmd
+endif
+
+.dist-compressed: $(UPX_EXES)
+ touch $@
+
+update-dependencies:
+ go get -u && go mod tidy
+.PHONY: update-dependencies
+
+pre-release: remove-replaces update-version update-dependencies clean default
+.PHONY: pre-release
+
+update-version: update-major
+ # no-op
+.PHONY: update-version
+
+ifneq (,$(wildcard ./cmd/main.go))
+publish: dist
+ifdef NEW_VERSION
+ ./scripts/github-release $(NEW_VERSION)
+else
+ @echo -e "\033[0;31mNEW_VERSION is not defined. Can't publish :-(\033[0m"
+ exit 1
+endif
+else
+publish:
+ # no-op
+endif
+.PHONY: publish
+
+dist_compressed/$(EXE_BASE_NAME)-%: dist/$(EXE_BASE_NAME)-%
+ mkdir -p dist_compressed
+ # requires upx in PATH to compress supported binaries
+ # may produce an error ARCH not supported
+ -upx $< -o $@
+
+ # Test the integrity
+ if [ -f "$@" ]; then upx -t $@ && cp $@ $< || rm $@; fi
+
+.linted: $(GO_SOURCE_FILES)
+ gofmt -w $^
+ touch $@
+
+.tested: .deps $(GO_SOURCE_FILES)
+ go test ./...
+ touch $@
+
+post-release: add-replaces
+.PHONY: post-release
+
+clean: clean-go
+.PHONY: clean
+
+clean-go:
+ rm -rf .deps .tested* .linted dist/ .dist-compressed dist_compressed/ acceptance/
+.PHONY: clean-go
+
+remove-replaces:
+ sed -i '/^replace/d' go.mod
+ sed -i 'N;/^\n$$/D;P;D;' go.mod
+.PHONY: remove-replaces
+
+add-replaces:
+ifeq ($(shell sed -n "/^\s*github.com\/cucumber/p" go.mod | wc -l), 0)
+ # No replacements here
+else
+ sed -i '/^go .*/i $(REPLACEMENTS)\n' go.mod
+endif
+.PHONY: add-replaces
+
+update-major:
+ifeq ($(CURRENT_MAJOR), $(NEW_MAJOR))
+ # echo "No major version change"
+else
+ echo "Updating major from $(CURRENT_MAJOR) to $(NEW_MAJOR)"
+ sed -Ei "s/$(LIBNAME)-go(\/v$(CURRENT_MAJOR))?/$(LIBNAME)-go\/v$(NEW_MAJOR)/" go.mod
+ sed -Ei "s/$(LIBNAME)-go(\/v$(CURRENT_MAJOR))?/$(LIBNAME)-go\/v$(NEW_MAJOR)/" $(shell find . -name "*.go")
+endif
+.PHONY: update-major
diff --git a/vendor/github.com/cucumber/messages-go/v10/go.mod b/vendor/github.com/cucumber/messages-go/v10/go.mod
new file mode 100644
index 00000000..6c5ff7f3
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/go.mod
@@ -0,0 +1,14 @@
+module github.com/cucumber/messages-go/v10
+
+require (
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/gofrs/uuid v3.2.0+incompatible
+ github.com/gogo/protobuf v1.3.1
+ github.com/kr/text v0.2.0 // indirect
+ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
+ github.com/stretchr/testify v1.5.1
+ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
+ gopkg.in/yaml.v2 v2.2.8 // indirect
+)
+
+go 1.13
diff --git a/vendor/github.com/cucumber/messages-go/v10/go.sum b/vendor/github.com/cucumber/messages-go/v10/go.sum
new file mode 100644
index 00000000..d4fed0e1
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/go.sum
@@ -0,0 +1,29 @@
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
+github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/vendor/github.com/cucumber/messages-go/v10/id_generator.go b/vendor/github.com/cucumber/messages-go/v10/id_generator.go
new file mode 100644
index 00000000..a721f978
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/id_generator.go
@@ -0,0 +1,28 @@
+package messages
+
+import (
+ "github.com/gofrs/uuid"
+ "strconv"
+)
+
+type IdGenerator interface {
+ newId() func() string
+}
+
+type Incrementing struct {
+ next int
+}
+
+func (self *Incrementing) NewId() string {
+ result := strconv.Itoa(self.next)
+ self.next++
+ return result
+}
+
+type UUID struct {
+ next int
+}
+
+func (i UUID) NewId() string {
+ return uuid.Must(uuid.NewV4()).String()
+}
diff --git a/vendor/github.com/cucumber/messages-go/v10/messages.pb.go b/vendor/github.com/cucumber/messages-go/v10/messages.pb.go
new file mode 100644
index 00000000..bad8fd18
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/messages.pb.go
@@ -0,0 +1,22789 @@
+// Code generated by protoc-gen-gogo. DO NOT EDIT.
+// source: messages.proto
+
+package messages
+
+import (
+ fmt "fmt"
+ proto "github.com/gogo/protobuf/proto"
+ io "io"
+ math "math"
+ math_bits "math/bits"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
+
+type SourcesOrderType int32
+
+const (
+ SourcesOrderType_ORDER_OF_DEFINITION SourcesOrderType = 0
+ SourcesOrderType_RANDOM SourcesOrderType = 1
+)
+
+var SourcesOrderType_name = map[int32]string{
+ 0: "ORDER_OF_DEFINITION",
+ 1: "RANDOM",
+}
+
+var SourcesOrderType_value = map[string]int32{
+ "ORDER_OF_DEFINITION": 0,
+ "RANDOM": 1,
+}
+
+func (x SourcesOrderType) String() string {
+ return proto.EnumName(SourcesOrderType_name, int32(x))
+}
+
+func (SourcesOrderType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{0}
+}
+
+type StepDefinitionPatternType int32
+
+const (
+ StepDefinitionPatternType_CUCUMBER_EXPRESSION StepDefinitionPatternType = 0
+ StepDefinitionPatternType_REGULAR_EXPRESSION StepDefinitionPatternType = 1
+)
+
+var StepDefinitionPatternType_name = map[int32]string{
+ 0: "CUCUMBER_EXPRESSION",
+ 1: "REGULAR_EXPRESSION",
+}
+
+var StepDefinitionPatternType_value = map[string]int32{
+ "CUCUMBER_EXPRESSION": 0,
+ "REGULAR_EXPRESSION": 1,
+}
+
+func (x StepDefinitionPatternType) String() string {
+ return proto.EnumName(StepDefinitionPatternType_name, int32(x))
+}
+
+func (StepDefinitionPatternType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{1}
+}
+
+//*
+// Status of a `TestStep`.
+//
+// The ordinal values of statuses are significant. The status of a TestCase
+// is computed by picking the status with the highest value for all of its steps.
+//
+// For example, if a TestCase has steps with statuses passed, undefined and skipped,
+// then the pickle's status is undefined.
+type TestStepResult_Status int32
+
+const (
+ // The step hasn't been matched or executed.
+ TestStepResult_UNKNOWN TestStepResult_Status = 0
+ // The step matched one step definition and passed execution.
+ TestStepResult_PASSED TestStepResult_Status = 1
+ // The step matched one step definition but was not executed because the
+ // previous step was not PASSED.
+ TestStepResult_SKIPPED TestStepResult_Status = 2
+ // The step matched one step definition and signalled pending during execution.
+ // This is the default behaviour of generated step definitions, which either
+ // throw a special PendingException, or return a special value indicating that it's
+ // pending. How to signal the pending status depends on the Cucumber implementation.
+ TestStepResult_PENDING TestStepResult_Status = 3
+ // The step matched no step definitions.
+ TestStepResult_UNDEFINED TestStepResult_Status = 4
+ // The step matched two or more step definitions.
+ TestStepResult_AMBIGUOUS TestStepResult_Status = 5
+ // The step matched one step definition and failed execution.
+ TestStepResult_FAILED TestStepResult_Status = 6
+)
+
+var TestStepResult_Status_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "PASSED",
+ 2: "SKIPPED",
+ 3: "PENDING",
+ 4: "UNDEFINED",
+ 5: "AMBIGUOUS",
+ 6: "FAILED",
+}
+
+var TestStepResult_Status_value = map[string]int32{
+ "UNKNOWN": 0,
+ "PASSED": 1,
+ "SKIPPED": 2,
+ "PENDING": 3,
+ "UNDEFINED": 4,
+ "AMBIGUOUS": 5,
+ "FAILED": 6,
+}
+
+func (x TestStepResult_Status) String() string {
+ return proto.EnumName(TestStepResult_Status_name, int32(x))
+}
+
+func (TestStepResult_Status) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{20, 0}
+}
+
+// From https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto
+type Timestamp struct {
+ // Represents seconds of UTC time since Unix epoch
+ // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
+ // 9999-12-31T23:59:59Z inclusive.
+ Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
+ // Non-negative fractions of a second at nanosecond resolution. Negative
+ // second values with fractions must still have non-negative nanos values
+ // that count forward in time. Must be from 0 to 999,999,999
+ // inclusive.
+ Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
+}
+
+func (m *Timestamp) Reset() { *m = Timestamp{} }
+func (m *Timestamp) String() string { return proto.CompactTextString(m) }
+func (*Timestamp) ProtoMessage() {}
+func (*Timestamp) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{0}
+}
+func (m *Timestamp) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Timestamp.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Timestamp) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Timestamp.Merge(m, src)
+}
+func (m *Timestamp) XXX_Size() int {
+ return m.Size()
+}
+func (m *Timestamp) XXX_DiscardUnknown() {
+ xxx_messageInfo_Timestamp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Timestamp proto.InternalMessageInfo
+
+func (m *Timestamp) GetSeconds() int64 {
+ if m != nil {
+ return m.Seconds
+ }
+ return 0
+}
+
+func (m *Timestamp) GetNanos() int32 {
+ if m != nil {
+ return m.Nanos
+ }
+ return 0
+}
+
+// The structure is pretty close of the Timestamp one. For clarity, a second type
+// of message is used.
+type Duration struct {
+ Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
+ // Non-negative fractions of a second at nanosecond resolution. Negative
+ // second values with fractions must still have non-negative nanos values
+ // that count forward in time. Must be from 0 to 999,999,999
+ // inclusive.
+ Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
+}
+
+func (m *Duration) Reset() { *m = Duration{} }
+func (m *Duration) String() string { return proto.CompactTextString(m) }
+func (*Duration) ProtoMessage() {}
+func (*Duration) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{1}
+}
+func (m *Duration) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Duration.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Duration) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Duration.Merge(m, src)
+}
+func (m *Duration) XXX_Size() int {
+ return m.Size()
+}
+func (m *Duration) XXX_DiscardUnknown() {
+ xxx_messageInfo_Duration.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Duration proto.InternalMessageInfo
+
+func (m *Duration) GetSeconds() int64 {
+ if m != nil {
+ return m.Seconds
+ }
+ return 0
+}
+
+func (m *Duration) GetNanos() int32 {
+ if m != nil {
+ return m.Nanos
+ }
+ return 0
+}
+
+//*
+// All the messages that are passed between different components/processes are Envelope
+// messages.
+type Envelope struct {
+ // Types that are valid to be assigned to Message:
+ // *Envelope_Source
+ // *Envelope_GherkinDocument
+ // *Envelope_Pickle
+ // *Envelope_Attachment
+ // *Envelope_TestCaseStarted
+ // *Envelope_TestStepStarted
+ // *Envelope_TestStepFinished
+ // *Envelope_TestCaseFinished
+ // *Envelope_PickleAccepted
+ // *Envelope_PickleRejected
+ // *Envelope_TestCasePrepared
+ // *Envelope_TestRunStarted
+ // *Envelope_TestRunFinished
+ // *Envelope_CommandStart
+ // *Envelope_CommandActionComplete
+ // *Envelope_CommandRunBeforeTestRunHooks
+ // *Envelope_CommandInitializeTestCase
+ // *Envelope_CommandRunBeforeTestCaseHook
+ // *Envelope_CommandRunTestStep
+ // *Envelope_CommandRunAfterTestCaseHook
+ // *Envelope_CommandRunAfterTestRunHooks
+ // *Envelope_CommandGenerateSnippet
+ // *Envelope_CommandError
+ // *Envelope_TestCase
+ // *Envelope_StepDefinition
+ // *Envelope_Hook
+ // *Envelope_ParameterType
+ // *Envelope_UndefinedParameterType
+ Message isEnvelope_Message `protobuf_oneof:"message"`
+}
+
+func (m *Envelope) Reset() { *m = Envelope{} }
+func (m *Envelope) String() string { return proto.CompactTextString(m) }
+func (*Envelope) ProtoMessage() {}
+func (*Envelope) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{2}
+}
+func (m *Envelope) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Envelope) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Envelope.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Envelope) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Envelope.Merge(m, src)
+}
+func (m *Envelope) XXX_Size() int {
+ return m.Size()
+}
+func (m *Envelope) XXX_DiscardUnknown() {
+ xxx_messageInfo_Envelope.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Envelope proto.InternalMessageInfo
+
+type isEnvelope_Message interface {
+ isEnvelope_Message()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type Envelope_Source struct {
+ Source *Source `protobuf:"bytes,1,opt,name=source,proto3,oneof" json:"source,omitempty"`
+}
+type Envelope_GherkinDocument struct {
+ GherkinDocument *GherkinDocument `protobuf:"bytes,2,opt,name=gherkin_document,json=gherkinDocument,proto3,oneof" json:"gherkin_document,omitempty"`
+}
+type Envelope_Pickle struct {
+ Pickle *Pickle `protobuf:"bytes,3,opt,name=pickle,proto3,oneof" json:"pickle,omitempty"`
+}
+type Envelope_Attachment struct {
+ Attachment *Attachment `protobuf:"bytes,4,opt,name=attachment,proto3,oneof" json:"attachment,omitempty"`
+}
+type Envelope_TestCaseStarted struct {
+ TestCaseStarted *TestCaseStarted `protobuf:"bytes,5,opt,name=test_case_started,json=testCaseStarted,proto3,oneof" json:"test_case_started,omitempty"`
+}
+type Envelope_TestStepStarted struct {
+ TestStepStarted *TestStepStarted `protobuf:"bytes,6,opt,name=test_step_started,json=testStepStarted,proto3,oneof" json:"test_step_started,omitempty"`
+}
+type Envelope_TestStepFinished struct {
+ TestStepFinished *TestStepFinished `protobuf:"bytes,7,opt,name=test_step_finished,json=testStepFinished,proto3,oneof" json:"test_step_finished,omitempty"`
+}
+type Envelope_TestCaseFinished struct {
+ TestCaseFinished *TestCaseFinished `protobuf:"bytes,8,opt,name=test_case_finished,json=testCaseFinished,proto3,oneof" json:"test_case_finished,omitempty"`
+}
+type Envelope_PickleAccepted struct {
+ PickleAccepted *PickleAccepted `protobuf:"bytes,9,opt,name=pickle_accepted,json=pickleAccepted,proto3,oneof" json:"pickle_accepted,omitempty"`
+}
+type Envelope_PickleRejected struct {
+ PickleRejected *PickleRejected `protobuf:"bytes,10,opt,name=pickle_rejected,json=pickleRejected,proto3,oneof" json:"pickle_rejected,omitempty"`
+}
+type Envelope_TestCasePrepared struct {
+ TestCasePrepared *TestCasePrepared `protobuf:"bytes,11,opt,name=test_case_prepared,json=testCasePrepared,proto3,oneof" json:"test_case_prepared,omitempty"`
+}
+type Envelope_TestRunStarted struct {
+ TestRunStarted *TestRunStarted `protobuf:"bytes,12,opt,name=test_run_started,json=testRunStarted,proto3,oneof" json:"test_run_started,omitempty"`
+}
+type Envelope_TestRunFinished struct {
+ TestRunFinished *TestRunFinished `protobuf:"bytes,13,opt,name=test_run_finished,json=testRunFinished,proto3,oneof" json:"test_run_finished,omitempty"`
+}
+type Envelope_CommandStart struct {
+ CommandStart *CommandStart `protobuf:"bytes,14,opt,name=command_start,json=commandStart,proto3,oneof" json:"command_start,omitempty"`
+}
+type Envelope_CommandActionComplete struct {
+ CommandActionComplete *CommandActionComplete `protobuf:"bytes,15,opt,name=command_action_complete,json=commandActionComplete,proto3,oneof" json:"command_action_complete,omitempty"`
+}
+type Envelope_CommandRunBeforeTestRunHooks struct {
+ CommandRunBeforeTestRunHooks *CommandRunBeforeTestRunHooks `protobuf:"bytes,16,opt,name=command_run_before_test_run_hooks,json=commandRunBeforeTestRunHooks,proto3,oneof" json:"command_run_before_test_run_hooks,omitempty"`
+}
+type Envelope_CommandInitializeTestCase struct {
+ CommandInitializeTestCase *CommandInitializeTestCase `protobuf:"bytes,17,opt,name=command_initialize_test_case,json=commandInitializeTestCase,proto3,oneof" json:"command_initialize_test_case,omitempty"`
+}
+type Envelope_CommandRunBeforeTestCaseHook struct {
+ CommandRunBeforeTestCaseHook *CommandRunBeforeTestCaseHook `protobuf:"bytes,18,opt,name=command_run_before_test_case_hook,json=commandRunBeforeTestCaseHook,proto3,oneof" json:"command_run_before_test_case_hook,omitempty"`
+}
+type Envelope_CommandRunTestStep struct {
+ CommandRunTestStep *CommandRunTestStep `protobuf:"bytes,19,opt,name=command_run_test_step,json=commandRunTestStep,proto3,oneof" json:"command_run_test_step,omitempty"`
+}
+type Envelope_CommandRunAfterTestCaseHook struct {
+ CommandRunAfterTestCaseHook *CommandRunAfterTestCaseHook `protobuf:"bytes,20,opt,name=command_run_after_test_case_hook,json=commandRunAfterTestCaseHook,proto3,oneof" json:"command_run_after_test_case_hook,omitempty"`
+}
+type Envelope_CommandRunAfterTestRunHooks struct {
+ CommandRunAfterTestRunHooks *CommandRunAfterTestRunHooks `protobuf:"bytes,21,opt,name=command_run_after_test_run_hooks,json=commandRunAfterTestRunHooks,proto3,oneof" json:"command_run_after_test_run_hooks,omitempty"`
+}
+type Envelope_CommandGenerateSnippet struct {
+ CommandGenerateSnippet *CommandGenerateSnippet `protobuf:"bytes,22,opt,name=command_generate_snippet,json=commandGenerateSnippet,proto3,oneof" json:"command_generate_snippet,omitempty"`
+}
+type Envelope_CommandError struct {
+ CommandError string `protobuf:"bytes,23,opt,name=command_error,json=commandError,proto3,oneof" json:"command_error,omitempty"`
+}
+type Envelope_TestCase struct {
+ TestCase *TestCase `protobuf:"bytes,24,opt,name=test_case,json=testCase,proto3,oneof" json:"test_case,omitempty"`
+}
+type Envelope_StepDefinition struct {
+ StepDefinition *StepDefinition `protobuf:"bytes,25,opt,name=step_definition,json=stepDefinition,proto3,oneof" json:"step_definition,omitempty"`
+}
+type Envelope_Hook struct {
+ Hook *Hook `protobuf:"bytes,26,opt,name=hook,proto3,oneof" json:"hook,omitempty"`
+}
+type Envelope_ParameterType struct {
+ ParameterType *ParameterType `protobuf:"bytes,27,opt,name=parameter_type,json=parameterType,proto3,oneof" json:"parameter_type,omitempty"`
+}
+type Envelope_UndefinedParameterType struct {
+ UndefinedParameterType *UndefinedParameterType `protobuf:"bytes,28,opt,name=undefined_parameter_type,json=undefinedParameterType,proto3,oneof" json:"undefined_parameter_type,omitempty"`
+}
+
+func (*Envelope_Source) isEnvelope_Message() {}
+func (*Envelope_GherkinDocument) isEnvelope_Message() {}
+func (*Envelope_Pickle) isEnvelope_Message() {}
+func (*Envelope_Attachment) isEnvelope_Message() {}
+func (*Envelope_TestCaseStarted) isEnvelope_Message() {}
+func (*Envelope_TestStepStarted) isEnvelope_Message() {}
+func (*Envelope_TestStepFinished) isEnvelope_Message() {}
+func (*Envelope_TestCaseFinished) isEnvelope_Message() {}
+func (*Envelope_PickleAccepted) isEnvelope_Message() {}
+func (*Envelope_PickleRejected) isEnvelope_Message() {}
+func (*Envelope_TestCasePrepared) isEnvelope_Message() {}
+func (*Envelope_TestRunStarted) isEnvelope_Message() {}
+func (*Envelope_TestRunFinished) isEnvelope_Message() {}
+func (*Envelope_CommandStart) isEnvelope_Message() {}
+func (*Envelope_CommandActionComplete) isEnvelope_Message() {}
+func (*Envelope_CommandRunBeforeTestRunHooks) isEnvelope_Message() {}
+func (*Envelope_CommandInitializeTestCase) isEnvelope_Message() {}
+func (*Envelope_CommandRunBeforeTestCaseHook) isEnvelope_Message() {}
+func (*Envelope_CommandRunTestStep) isEnvelope_Message() {}
+func (*Envelope_CommandRunAfterTestCaseHook) isEnvelope_Message() {}
+func (*Envelope_CommandRunAfterTestRunHooks) isEnvelope_Message() {}
+func (*Envelope_CommandGenerateSnippet) isEnvelope_Message() {}
+func (*Envelope_CommandError) isEnvelope_Message() {}
+func (*Envelope_TestCase) isEnvelope_Message() {}
+func (*Envelope_StepDefinition) isEnvelope_Message() {}
+func (*Envelope_Hook) isEnvelope_Message() {}
+func (*Envelope_ParameterType) isEnvelope_Message() {}
+func (*Envelope_UndefinedParameterType) isEnvelope_Message() {}
+
+func (m *Envelope) GetMessage() isEnvelope_Message {
+ if m != nil {
+ return m.Message
+ }
+ return nil
+}
+
+func (m *Envelope) GetSource() *Source {
+ if x, ok := m.GetMessage().(*Envelope_Source); ok {
+ return x.Source
+ }
+ return nil
+}
+
+func (m *Envelope) GetGherkinDocument() *GherkinDocument {
+ if x, ok := m.GetMessage().(*Envelope_GherkinDocument); ok {
+ return x.GherkinDocument
+ }
+ return nil
+}
+
+func (m *Envelope) GetPickle() *Pickle {
+ if x, ok := m.GetMessage().(*Envelope_Pickle); ok {
+ return x.Pickle
+ }
+ return nil
+}
+
+func (m *Envelope) GetAttachment() *Attachment {
+ if x, ok := m.GetMessage().(*Envelope_Attachment); ok {
+ return x.Attachment
+ }
+ return nil
+}
+
+func (m *Envelope) GetTestCaseStarted() *TestCaseStarted {
+ if x, ok := m.GetMessage().(*Envelope_TestCaseStarted); ok {
+ return x.TestCaseStarted
+ }
+ return nil
+}
+
+func (m *Envelope) GetTestStepStarted() *TestStepStarted {
+ if x, ok := m.GetMessage().(*Envelope_TestStepStarted); ok {
+ return x.TestStepStarted
+ }
+ return nil
+}
+
+func (m *Envelope) GetTestStepFinished() *TestStepFinished {
+ if x, ok := m.GetMessage().(*Envelope_TestStepFinished); ok {
+ return x.TestStepFinished
+ }
+ return nil
+}
+
+func (m *Envelope) GetTestCaseFinished() *TestCaseFinished {
+ if x, ok := m.GetMessage().(*Envelope_TestCaseFinished); ok {
+ return x.TestCaseFinished
+ }
+ return nil
+}
+
+func (m *Envelope) GetPickleAccepted() *PickleAccepted {
+ if x, ok := m.GetMessage().(*Envelope_PickleAccepted); ok {
+ return x.PickleAccepted
+ }
+ return nil
+}
+
+func (m *Envelope) GetPickleRejected() *PickleRejected {
+ if x, ok := m.GetMessage().(*Envelope_PickleRejected); ok {
+ return x.PickleRejected
+ }
+ return nil
+}
+
+func (m *Envelope) GetTestCasePrepared() *TestCasePrepared {
+ if x, ok := m.GetMessage().(*Envelope_TestCasePrepared); ok {
+ return x.TestCasePrepared
+ }
+ return nil
+}
+
+func (m *Envelope) GetTestRunStarted() *TestRunStarted {
+ if x, ok := m.GetMessage().(*Envelope_TestRunStarted); ok {
+ return x.TestRunStarted
+ }
+ return nil
+}
+
+func (m *Envelope) GetTestRunFinished() *TestRunFinished {
+ if x, ok := m.GetMessage().(*Envelope_TestRunFinished); ok {
+ return x.TestRunFinished
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandStart() *CommandStart {
+ if x, ok := m.GetMessage().(*Envelope_CommandStart); ok {
+ return x.CommandStart
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandActionComplete() *CommandActionComplete {
+ if x, ok := m.GetMessage().(*Envelope_CommandActionComplete); ok {
+ return x.CommandActionComplete
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandRunBeforeTestRunHooks() *CommandRunBeforeTestRunHooks {
+ if x, ok := m.GetMessage().(*Envelope_CommandRunBeforeTestRunHooks); ok {
+ return x.CommandRunBeforeTestRunHooks
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandInitializeTestCase() *CommandInitializeTestCase {
+ if x, ok := m.GetMessage().(*Envelope_CommandInitializeTestCase); ok {
+ return x.CommandInitializeTestCase
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandRunBeforeTestCaseHook() *CommandRunBeforeTestCaseHook {
+ if x, ok := m.GetMessage().(*Envelope_CommandRunBeforeTestCaseHook); ok {
+ return x.CommandRunBeforeTestCaseHook
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandRunTestStep() *CommandRunTestStep {
+ if x, ok := m.GetMessage().(*Envelope_CommandRunTestStep); ok {
+ return x.CommandRunTestStep
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandRunAfterTestCaseHook() *CommandRunAfterTestCaseHook {
+ if x, ok := m.GetMessage().(*Envelope_CommandRunAfterTestCaseHook); ok {
+ return x.CommandRunAfterTestCaseHook
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandRunAfterTestRunHooks() *CommandRunAfterTestRunHooks {
+ if x, ok := m.GetMessage().(*Envelope_CommandRunAfterTestRunHooks); ok {
+ return x.CommandRunAfterTestRunHooks
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandGenerateSnippet() *CommandGenerateSnippet {
+ if x, ok := m.GetMessage().(*Envelope_CommandGenerateSnippet); ok {
+ return x.CommandGenerateSnippet
+ }
+ return nil
+}
+
+func (m *Envelope) GetCommandError() string {
+ if x, ok := m.GetMessage().(*Envelope_CommandError); ok {
+ return x.CommandError
+ }
+ return ""
+}
+
+func (m *Envelope) GetTestCase() *TestCase {
+ if x, ok := m.GetMessage().(*Envelope_TestCase); ok {
+ return x.TestCase
+ }
+ return nil
+}
+
+func (m *Envelope) GetStepDefinition() *StepDefinition {
+ if x, ok := m.GetMessage().(*Envelope_StepDefinition); ok {
+ return x.StepDefinition
+ }
+ return nil
+}
+
+func (m *Envelope) GetHook() *Hook {
+ if x, ok := m.GetMessage().(*Envelope_Hook); ok {
+ return x.Hook
+ }
+ return nil
+}
+
+func (m *Envelope) GetParameterType() *ParameterType {
+ if x, ok := m.GetMessage().(*Envelope_ParameterType); ok {
+ return x.ParameterType
+ }
+ return nil
+}
+
+func (m *Envelope) GetUndefinedParameterType() *UndefinedParameterType {
+ if x, ok := m.GetMessage().(*Envelope_UndefinedParameterType); ok {
+ return x.UndefinedParameterType
+ }
+ return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Envelope) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*Envelope_Source)(nil),
+ (*Envelope_GherkinDocument)(nil),
+ (*Envelope_Pickle)(nil),
+ (*Envelope_Attachment)(nil),
+ (*Envelope_TestCaseStarted)(nil),
+ (*Envelope_TestStepStarted)(nil),
+ (*Envelope_TestStepFinished)(nil),
+ (*Envelope_TestCaseFinished)(nil),
+ (*Envelope_PickleAccepted)(nil),
+ (*Envelope_PickleRejected)(nil),
+ (*Envelope_TestCasePrepared)(nil),
+ (*Envelope_TestRunStarted)(nil),
+ (*Envelope_TestRunFinished)(nil),
+ (*Envelope_CommandStart)(nil),
+ (*Envelope_CommandActionComplete)(nil),
+ (*Envelope_CommandRunBeforeTestRunHooks)(nil),
+ (*Envelope_CommandInitializeTestCase)(nil),
+ (*Envelope_CommandRunBeforeTestCaseHook)(nil),
+ (*Envelope_CommandRunTestStep)(nil),
+ (*Envelope_CommandRunAfterTestCaseHook)(nil),
+ (*Envelope_CommandRunAfterTestRunHooks)(nil),
+ (*Envelope_CommandGenerateSnippet)(nil),
+ (*Envelope_CommandError)(nil),
+ (*Envelope_TestCase)(nil),
+ (*Envelope_StepDefinition)(nil),
+ (*Envelope_Hook)(nil),
+ (*Envelope_ParameterType)(nil),
+ (*Envelope_UndefinedParameterType)(nil),
+ }
+}
+
+//*
+// Points to a line and a column in a text file
+type Location struct {
+ Line uint32 `protobuf:"varint,1,opt,name=line,proto3" json:"line,omitempty"`
+ Column uint32 `protobuf:"varint,2,opt,name=column,proto3" json:"column,omitempty"`
+}
+
+func (m *Location) Reset() { *m = Location{} }
+func (m *Location) String() string { return proto.CompactTextString(m) }
+func (*Location) ProtoMessage() {}
+func (*Location) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{3}
+}
+func (m *Location) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Location.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Location) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Location.Merge(m, src)
+}
+func (m *Location) XXX_Size() int {
+ return m.Size()
+}
+func (m *Location) XXX_DiscardUnknown() {
+ xxx_messageInfo_Location.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Location proto.InternalMessageInfo
+
+func (m *Location) GetLine() uint32 {
+ if m != nil {
+ return m.Line
+ }
+ return 0
+}
+
+func (m *Location) GetColumn() uint32 {
+ if m != nil {
+ return m.Column
+ }
+ return 0
+}
+
+//*
+// Points to a [Source](#io.cucumber.messages.Source) identified by `uri` and a
+// [Location](#io.cucumber.messages.Location) within that file.
+type SourceReference struct {
+ Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+ Location *Location `protobuf:"bytes,2,opt,name=location,proto3" json:"location,omitempty"`
+}
+
+func (m *SourceReference) Reset() { *m = SourceReference{} }
+func (m *SourceReference) String() string { return proto.CompactTextString(m) }
+func (*SourceReference) ProtoMessage() {}
+func (*SourceReference) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{4}
+}
+func (m *SourceReference) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *SourceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_SourceReference.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *SourceReference) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SourceReference.Merge(m, src)
+}
+func (m *SourceReference) XXX_Size() int {
+ return m.Size()
+}
+func (m *SourceReference) XXX_DiscardUnknown() {
+ xxx_messageInfo_SourceReference.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SourceReference proto.InternalMessageInfo
+
+func (m *SourceReference) GetUri() string {
+ if m != nil {
+ return m.Uri
+ }
+ return ""
+}
+
+func (m *SourceReference) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+//*
+// A source file, typically a Gherkin document
+type Source struct {
+ //*
+ // The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
+ // of the source, typically a file path relative to the root directory
+ Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+ // The contents of the file
+ Data string `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+ // The media type of the file. Can be used to specify custom types, such as
+ // text/x.cucumber.gherkin+plain
+ MediaType string `protobuf:"bytes,4,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"`
+}
+
+func (m *Source) Reset() { *m = Source{} }
+func (m *Source) String() string { return proto.CompactTextString(m) }
+func (*Source) ProtoMessage() {}
+func (*Source) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{5}
+}
+func (m *Source) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Source) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Source.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Source) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Source.Merge(m, src)
+}
+func (m *Source) XXX_Size() int {
+ return m.Size()
+}
+func (m *Source) XXX_DiscardUnknown() {
+ xxx_messageInfo_Source.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Source proto.InternalMessageInfo
+
+func (m *Source) GetUri() string {
+ if m != nil {
+ return m.Uri
+ }
+ return ""
+}
+
+func (m *Source) GetData() string {
+ if m != nil {
+ return m.Data
+ }
+ return ""
+}
+
+func (m *Source) GetMediaType() string {
+ if m != nil {
+ return m.MediaType
+ }
+ return ""
+}
+
+//*
+// The [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) of a Gherkin document.
+// Cucumber implementations should *not* depend on `GherkinDocument` or any of its
+// children for execution - use [Pickle](#io.cucumber.messages.Pickle) instead.
+//
+// The only consumers of `GherkinDocument` should only be formatters that produce
+// "rich" output, resembling the original Gherkin document.
+type GherkinDocument struct {
+ //*
+ // The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
+ // of the source, typically a file path relative to the root directory
+ Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+ Feature *GherkinDocument_Feature `protobuf:"bytes,2,opt,name=feature,proto3" json:"feature,omitempty"`
+ // All the comments in the Gherkin document
+ Comments []*GherkinDocument_Comment `protobuf:"bytes,3,rep,name=comments,proto3" json:"comments,omitempty"`
+}
+
+func (m *GherkinDocument) Reset() { *m = GherkinDocument{} }
+func (m *GherkinDocument) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument) ProtoMessage() {}
+func (*GherkinDocument) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6}
+}
+func (m *GherkinDocument) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument.Merge(m, src)
+}
+func (m *GherkinDocument) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument proto.InternalMessageInfo
+
+func (m *GherkinDocument) GetUri() string {
+ if m != nil {
+ return m.Uri
+ }
+ return ""
+}
+
+func (m *GherkinDocument) GetFeature() *GherkinDocument_Feature {
+ if m != nil {
+ return m.Feature
+ }
+ return nil
+}
+
+func (m *GherkinDocument) GetComments() []*GherkinDocument_Comment {
+ if m != nil {
+ return m.Comments
+ }
+ return nil
+}
+
+//*
+// A comment in a Gherkin document
+type GherkinDocument_Comment struct {
+ // The location of the comment
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ // The text of the comment
+ Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"`
+}
+
+func (m *GherkinDocument_Comment) Reset() { *m = GherkinDocument_Comment{} }
+func (m *GherkinDocument_Comment) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Comment) ProtoMessage() {}
+func (*GherkinDocument_Comment) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 0}
+}
+func (m *GherkinDocument_Comment) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Comment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Comment.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Comment) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Comment.Merge(m, src)
+}
+func (m *GherkinDocument_Comment) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Comment) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Comment.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Comment proto.InternalMessageInfo
+
+func (m *GherkinDocument_Comment) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Comment) GetText() string {
+ if m != nil {
+ return m.Text
+ }
+ return ""
+}
+
+//*
+// The top level node in the AST
+type GherkinDocument_Feature struct {
+ // The location of the `Feature` keyword
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ // All the tags placed above the `Feature` keyword
+ Tags []*GherkinDocument_Feature_Tag `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty"`
+ // The [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code of the Gherkin document
+ Language string `protobuf:"bytes,3,opt,name=language,proto3" json:"language,omitempty"`
+ // The text of the `Feature` keyword (in the language specified by `language`)
+ Keyword string `protobuf:"bytes,4,opt,name=keyword,proto3" json:"keyword,omitempty"`
+ // The name of the feature (the text following the `keyword`)
+ Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
+ // The line(s) underneath the line with the `keyword` that are used as description
+ Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"`
+ // Zero or more children
+ Children []*GherkinDocument_Feature_FeatureChild `protobuf:"bytes,7,rep,name=children,proto3" json:"children,omitempty"`
+}
+
+func (m *GherkinDocument_Feature) Reset() { *m = GherkinDocument_Feature{} }
+func (m *GherkinDocument_Feature) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature) ProtoMessage() {}
+func (*GherkinDocument_Feature) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1}
+}
+func (m *GherkinDocument_Feature) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature.Merge(m, src)
+}
+func (m *GherkinDocument_Feature) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature) GetTags() []*GherkinDocument_Feature_Tag {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature) GetLanguage() string {
+ if m != nil {
+ return m.Language
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature) GetKeyword() string {
+ if m != nil {
+ return m.Keyword
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature) GetChildren() []*GherkinDocument_Feature_FeatureChild {
+ if m != nil {
+ return m.Children
+ }
+ return nil
+}
+
+//*
+// A tag
+type GherkinDocument_Feature_Tag struct {
+ // Location of the tag
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ // The name of the tag (including the leading `@`)
+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+ // Unique ID to be able to reference the Tag from PickleTag
+ Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_Tag) Reset() { *m = GherkinDocument_Feature_Tag{} }
+func (m *GherkinDocument_Feature_Tag) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_Tag) ProtoMessage() {}
+func (*GherkinDocument_Feature_Tag) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 0}
+}
+func (m *GherkinDocument_Feature_Tag) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_Tag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_Tag.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_Tag) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_Tag.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_Tag) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_Tag) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_Tag.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_Tag proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_Tag) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Tag) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Tag) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+//*
+// A child node of a `Feature` node
+type GherkinDocument_Feature_FeatureChild struct {
+ // Types that are valid to be assigned to Value:
+ // *GherkinDocument_Feature_FeatureChild_Rule_
+ // *GherkinDocument_Feature_FeatureChild_Background
+ // *GherkinDocument_Feature_FeatureChild_Scenario
+ Value isGherkinDocument_Feature_FeatureChild_Value `protobuf_oneof:"value"`
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) Reset() { *m = GherkinDocument_Feature_FeatureChild{} }
+func (m *GherkinDocument_Feature_FeatureChild) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_FeatureChild) ProtoMessage() {}
+func (*GherkinDocument_Feature_FeatureChild) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 1}
+}
+func (m *GherkinDocument_Feature_FeatureChild) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_FeatureChild) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_FeatureChild.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_FeatureChild) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_FeatureChild.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_FeatureChild) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_FeatureChild) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_FeatureChild.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_FeatureChild proto.InternalMessageInfo
+
+type isGherkinDocument_Feature_FeatureChild_Value interface {
+ isGherkinDocument_Feature_FeatureChild_Value()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type GherkinDocument_Feature_FeatureChild_Rule_ struct {
+ Rule *GherkinDocument_Feature_FeatureChild_Rule `protobuf:"bytes,1,opt,name=rule,proto3,oneof" json:"rule,omitempty"`
+}
+type GherkinDocument_Feature_FeatureChild_Background struct {
+ Background *GherkinDocument_Feature_Background `protobuf:"bytes,2,opt,name=background,proto3,oneof" json:"background,omitempty"`
+}
+type GherkinDocument_Feature_FeatureChild_Scenario struct {
+ Scenario *GherkinDocument_Feature_Scenario `protobuf:"bytes,3,opt,name=scenario,proto3,oneof" json:"scenario,omitempty"`
+}
+
+func (*GherkinDocument_Feature_FeatureChild_Rule_) isGherkinDocument_Feature_FeatureChild_Value() {}
+func (*GherkinDocument_Feature_FeatureChild_Background) isGherkinDocument_Feature_FeatureChild_Value() {
+}
+func (*GherkinDocument_Feature_FeatureChild_Scenario) isGherkinDocument_Feature_FeatureChild_Value() {}
+
+func (m *GherkinDocument_Feature_FeatureChild) GetValue() isGherkinDocument_Feature_FeatureChild_Value {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) GetRule() *GherkinDocument_Feature_FeatureChild_Rule {
+ if x, ok := m.GetValue().(*GherkinDocument_Feature_FeatureChild_Rule_); ok {
+ return x.Rule
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) GetBackground() *GherkinDocument_Feature_Background {
+ if x, ok := m.GetValue().(*GherkinDocument_Feature_FeatureChild_Background); ok {
+ return x.Background
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) GetScenario() *GherkinDocument_Feature_Scenario {
+ if x, ok := m.GetValue().(*GherkinDocument_Feature_FeatureChild_Scenario); ok {
+ return x.Scenario
+ }
+ return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*GherkinDocument_Feature_FeatureChild) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*GherkinDocument_Feature_FeatureChild_Rule_)(nil),
+ (*GherkinDocument_Feature_FeatureChild_Background)(nil),
+ (*GherkinDocument_Feature_FeatureChild_Scenario)(nil),
+ }
+}
+
+//*
+// A `Rule` node
+type GherkinDocument_Feature_FeatureChild_Rule struct {
+ // The location of the `Rule` keyword
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ Keyword string `protobuf:"bytes,2,opt,name=keyword,proto3" json:"keyword,omitempty"`
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+ Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+ Children []*GherkinDocument_Feature_FeatureChild_RuleChild `protobuf:"bytes,5,rep,name=children,proto3" json:"children,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) Reset() {
+ *m = GherkinDocument_Feature_FeatureChild_Rule{}
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_FeatureChild_Rule) ProtoMessage() {}
+func (*GherkinDocument_Feature_FeatureChild_Rule) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 1, 0}
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_FeatureChild_Rule.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_FeatureChild_Rule.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_FeatureChild_Rule.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_FeatureChild_Rule proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) GetKeyword() string {
+ if m != nil {
+ return m.Keyword
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) GetChildren() []*GherkinDocument_Feature_FeatureChild_RuleChild {
+ if m != nil {
+ return m.Children
+ }
+ return nil
+}
+
+type GherkinDocument_Feature_FeatureChild_RuleChild struct {
+ // Types that are valid to be assigned to Value:
+ // *GherkinDocument_Feature_FeatureChild_RuleChild_Background
+ // *GherkinDocument_Feature_FeatureChild_RuleChild_Scenario
+ Value isGherkinDocument_Feature_FeatureChild_RuleChild_Value `protobuf_oneof:"value"`
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) Reset() {
+ *m = GherkinDocument_Feature_FeatureChild_RuleChild{}
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) String() string {
+ return proto.CompactTextString(m)
+}
+func (*GherkinDocument_Feature_FeatureChild_RuleChild) ProtoMessage() {}
+func (*GherkinDocument_Feature_FeatureChild_RuleChild) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 1, 1}
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_FeatureChild_RuleChild.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_FeatureChild_RuleChild.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_FeatureChild_RuleChild.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_FeatureChild_RuleChild proto.InternalMessageInfo
+
+type isGherkinDocument_Feature_FeatureChild_RuleChild_Value interface {
+ isGherkinDocument_Feature_FeatureChild_RuleChild_Value()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type GherkinDocument_Feature_FeatureChild_RuleChild_Background struct {
+ Background *GherkinDocument_Feature_Background `protobuf:"bytes,1,opt,name=background,proto3,oneof" json:"background,omitempty"`
+}
+type GherkinDocument_Feature_FeatureChild_RuleChild_Scenario struct {
+ Scenario *GherkinDocument_Feature_Scenario `protobuf:"bytes,2,opt,name=scenario,proto3,oneof" json:"scenario,omitempty"`
+}
+
+func (*GherkinDocument_Feature_FeatureChild_RuleChild_Background) isGherkinDocument_Feature_FeatureChild_RuleChild_Value() {
+}
+func (*GherkinDocument_Feature_FeatureChild_RuleChild_Scenario) isGherkinDocument_Feature_FeatureChild_RuleChild_Value() {
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) GetValue() isGherkinDocument_Feature_FeatureChild_RuleChild_Value {
+ if m != nil {
+ return m.Value
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) GetBackground() *GherkinDocument_Feature_Background {
+ if x, ok := m.GetValue().(*GherkinDocument_Feature_FeatureChild_RuleChild_Background); ok {
+ return x.Background
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) GetScenario() *GherkinDocument_Feature_Scenario {
+ if x, ok := m.GetValue().(*GherkinDocument_Feature_FeatureChild_RuleChild_Scenario); ok {
+ return x.Scenario
+ }
+ return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*GherkinDocument_Feature_FeatureChild_RuleChild) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*GherkinDocument_Feature_FeatureChild_RuleChild_Background)(nil),
+ (*GherkinDocument_Feature_FeatureChild_RuleChild_Scenario)(nil),
+ }
+}
+
+type GherkinDocument_Feature_Background struct {
+ // The location of the `Background` keyword
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ Keyword string `protobuf:"bytes,2,opt,name=keyword,proto3" json:"keyword,omitempty"`
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+ Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+ Steps []*GherkinDocument_Feature_Step `protobuf:"bytes,5,rep,name=steps,proto3" json:"steps,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_Background) Reset() { *m = GherkinDocument_Feature_Background{} }
+func (m *GherkinDocument_Feature_Background) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_Background) ProtoMessage() {}
+func (*GherkinDocument_Feature_Background) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 2}
+}
+func (m *GherkinDocument_Feature_Background) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_Background) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_Background.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_Background) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_Background.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_Background) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_Background) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_Background.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_Background proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_Background) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Background) GetKeyword() string {
+ if m != nil {
+ return m.Keyword
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Background) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Background) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Background) GetSteps() []*GherkinDocument_Feature_Step {
+ if m != nil {
+ return m.Steps
+ }
+ return nil
+}
+
+type GherkinDocument_Feature_Scenario struct {
+ // The location of the `Scenario` keyword
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ Tags []*GherkinDocument_Feature_Tag `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty"`
+ Keyword string `protobuf:"bytes,3,opt,name=keyword,proto3" json:"keyword,omitempty"`
+ Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+ Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+ Steps []*GherkinDocument_Feature_Step `protobuf:"bytes,6,rep,name=steps,proto3" json:"steps,omitempty"`
+ Examples []*GherkinDocument_Feature_Scenario_Examples `protobuf:"bytes,7,rep,name=examples,proto3" json:"examples,omitempty"`
+ Id string `protobuf:"bytes,8,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_Scenario) Reset() { *m = GherkinDocument_Feature_Scenario{} }
+func (m *GherkinDocument_Feature_Scenario) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_Scenario) ProtoMessage() {}
+func (*GherkinDocument_Feature_Scenario) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 3}
+}
+func (m *GherkinDocument_Feature_Scenario) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_Scenario) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_Scenario.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_Scenario) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_Scenario.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_Scenario) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_Scenario) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_Scenario.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_Scenario proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_Scenario) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Scenario) GetTags() []*GherkinDocument_Feature_Tag {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Scenario) GetKeyword() string {
+ if m != nil {
+ return m.Keyword
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Scenario) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Scenario) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Scenario) GetSteps() []*GherkinDocument_Feature_Step {
+ if m != nil {
+ return m.Steps
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Scenario) GetExamples() []*GherkinDocument_Feature_Scenario_Examples {
+ if m != nil {
+ return m.Examples
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Scenario) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+type GherkinDocument_Feature_Scenario_Examples struct {
+ // The location of the `Examples` keyword
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ Tags []*GherkinDocument_Feature_Tag `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty"`
+ Keyword string `protobuf:"bytes,3,opt,name=keyword,proto3" json:"keyword,omitempty"`
+ Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+ Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+ TableHeader *GherkinDocument_Feature_TableRow `protobuf:"bytes,6,opt,name=table_header,json=tableHeader,proto3" json:"table_header,omitempty"`
+ TableBody []*GherkinDocument_Feature_TableRow `protobuf:"bytes,7,rep,name=table_body,json=tableBody,proto3" json:"table_body,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) Reset() {
+ *m = GherkinDocument_Feature_Scenario_Examples{}
+}
+func (m *GherkinDocument_Feature_Scenario_Examples) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_Scenario_Examples) ProtoMessage() {}
+func (*GherkinDocument_Feature_Scenario_Examples) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 3, 0}
+}
+func (m *GherkinDocument_Feature_Scenario_Examples) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_Scenario_Examples) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_Scenario_Examples.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_Scenario_Examples) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_Scenario_Examples.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_Scenario_Examples) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_Scenario_Examples) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_Scenario_Examples.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_Scenario_Examples proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_Scenario_Examples) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) GetTags() []*GherkinDocument_Feature_Tag {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) GetKeyword() string {
+ if m != nil {
+ return m.Keyword
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) GetTableHeader() *GherkinDocument_Feature_TableRow {
+ if m != nil {
+ return m.TableHeader
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) GetTableBody() []*GherkinDocument_Feature_TableRow {
+ if m != nil {
+ return m.TableBody
+ }
+ return nil
+}
+
+// A row in a table
+type GherkinDocument_Feature_TableRow struct {
+ // The location of the first cell in the row
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ // Cells in the row
+ Cells []*GherkinDocument_Feature_TableRow_TableCell `protobuf:"bytes,2,rep,name=cells,proto3" json:"cells,omitempty"`
+ Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_TableRow) Reset() { *m = GherkinDocument_Feature_TableRow{} }
+func (m *GherkinDocument_Feature_TableRow) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_TableRow) ProtoMessage() {}
+func (*GherkinDocument_Feature_TableRow) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 4}
+}
+func (m *GherkinDocument_Feature_TableRow) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_TableRow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_TableRow.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_TableRow) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_TableRow.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_TableRow) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_TableRow) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_TableRow.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_TableRow proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_TableRow) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_TableRow) GetCells() []*GherkinDocument_Feature_TableRow_TableCell {
+ if m != nil {
+ return m.Cells
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_TableRow) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+// A cell in a `TableRow`
+type GherkinDocument_Feature_TableRow_TableCell struct {
+ // The location of the cell
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ // The value of the cell
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_TableRow_TableCell) Reset() {
+ *m = GherkinDocument_Feature_TableRow_TableCell{}
+}
+func (m *GherkinDocument_Feature_TableRow_TableCell) String() string {
+ return proto.CompactTextString(m)
+}
+func (*GherkinDocument_Feature_TableRow_TableCell) ProtoMessage() {}
+func (*GherkinDocument_Feature_TableRow_TableCell) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 4, 0}
+}
+func (m *GherkinDocument_Feature_TableRow_TableCell) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_TableRow_TableCell) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_TableRow_TableCell.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_TableRow_TableCell) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_TableRow_TableCell.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_TableRow_TableCell) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_TableRow_TableCell) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_TableRow_TableCell.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_TableRow_TableCell proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_TableRow_TableCell) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_TableRow_TableCell) GetValue() string {
+ if m != nil {
+ return m.Value
+ }
+ return ""
+}
+
+// A step
+type GherkinDocument_Feature_Step struct {
+ // The location of the steps' `keyword`
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ Keyword string `protobuf:"bytes,2,opt,name=keyword,proto3" json:"keyword,omitempty"`
+ Text string `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"`
+ // Types that are valid to be assigned to Argument:
+ // *GherkinDocument_Feature_Step_DocString_
+ // *GherkinDocument_Feature_Step_DataTable_
+ Argument isGherkinDocument_Feature_Step_Argument `protobuf_oneof:"argument"`
+ // Unique ID to be able to reference the Step from PickleStep
+ Id string `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_Step) Reset() { *m = GherkinDocument_Feature_Step{} }
+func (m *GherkinDocument_Feature_Step) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_Step) ProtoMessage() {}
+func (*GherkinDocument_Feature_Step) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 5}
+}
+func (m *GherkinDocument_Feature_Step) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_Step) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_Step.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_Step) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_Step.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_Step) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_Step) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_Step.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_Step proto.InternalMessageInfo
+
+type isGherkinDocument_Feature_Step_Argument interface {
+ isGherkinDocument_Feature_Step_Argument()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type GherkinDocument_Feature_Step_DocString_ struct {
+ DocString *GherkinDocument_Feature_Step_DocString `protobuf:"bytes,5,opt,name=doc_string,json=docString,proto3,oneof" json:"doc_string,omitempty"`
+}
+type GherkinDocument_Feature_Step_DataTable_ struct {
+ DataTable *GherkinDocument_Feature_Step_DataTable `protobuf:"bytes,6,opt,name=data_table,json=dataTable,proto3,oneof" json:"data_table,omitempty"`
+}
+
+func (*GherkinDocument_Feature_Step_DocString_) isGherkinDocument_Feature_Step_Argument() {}
+func (*GherkinDocument_Feature_Step_DataTable_) isGherkinDocument_Feature_Step_Argument() {}
+
+func (m *GherkinDocument_Feature_Step) GetArgument() isGherkinDocument_Feature_Step_Argument {
+ if m != nil {
+ return m.Argument
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Step) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Step) GetKeyword() string {
+ if m != nil {
+ return m.Keyword
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Step) GetText() string {
+ if m != nil {
+ return m.Text
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Step) GetDocString() *GherkinDocument_Feature_Step_DocString {
+ if x, ok := m.GetArgument().(*GherkinDocument_Feature_Step_DocString_); ok {
+ return x.DocString
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Step) GetDataTable() *GherkinDocument_Feature_Step_DataTable {
+ if x, ok := m.GetArgument().(*GherkinDocument_Feature_Step_DataTable_); ok {
+ return x.DataTable
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Step) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*GherkinDocument_Feature_Step) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*GherkinDocument_Feature_Step_DocString_)(nil),
+ (*GherkinDocument_Feature_Step_DataTable_)(nil),
+ }
+}
+
+type GherkinDocument_Feature_Step_DataTable struct {
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ Rows []*GherkinDocument_Feature_TableRow `protobuf:"bytes,2,rep,name=rows,proto3" json:"rows,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_Step_DataTable) Reset() {
+ *m = GherkinDocument_Feature_Step_DataTable{}
+}
+func (m *GherkinDocument_Feature_Step_DataTable) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_Step_DataTable) ProtoMessage() {}
+func (*GherkinDocument_Feature_Step_DataTable) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 5, 0}
+}
+func (m *GherkinDocument_Feature_Step_DataTable) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_Step_DataTable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_Step_DataTable.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_Step_DataTable) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_Step_DataTable.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_Step_DataTable) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_Step_DataTable) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_Step_DataTable.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_Step_DataTable proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_Step_DataTable) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Step_DataTable) GetRows() []*GherkinDocument_Feature_TableRow {
+ if m != nil {
+ return m.Rows
+ }
+ return nil
+}
+
+type GherkinDocument_Feature_Step_DocString struct {
+ Location *Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
+ MediaType string `protobuf:"bytes,2,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"`
+ Content string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"`
+ Delimiter string `protobuf:"bytes,4,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) Reset() {
+ *m = GherkinDocument_Feature_Step_DocString{}
+}
+func (m *GherkinDocument_Feature_Step_DocString) String() string { return proto.CompactTextString(m) }
+func (*GherkinDocument_Feature_Step_DocString) ProtoMessage() {}
+func (*GherkinDocument_Feature_Step_DocString) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{6, 1, 5, 1}
+}
+func (m *GherkinDocument_Feature_Step_DocString) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GherkinDocument_Feature_Step_DocString) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GherkinDocument_Feature_Step_DocString.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GherkinDocument_Feature_Step_DocString) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GherkinDocument_Feature_Step_DocString.Merge(m, src)
+}
+func (m *GherkinDocument_Feature_Step_DocString) XXX_Size() int {
+ return m.Size()
+}
+func (m *GherkinDocument_Feature_Step_DocString) XXX_DiscardUnknown() {
+ xxx_messageInfo_GherkinDocument_Feature_Step_DocString.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GherkinDocument_Feature_Step_DocString proto.InternalMessageInfo
+
+func (m *GherkinDocument_Feature_Step_DocString) GetLocation() *Location {
+ if m != nil {
+ return m.Location
+ }
+ return nil
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) GetMediaType() string {
+ if m != nil {
+ return m.MediaType
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) GetContent() string {
+ if m != nil {
+ return m.Content
+ }
+ return ""
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) GetDelimiter() string {
+ if m != nil {
+ return m.Delimiter
+ }
+ return ""
+}
+
+//*
+// An attachment represents any kind of data associated with a line in a
+// [Source](#io.cucumber.messages.Source) file. It can be used for:
+//
+// * Syntax errors during parse time
+// * Screenshots captured and attached during execution
+// * Logs captured and attached during execution
+//
+// It is not to be used for runtime errors raised/thrown during execution. This
+// is captured in `TestResult`.
+type Attachment struct {
+ Source *SourceReference `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"`
+ TestStepId string `protobuf:"bytes,4,opt,name=test_step_id,json=testStepId,proto3" json:"test_step_id,omitempty"`
+ TestCaseStartedId string `protobuf:"bytes,5,opt,name=test_case_started_id,json=testCaseStartedId,proto3" json:"test_case_started_id,omitempty"`
+ // The body of the attachment
+ //
+ // Types that are valid to be assigned to Body:
+ // *Attachment_Text
+ // *Attachment_Binary
+ Body isAttachment_Body `protobuf_oneof:"body"`
+ //*
+ // The media type of the data. This can be any valid
+ // [IANA Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml)
+ // as well as Cucumber-specific media types such as `text/x.cucumber.gherkin+plain`
+ // and `text/x.cucumber.stacktrace+plain`
+ MediaType string `protobuf:"bytes,8,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"`
+}
+
+func (m *Attachment) Reset() { *m = Attachment{} }
+func (m *Attachment) String() string { return proto.CompactTextString(m) }
+func (*Attachment) ProtoMessage() {}
+func (*Attachment) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{7}
+}
+func (m *Attachment) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Attachment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Attachment.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Attachment) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Attachment.Merge(m, src)
+}
+func (m *Attachment) XXX_Size() int {
+ return m.Size()
+}
+func (m *Attachment) XXX_DiscardUnknown() {
+ xxx_messageInfo_Attachment.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Attachment proto.InternalMessageInfo
+
+type isAttachment_Body interface {
+ isAttachment_Body()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type Attachment_Text struct {
+ Text string `protobuf:"bytes,6,opt,name=text,proto3,oneof" json:"text,omitempty"`
+}
+type Attachment_Binary struct {
+ Binary []byte `protobuf:"bytes,7,opt,name=binary,proto3,oneof" json:"binary,omitempty"`
+}
+
+func (*Attachment_Text) isAttachment_Body() {}
+func (*Attachment_Binary) isAttachment_Body() {}
+
+func (m *Attachment) GetBody() isAttachment_Body {
+ if m != nil {
+ return m.Body
+ }
+ return nil
+}
+
+func (m *Attachment) GetSource() *SourceReference {
+ if m != nil {
+ return m.Source
+ }
+ return nil
+}
+
+func (m *Attachment) GetTestStepId() string {
+ if m != nil {
+ return m.TestStepId
+ }
+ return ""
+}
+
+func (m *Attachment) GetTestCaseStartedId() string {
+ if m != nil {
+ return m.TestCaseStartedId
+ }
+ return ""
+}
+
+func (m *Attachment) GetText() string {
+ if x, ok := m.GetBody().(*Attachment_Text); ok {
+ return x.Text
+ }
+ return ""
+}
+
+func (m *Attachment) GetBinary() []byte {
+ if x, ok := m.GetBody().(*Attachment_Binary); ok {
+ return x.Binary
+ }
+ return nil
+}
+
+func (m *Attachment) GetMediaType() string {
+ if m != nil {
+ return m.MediaType
+ }
+ return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Attachment) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*Attachment_Text)(nil),
+ (*Attachment_Binary)(nil),
+ }
+}
+
+//*
+// A `Pickle` represents a template for a `TestCase`. It is typically derived
+// from another format, such as [GherkinDocument](#io.cucumber.messages.GherkinDocument).
+// In the future a `Pickle` may be derived from other formats such as Markdown or
+// Excel files.
+//
+// By making `Pickle` the main data structure Cucumber uses for execution, the
+// implementation of Cucumber itself becomes simpler, as it doesn't have to deal
+// with the complex structure of a [GherkinDocument](#io.cucumber.messages.GherkinDocument).
+//
+// Each `PickleStep` of a `Pickle` is matched with a `StepDefinition` to create a `TestCase`
+type Pickle struct {
+ //*
+ // A unique id for the pickle. This is a [SHA1](https://en.wikipedia.org/wiki/SHA-1) hash
+ // from the source data and the `locations` of the pickle.
+ // This ID will change if source the file is modified.
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // The uri of the source file
+ Uri string `protobuf:"bytes,2,opt,name=uri,proto3" json:"uri,omitempty"`
+ // The name of the pickle
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+ // The language of the pickle
+ Language string `protobuf:"bytes,4,opt,name=language,proto3" json:"language,omitempty"`
+ // One or more steps
+ Steps []*Pickle_PickleStep `protobuf:"bytes,5,rep,name=steps,proto3" json:"steps,omitempty"`
+ //*
+ // One or more tags. If this pickle is constructed from a Gherkin document,
+ // It includes inherited tags from the `Feature` as well.
+ Tags []*Pickle_PickleTag `protobuf:"bytes,6,rep,name=tags,proto3" json:"tags,omitempty"`
+ //*
+ // Points to the AST node locations of the pickle. The last one represents the unique
+ // id of the pickle. A pickle constructed from `Examples` will have the first
+ // id originating from the `Scenario` AST node, and the second from the `TableRow` AST node.
+ AstNodeIds []string `protobuf:"bytes,7,rep,name=ast_node_ids,json=astNodeIds,proto3" json:"ast_node_ids,omitempty"`
+}
+
+func (m *Pickle) Reset() { *m = Pickle{} }
+func (m *Pickle) String() string { return proto.CompactTextString(m) }
+func (*Pickle) ProtoMessage() {}
+func (*Pickle) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{8}
+}
+func (m *Pickle) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Pickle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Pickle.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Pickle) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Pickle.Merge(m, src)
+}
+func (m *Pickle) XXX_Size() int {
+ return m.Size()
+}
+func (m *Pickle) XXX_DiscardUnknown() {
+ xxx_messageInfo_Pickle.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Pickle proto.InternalMessageInfo
+
+func (m *Pickle) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+func (m *Pickle) GetUri() string {
+ if m != nil {
+ return m.Uri
+ }
+ return ""
+}
+
+func (m *Pickle) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *Pickle) GetLanguage() string {
+ if m != nil {
+ return m.Language
+ }
+ return ""
+}
+
+func (m *Pickle) GetSteps() []*Pickle_PickleStep {
+ if m != nil {
+ return m.Steps
+ }
+ return nil
+}
+
+func (m *Pickle) GetTags() []*Pickle_PickleTag {
+ if m != nil {
+ return m.Tags
+ }
+ return nil
+}
+
+func (m *Pickle) GetAstNodeIds() []string {
+ if m != nil {
+ return m.AstNodeIds
+ }
+ return nil
+}
+
+//*
+// A tag
+type Pickle_PickleTag struct {
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // Points to the AST node this was created from
+ AstNodeId string `protobuf:"bytes,2,opt,name=ast_node_id,json=astNodeId,proto3" json:"ast_node_id,omitempty"`
+}
+
+func (m *Pickle_PickleTag) Reset() { *m = Pickle_PickleTag{} }
+func (m *Pickle_PickleTag) String() string { return proto.CompactTextString(m) }
+func (*Pickle_PickleTag) ProtoMessage() {}
+func (*Pickle_PickleTag) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{8, 0}
+}
+func (m *Pickle_PickleTag) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Pickle_PickleTag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Pickle_PickleTag.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Pickle_PickleTag) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Pickle_PickleTag.Merge(m, src)
+}
+func (m *Pickle_PickleTag) XXX_Size() int {
+ return m.Size()
+}
+func (m *Pickle_PickleTag) XXX_DiscardUnknown() {
+ xxx_messageInfo_Pickle_PickleTag.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Pickle_PickleTag proto.InternalMessageInfo
+
+func (m *Pickle_PickleTag) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *Pickle_PickleTag) GetAstNodeId() string {
+ if m != nil {
+ return m.AstNodeId
+ }
+ return ""
+}
+
+//*
+// An executable step
+type Pickle_PickleStep struct {
+ Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+ // An optional argument
+ Argument *PickleStepArgument `protobuf:"bytes,2,opt,name=argument,proto3" json:"argument,omitempty"`
+ // A unique ID for the PickleStep
+ Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+ // References the IDs of the source of the step. For Gherkin, this can be
+ // the ID of a Step, and possibly also the ID of a TableRow
+ AstNodeIds []string `protobuf:"bytes,4,rep,name=ast_node_ids,json=astNodeIds,proto3" json:"ast_node_ids,omitempty"`
+}
+
+func (m *Pickle_PickleStep) Reset() { *m = Pickle_PickleStep{} }
+func (m *Pickle_PickleStep) String() string { return proto.CompactTextString(m) }
+func (*Pickle_PickleStep) ProtoMessage() {}
+func (*Pickle_PickleStep) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{8, 1}
+}
+func (m *Pickle_PickleStep) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Pickle_PickleStep) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Pickle_PickleStep.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Pickle_PickleStep) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Pickle_PickleStep.Merge(m, src)
+}
+func (m *Pickle_PickleStep) XXX_Size() int {
+ return m.Size()
+}
+func (m *Pickle_PickleStep) XXX_DiscardUnknown() {
+ xxx_messageInfo_Pickle_PickleStep.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Pickle_PickleStep proto.InternalMessageInfo
+
+func (m *Pickle_PickleStep) GetText() string {
+ if m != nil {
+ return m.Text
+ }
+ return ""
+}
+
+func (m *Pickle_PickleStep) GetArgument() *PickleStepArgument {
+ if m != nil {
+ return m.Argument
+ }
+ return nil
+}
+
+func (m *Pickle_PickleStep) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+func (m *Pickle_PickleStep) GetAstNodeIds() []string {
+ if m != nil {
+ return m.AstNodeIds
+ }
+ return nil
+}
+
+//*
+// A wrapper for either a doc string or a table.
+type PickleStepArgument struct {
+ // Types that are valid to be assigned to Message:
+ // *PickleStepArgument_DocString
+ // *PickleStepArgument_DataTable
+ Message isPickleStepArgument_Message `protobuf_oneof:"message"`
+}
+
+func (m *PickleStepArgument) Reset() { *m = PickleStepArgument{} }
+func (m *PickleStepArgument) String() string { return proto.CompactTextString(m) }
+func (*PickleStepArgument) ProtoMessage() {}
+func (*PickleStepArgument) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{9}
+}
+func (m *PickleStepArgument) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PickleStepArgument) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PickleStepArgument.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PickleStepArgument) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PickleStepArgument.Merge(m, src)
+}
+func (m *PickleStepArgument) XXX_Size() int {
+ return m.Size()
+}
+func (m *PickleStepArgument) XXX_DiscardUnknown() {
+ xxx_messageInfo_PickleStepArgument.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PickleStepArgument proto.InternalMessageInfo
+
+type isPickleStepArgument_Message interface {
+ isPickleStepArgument_Message()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type PickleStepArgument_DocString struct {
+ DocString *PickleStepArgument_PickleDocString `protobuf:"bytes,1,opt,name=doc_string,json=docString,proto3,oneof" json:"doc_string,omitempty"`
+}
+type PickleStepArgument_DataTable struct {
+ DataTable *PickleStepArgument_PickleTable `protobuf:"bytes,2,opt,name=data_table,json=dataTable,proto3,oneof" json:"data_table,omitempty"`
+}
+
+func (*PickleStepArgument_DocString) isPickleStepArgument_Message() {}
+func (*PickleStepArgument_DataTable) isPickleStepArgument_Message() {}
+
+func (m *PickleStepArgument) GetMessage() isPickleStepArgument_Message {
+ if m != nil {
+ return m.Message
+ }
+ return nil
+}
+
+func (m *PickleStepArgument) GetDocString() *PickleStepArgument_PickleDocString {
+ if x, ok := m.GetMessage().(*PickleStepArgument_DocString); ok {
+ return x.DocString
+ }
+ return nil
+}
+
+func (m *PickleStepArgument) GetDataTable() *PickleStepArgument_PickleTable {
+ if x, ok := m.GetMessage().(*PickleStepArgument_DataTable); ok {
+ return x.DataTable
+ }
+ return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*PickleStepArgument) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*PickleStepArgument_DocString)(nil),
+ (*PickleStepArgument_DataTable)(nil),
+ }
+}
+
+type PickleStepArgument_PickleDocString struct {
+ MediaType string `protobuf:"bytes,1,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"`
+ Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"`
+}
+
+func (m *PickleStepArgument_PickleDocString) Reset() { *m = PickleStepArgument_PickleDocString{} }
+func (m *PickleStepArgument_PickleDocString) String() string { return proto.CompactTextString(m) }
+func (*PickleStepArgument_PickleDocString) ProtoMessage() {}
+func (*PickleStepArgument_PickleDocString) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{9, 0}
+}
+func (m *PickleStepArgument_PickleDocString) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PickleStepArgument_PickleDocString) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PickleStepArgument_PickleDocString.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PickleStepArgument_PickleDocString) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PickleStepArgument_PickleDocString.Merge(m, src)
+}
+func (m *PickleStepArgument_PickleDocString) XXX_Size() int {
+ return m.Size()
+}
+func (m *PickleStepArgument_PickleDocString) XXX_DiscardUnknown() {
+ xxx_messageInfo_PickleStepArgument_PickleDocString.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PickleStepArgument_PickleDocString proto.InternalMessageInfo
+
+func (m *PickleStepArgument_PickleDocString) GetMediaType() string {
+ if m != nil {
+ return m.MediaType
+ }
+ return ""
+}
+
+func (m *PickleStepArgument_PickleDocString) GetContent() string {
+ if m != nil {
+ return m.Content
+ }
+ return ""
+}
+
+type PickleStepArgument_PickleTable struct {
+ Rows []*PickleStepArgument_PickleTable_PickleTableRow `protobuf:"bytes,1,rep,name=rows,proto3" json:"rows,omitempty"`
+}
+
+func (m *PickleStepArgument_PickleTable) Reset() { *m = PickleStepArgument_PickleTable{} }
+func (m *PickleStepArgument_PickleTable) String() string { return proto.CompactTextString(m) }
+func (*PickleStepArgument_PickleTable) ProtoMessage() {}
+func (*PickleStepArgument_PickleTable) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{9, 1}
+}
+func (m *PickleStepArgument_PickleTable) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PickleStepArgument_PickleTable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PickleStepArgument_PickleTable.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PickleStepArgument_PickleTable) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PickleStepArgument_PickleTable.Merge(m, src)
+}
+func (m *PickleStepArgument_PickleTable) XXX_Size() int {
+ return m.Size()
+}
+func (m *PickleStepArgument_PickleTable) XXX_DiscardUnknown() {
+ xxx_messageInfo_PickleStepArgument_PickleTable.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PickleStepArgument_PickleTable proto.InternalMessageInfo
+
+func (m *PickleStepArgument_PickleTable) GetRows() []*PickleStepArgument_PickleTable_PickleTableRow {
+ if m != nil {
+ return m.Rows
+ }
+ return nil
+}
+
+type PickleStepArgument_PickleTable_PickleTableRow struct {
+ Cells []*PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell `protobuf:"bytes,1,rep,name=cells,proto3" json:"cells,omitempty"`
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow) Reset() {
+ *m = PickleStepArgument_PickleTable_PickleTableRow{}
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow) String() string {
+ return proto.CompactTextString(m)
+}
+func (*PickleStepArgument_PickleTable_PickleTableRow) ProtoMessage() {}
+func (*PickleStepArgument_PickleTable_PickleTableRow) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{9, 1, 0}
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow.Merge(m, src)
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow) XXX_Size() int {
+ return m.Size()
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow) XXX_DiscardUnknown() {
+ xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow proto.InternalMessageInfo
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow) GetCells() []*PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell {
+ if m != nil {
+ return m.Cells
+ }
+ return nil
+}
+
+type PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell struct {
+ Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) Reset() {
+ *m = PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell{}
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) String() string {
+ return proto.CompactTextString(m)
+}
+func (*PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) ProtoMessage() {}
+func (*PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{9, 1, 0, 0}
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell.Merge(m, src)
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) XXX_Size() int {
+ return m.Size()
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) XXX_DiscardUnknown() {
+ xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell proto.InternalMessageInfo
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) GetValue() string {
+ if m != nil {
+ return m.Value
+ }
+ return ""
+}
+
+//*
+// A `TestCase` contains a sequence of `TestStep`s.
+type TestCase struct {
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // The ID of the `Pickle` this `TestCase` is derived from.
+ PickleId string `protobuf:"bytes,2,opt,name=pickle_id,json=pickleId,proto3" json:"pickle_id,omitempty"`
+ TestSteps []*TestCase_TestStep `protobuf:"bytes,3,rep,name=test_steps,json=testSteps,proto3" json:"test_steps,omitempty"`
+}
+
+func (m *TestCase) Reset() { *m = TestCase{} }
+func (m *TestCase) String() string { return proto.CompactTextString(m) }
+func (*TestCase) ProtoMessage() {}
+func (*TestCase) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{10}
+}
+func (m *TestCase) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCase) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCase.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCase) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCase.Merge(m, src)
+}
+func (m *TestCase) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCase) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCase.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCase proto.InternalMessageInfo
+
+func (m *TestCase) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+func (m *TestCase) GetPickleId() string {
+ if m != nil {
+ return m.PickleId
+ }
+ return ""
+}
+
+func (m *TestCase) GetTestSteps() []*TestCase_TestStep {
+ if m != nil {
+ return m.TestSteps
+ }
+ return nil
+}
+
+//*
+// A `TestStep` is derived from either a `PickleStep`
+// combined with a `StepDefinition`, or from a `Hook`.
+type TestCase_TestStep struct {
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // Pointer to the `PickleStep` (if derived from a PickleStep)
+ PickleStepId string `protobuf:"bytes,2,opt,name=pickle_step_id,json=pickleStepId,proto3" json:"pickle_step_id,omitempty"`
+ // Pointer to all the matching `StepDefinition`s (if derived from a PickleStep)
+ StepDefinitionIds []string `protobuf:"bytes,3,rep,name=step_definition_ids,json=stepDefinitionIds,proto3" json:"step_definition_ids,omitempty"`
+ // A list of list of StepMatchArgument (if derived from a `StepDefinition`).
+ // Each element represents a matching step definition. A size of 0 means `UNDEFINED`,
+ // and a size of 2+ means `AMBIGUOUS`
+ StepMatchArgumentsLists []*TestCase_TestStep_StepMatchArgumentsList `protobuf:"bytes,4,rep,name=step_match_arguments_lists,json=stepMatchArgumentsLists,proto3" json:"step_match_arguments_lists,omitempty"`
+ // Pointer to the `Hook` (if derived from a Hook)
+ HookId string `protobuf:"bytes,5,opt,name=hook_id,json=hookId,proto3" json:"hook_id,omitempty"`
+}
+
+func (m *TestCase_TestStep) Reset() { *m = TestCase_TestStep{} }
+func (m *TestCase_TestStep) String() string { return proto.CompactTextString(m) }
+func (*TestCase_TestStep) ProtoMessage() {}
+func (*TestCase_TestStep) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{10, 0}
+}
+func (m *TestCase_TestStep) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCase_TestStep) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCase_TestStep.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCase_TestStep) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCase_TestStep.Merge(m, src)
+}
+func (m *TestCase_TestStep) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCase_TestStep) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCase_TestStep.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCase_TestStep proto.InternalMessageInfo
+
+func (m *TestCase_TestStep) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+func (m *TestCase_TestStep) GetPickleStepId() string {
+ if m != nil {
+ return m.PickleStepId
+ }
+ return ""
+}
+
+func (m *TestCase_TestStep) GetStepDefinitionIds() []string {
+ if m != nil {
+ return m.StepDefinitionIds
+ }
+ return nil
+}
+
+func (m *TestCase_TestStep) GetStepMatchArgumentsLists() []*TestCase_TestStep_StepMatchArgumentsList {
+ if m != nil {
+ return m.StepMatchArgumentsLists
+ }
+ return nil
+}
+
+func (m *TestCase_TestStep) GetHookId() string {
+ if m != nil {
+ return m.HookId
+ }
+ return ""
+}
+
+type TestCase_TestStep_StepMatchArgumentsList struct {
+ StepMatchArguments []*StepMatchArgument `protobuf:"bytes,1,rep,name=step_match_arguments,json=stepMatchArguments,proto3" json:"step_match_arguments,omitempty"`
+}
+
+func (m *TestCase_TestStep_StepMatchArgumentsList) Reset() {
+ *m = TestCase_TestStep_StepMatchArgumentsList{}
+}
+func (m *TestCase_TestStep_StepMatchArgumentsList) String() string { return proto.CompactTextString(m) }
+func (*TestCase_TestStep_StepMatchArgumentsList) ProtoMessage() {}
+func (*TestCase_TestStep_StepMatchArgumentsList) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{10, 0, 0}
+}
+func (m *TestCase_TestStep_StepMatchArgumentsList) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCase_TestStep_StepMatchArgumentsList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCase_TestStep_StepMatchArgumentsList.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCase_TestStep_StepMatchArgumentsList) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCase_TestStep_StepMatchArgumentsList.Merge(m, src)
+}
+func (m *TestCase_TestStep_StepMatchArgumentsList) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCase_TestStep_StepMatchArgumentsList) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCase_TestStep_StepMatchArgumentsList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCase_TestStep_StepMatchArgumentsList proto.InternalMessageInfo
+
+func (m *TestCase_TestStep_StepMatchArgumentsList) GetStepMatchArguments() []*StepMatchArgument {
+ if m != nil {
+ return m.StepMatchArguments
+ }
+ return nil
+}
+
+type PickleAccepted struct {
+ PickleId string `protobuf:"bytes,1,opt,name=pickle_id,json=pickleId,proto3" json:"pickle_id,omitempty"`
+}
+
+func (m *PickleAccepted) Reset() { *m = PickleAccepted{} }
+func (m *PickleAccepted) String() string { return proto.CompactTextString(m) }
+func (*PickleAccepted) ProtoMessage() {}
+func (*PickleAccepted) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{11}
+}
+func (m *PickleAccepted) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PickleAccepted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PickleAccepted.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PickleAccepted) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PickleAccepted.Merge(m, src)
+}
+func (m *PickleAccepted) XXX_Size() int {
+ return m.Size()
+}
+func (m *PickleAccepted) XXX_DiscardUnknown() {
+ xxx_messageInfo_PickleAccepted.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PickleAccepted proto.InternalMessageInfo
+
+func (m *PickleAccepted) GetPickleId() string {
+ if m != nil {
+ return m.PickleId
+ }
+ return ""
+}
+
+type PickleRejected struct {
+ PickleId string `protobuf:"bytes,2,opt,name=pickle_id,json=pickleId,proto3" json:"pickle_id,omitempty"`
+}
+
+func (m *PickleRejected) Reset() { *m = PickleRejected{} }
+func (m *PickleRejected) String() string { return proto.CompactTextString(m) }
+func (*PickleRejected) ProtoMessage() {}
+func (*PickleRejected) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{12}
+}
+func (m *PickleRejected) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PickleRejected) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PickleRejected.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PickleRejected) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PickleRejected.Merge(m, src)
+}
+func (m *PickleRejected) XXX_Size() int {
+ return m.Size()
+}
+func (m *PickleRejected) XXX_DiscardUnknown() {
+ xxx_messageInfo_PickleRejected.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PickleRejected proto.InternalMessageInfo
+
+func (m *PickleRejected) GetPickleId() string {
+ if m != nil {
+ return m.PickleId
+ }
+ return ""
+}
+
+type TestRunStarted struct {
+ Timestamp *Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+}
+
+func (m *TestRunStarted) Reset() { *m = TestRunStarted{} }
+func (m *TestRunStarted) String() string { return proto.CompactTextString(m) }
+func (*TestRunStarted) ProtoMessage() {}
+func (*TestRunStarted) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{13}
+}
+func (m *TestRunStarted) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestRunStarted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestRunStarted.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestRunStarted) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestRunStarted.Merge(m, src)
+}
+func (m *TestRunStarted) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestRunStarted) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestRunStarted.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestRunStarted proto.InternalMessageInfo
+
+func (m *TestRunStarted) GetTimestamp() *Timestamp {
+ if m != nil {
+ return m.Timestamp
+ }
+ return nil
+}
+
+// DEPRECATED. Use TestCase.TestStep
+type TestCasePreparedStep struct {
+ SourceLocation *SourceReference `protobuf:"bytes,1,opt,name=source_location,json=sourceLocation,proto3" json:"source_location,omitempty"`
+ ActionLocation *SourceReference `protobuf:"bytes,2,opt,name=action_location,json=actionLocation,proto3" json:"action_location,omitempty"`
+}
+
+func (m *TestCasePreparedStep) Reset() { *m = TestCasePreparedStep{} }
+func (m *TestCasePreparedStep) String() string { return proto.CompactTextString(m) }
+func (*TestCasePreparedStep) ProtoMessage() {}
+func (*TestCasePreparedStep) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{14}
+}
+func (m *TestCasePreparedStep) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCasePreparedStep) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCasePreparedStep.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCasePreparedStep) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCasePreparedStep.Merge(m, src)
+}
+func (m *TestCasePreparedStep) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCasePreparedStep) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCasePreparedStep.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCasePreparedStep proto.InternalMessageInfo
+
+func (m *TestCasePreparedStep) GetSourceLocation() *SourceReference {
+ if m != nil {
+ return m.SourceLocation
+ }
+ return nil
+}
+
+func (m *TestCasePreparedStep) GetActionLocation() *SourceReference {
+ if m != nil {
+ return m.ActionLocation
+ }
+ return nil
+}
+
+// DEPRECATED. Use TestCase
+type TestCasePrepared struct {
+ PickleId string `protobuf:"bytes,1,opt,name=pickle_id,json=pickleId,proto3" json:"pickle_id,omitempty"`
+ Steps []*TestCasePreparedStep `protobuf:"bytes,2,rep,name=steps,proto3" json:"steps,omitempty"`
+}
+
+func (m *TestCasePrepared) Reset() { *m = TestCasePrepared{} }
+func (m *TestCasePrepared) String() string { return proto.CompactTextString(m) }
+func (*TestCasePrepared) ProtoMessage() {}
+func (*TestCasePrepared) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{15}
+}
+func (m *TestCasePrepared) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCasePrepared) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCasePrepared.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCasePrepared) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCasePrepared.Merge(m, src)
+}
+func (m *TestCasePrepared) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCasePrepared) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCasePrepared.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCasePrepared proto.InternalMessageInfo
+
+func (m *TestCasePrepared) GetPickleId() string {
+ if m != nil {
+ return m.PickleId
+ }
+ return ""
+}
+
+func (m *TestCasePrepared) GetSteps() []*TestCasePreparedStep {
+ if m != nil {
+ return m.Steps
+ }
+ return nil
+}
+
+type TestCaseStarted struct {
+ Timestamp *Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ Platform *TestCaseStarted_Platform `protobuf:"bytes,2,opt,name=platform,proto3" json:"platform,omitempty"`
+ //*
+ // The first attempt should have value 0, and for each retry the value
+ // should increase by 1.
+ Attempt uint32 `protobuf:"varint,3,opt,name=attempt,proto3" json:"attempt,omitempty"`
+ TestCaseId string `protobuf:"bytes,4,opt,name=test_case_id,json=testCaseId,proto3" json:"test_case_id,omitempty"`
+ //*
+ // Because a `TestCase` can be run multiple times (in case of a retry),
+ // we use this field to group messages relating to the same attempt.
+ Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (m *TestCaseStarted) Reset() { *m = TestCaseStarted{} }
+func (m *TestCaseStarted) String() string { return proto.CompactTextString(m) }
+func (*TestCaseStarted) ProtoMessage() {}
+func (*TestCaseStarted) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{16}
+}
+func (m *TestCaseStarted) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCaseStarted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCaseStarted.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCaseStarted) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCaseStarted.Merge(m, src)
+}
+func (m *TestCaseStarted) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCaseStarted) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCaseStarted.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCaseStarted proto.InternalMessageInfo
+
+func (m *TestCaseStarted) GetTimestamp() *Timestamp {
+ if m != nil {
+ return m.Timestamp
+ }
+ return nil
+}
+
+func (m *TestCaseStarted) GetPlatform() *TestCaseStarted_Platform {
+ if m != nil {
+ return m.Platform
+ }
+ return nil
+}
+
+func (m *TestCaseStarted) GetAttempt() uint32 {
+ if m != nil {
+ return m.Attempt
+ }
+ return 0
+}
+
+func (m *TestCaseStarted) GetTestCaseId() string {
+ if m != nil {
+ return m.TestCaseId
+ }
+ return ""
+}
+
+func (m *TestCaseStarted) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+type TestCaseStarted_Platform struct {
+ // The runner implementation. For example "SpecFlow", "Cucumber-JVM", "Behat" etc.
+ Implementation string `protobuf:"bytes,1,opt,name=implementation,proto3" json:"implementation,omitempty"`
+ // The version of the runner
+ Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
+ // The operating system
+ Os string `protobuf:"bytes,3,opt,name=os,proto3" json:"os,omitempty"`
+ // The CPU architecture
+ Cpu string `protobuf:"bytes,4,opt,name=cpu,proto3" json:"cpu,omitempty"`
+}
+
+func (m *TestCaseStarted_Platform) Reset() { *m = TestCaseStarted_Platform{} }
+func (m *TestCaseStarted_Platform) String() string { return proto.CompactTextString(m) }
+func (*TestCaseStarted_Platform) ProtoMessage() {}
+func (*TestCaseStarted_Platform) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{16, 0}
+}
+func (m *TestCaseStarted_Platform) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCaseStarted_Platform) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCaseStarted_Platform.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCaseStarted_Platform) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCaseStarted_Platform.Merge(m, src)
+}
+func (m *TestCaseStarted_Platform) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCaseStarted_Platform) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCaseStarted_Platform.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCaseStarted_Platform proto.InternalMessageInfo
+
+func (m *TestCaseStarted_Platform) GetImplementation() string {
+ if m != nil {
+ return m.Implementation
+ }
+ return ""
+}
+
+func (m *TestCaseStarted_Platform) GetVersion() string {
+ if m != nil {
+ return m.Version
+ }
+ return ""
+}
+
+func (m *TestCaseStarted_Platform) GetOs() string {
+ if m != nil {
+ return m.Os
+ }
+ return ""
+}
+
+func (m *TestCaseStarted_Platform) GetCpu() string {
+ if m != nil {
+ return m.Cpu
+ }
+ return ""
+}
+
+type TestCaseFinished struct {
+ Timestamp *Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ TestCaseStartedId string `protobuf:"bytes,3,opt,name=test_case_started_id,json=testCaseStartedId,proto3" json:"test_case_started_id,omitempty"`
+}
+
+func (m *TestCaseFinished) Reset() { *m = TestCaseFinished{} }
+func (m *TestCaseFinished) String() string { return proto.CompactTextString(m) }
+func (*TestCaseFinished) ProtoMessage() {}
+func (*TestCaseFinished) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{17}
+}
+func (m *TestCaseFinished) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestCaseFinished) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestCaseFinished.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestCaseFinished) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestCaseFinished.Merge(m, src)
+}
+func (m *TestCaseFinished) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestCaseFinished) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestCaseFinished.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestCaseFinished proto.InternalMessageInfo
+
+func (m *TestCaseFinished) GetTimestamp() *Timestamp {
+ if m != nil {
+ return m.Timestamp
+ }
+ return nil
+}
+
+func (m *TestCaseFinished) GetTestCaseStartedId() string {
+ if m != nil {
+ return m.TestCaseStartedId
+ }
+ return ""
+}
+
+type TestStepStarted struct {
+ Timestamp *Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ TestStepId string `protobuf:"bytes,2,opt,name=test_step_id,json=testStepId,proto3" json:"test_step_id,omitempty"`
+ TestCaseStartedId string `protobuf:"bytes,3,opt,name=test_case_started_id,json=testCaseStartedId,proto3" json:"test_case_started_id,omitempty"`
+}
+
+func (m *TestStepStarted) Reset() { *m = TestStepStarted{} }
+func (m *TestStepStarted) String() string { return proto.CompactTextString(m) }
+func (*TestStepStarted) ProtoMessage() {}
+func (*TestStepStarted) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{18}
+}
+func (m *TestStepStarted) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestStepStarted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestStepStarted.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestStepStarted) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestStepStarted.Merge(m, src)
+}
+func (m *TestStepStarted) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestStepStarted) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestStepStarted.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestStepStarted proto.InternalMessageInfo
+
+func (m *TestStepStarted) GetTimestamp() *Timestamp {
+ if m != nil {
+ return m.Timestamp
+ }
+ return nil
+}
+
+func (m *TestStepStarted) GetTestStepId() string {
+ if m != nil {
+ return m.TestStepId
+ }
+ return ""
+}
+
+func (m *TestStepStarted) GetTestCaseStartedId() string {
+ if m != nil {
+ return m.TestCaseStartedId
+ }
+ return ""
+}
+
+type TestStepFinished struct {
+ TestStepResult *TestStepResult `protobuf:"bytes,1,opt,name=test_step_result,json=testStepResult,proto3" json:"test_step_result,omitempty"`
+ Timestamp *Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ TestStepId string `protobuf:"bytes,3,opt,name=test_step_id,json=testStepId,proto3" json:"test_step_id,omitempty"`
+ TestCaseStartedId string `protobuf:"bytes,4,opt,name=test_case_started_id,json=testCaseStartedId,proto3" json:"test_case_started_id,omitempty"`
+}
+
+func (m *TestStepFinished) Reset() { *m = TestStepFinished{} }
+func (m *TestStepFinished) String() string { return proto.CompactTextString(m) }
+func (*TestStepFinished) ProtoMessage() {}
+func (*TestStepFinished) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{19}
+}
+func (m *TestStepFinished) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestStepFinished) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestStepFinished.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestStepFinished) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestStepFinished.Merge(m, src)
+}
+func (m *TestStepFinished) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestStepFinished) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestStepFinished.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestStepFinished proto.InternalMessageInfo
+
+func (m *TestStepFinished) GetTestStepResult() *TestStepResult {
+ if m != nil {
+ return m.TestStepResult
+ }
+ return nil
+}
+
+func (m *TestStepFinished) GetTimestamp() *Timestamp {
+ if m != nil {
+ return m.Timestamp
+ }
+ return nil
+}
+
+func (m *TestStepFinished) GetTestStepId() string {
+ if m != nil {
+ return m.TestStepId
+ }
+ return ""
+}
+
+func (m *TestStepFinished) GetTestCaseStartedId() string {
+ if m != nil {
+ return m.TestCaseStartedId
+ }
+ return ""
+}
+
+type TestStepResult struct {
+ Status TestStepResult_Status `protobuf:"varint,1,opt,name=status,proto3,enum=io.cucumber.messages.TestStepResult_Status" json:"status,omitempty"`
+ Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
+ Duration *Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"`
+ WillBeRetried bool `protobuf:"varint,4,opt,name=will_be_retried,json=willBeRetried,proto3" json:"will_be_retried,omitempty"`
+}
+
+func (m *TestStepResult) Reset() { *m = TestStepResult{} }
+func (m *TestStepResult) String() string { return proto.CompactTextString(m) }
+func (*TestStepResult) ProtoMessage() {}
+func (*TestStepResult) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{20}
+}
+func (m *TestStepResult) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestStepResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestStepResult.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestStepResult) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestStepResult.Merge(m, src)
+}
+func (m *TestStepResult) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestStepResult) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestStepResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestStepResult proto.InternalMessageInfo
+
+func (m *TestStepResult) GetStatus() TestStepResult_Status {
+ if m != nil {
+ return m.Status
+ }
+ return TestStepResult_UNKNOWN
+}
+
+func (m *TestStepResult) GetMessage() string {
+ if m != nil {
+ return m.Message
+ }
+ return ""
+}
+
+func (m *TestStepResult) GetDuration() *Duration {
+ if m != nil {
+ return m.Duration
+ }
+ return nil
+}
+
+func (m *TestStepResult) GetWillBeRetried() bool {
+ if m != nil {
+ return m.WillBeRetried
+ }
+ return false
+}
+
+type TestRunFinished struct {
+ // success = StrictModeEnabled ? (failed_count == 0 && ambiguous_count == 0 && undefined_count == 0 && pending_count == 0) : (failed_count == 0 && ambiguous_count == 0)
+ Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
+ // Timestamp when the TestRun is finished
+ Timestamp *Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ // Error message. Can be a stack trace from a failed `BeforeAll` or `AfterAll`.
+ // If there are undefined parameter types, the message is simply
+ // "The following parameter type(s() are not defined: xxx, yyy".
+ // The independent `UndefinedParameterType` messages can be used to generate
+ // snippets for those parameter types.
+ Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"`
+}
+
+func (m *TestRunFinished) Reset() { *m = TestRunFinished{} }
+func (m *TestRunFinished) String() string { return proto.CompactTextString(m) }
+func (*TestRunFinished) ProtoMessage() {}
+func (*TestRunFinished) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{21}
+}
+func (m *TestRunFinished) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TestRunFinished) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TestRunFinished.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TestRunFinished) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TestRunFinished.Merge(m, src)
+}
+func (m *TestRunFinished) XXX_Size() int {
+ return m.Size()
+}
+func (m *TestRunFinished) XXX_DiscardUnknown() {
+ xxx_messageInfo_TestRunFinished.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestRunFinished proto.InternalMessageInfo
+
+func (m *TestRunFinished) GetSuccess() bool {
+ if m != nil {
+ return m.Success
+ }
+ return false
+}
+
+func (m *TestRunFinished) GetTimestamp() *Timestamp {
+ if m != nil {
+ return m.Timestamp
+ }
+ return nil
+}
+
+func (m *TestRunFinished) GetMessage() string {
+ if m != nil {
+ return m.Message
+ }
+ return ""
+}
+
+type CommandStart struct {
+ BaseDirectory string `protobuf:"bytes,2,opt,name=base_directory,json=baseDirectory,proto3" json:"base_directory,omitempty"`
+ SourcesConfig *SourcesConfig `protobuf:"bytes,3,opt,name=sources_config,json=sourcesConfig,proto3" json:"sources_config,omitempty"`
+ RuntimeConfig *RuntimeConfig `protobuf:"bytes,4,opt,name=runtime_config,json=runtimeConfig,proto3" json:"runtime_config,omitempty"`
+ SupportCodeConfig *SupportCodeConfig `protobuf:"bytes,5,opt,name=support_code_config,json=supportCodeConfig,proto3" json:"support_code_config,omitempty"`
+}
+
+func (m *CommandStart) Reset() { *m = CommandStart{} }
+func (m *CommandStart) String() string { return proto.CompactTextString(m) }
+func (*CommandStart) ProtoMessage() {}
+func (*CommandStart) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{22}
+}
+func (m *CommandStart) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandStart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandStart.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandStart) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandStart.Merge(m, src)
+}
+func (m *CommandStart) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandStart) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandStart.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandStart proto.InternalMessageInfo
+
+func (m *CommandStart) GetBaseDirectory() string {
+ if m != nil {
+ return m.BaseDirectory
+ }
+ return ""
+}
+
+func (m *CommandStart) GetSourcesConfig() *SourcesConfig {
+ if m != nil {
+ return m.SourcesConfig
+ }
+ return nil
+}
+
+func (m *CommandStart) GetRuntimeConfig() *RuntimeConfig {
+ if m != nil {
+ return m.RuntimeConfig
+ }
+ return nil
+}
+
+func (m *CommandStart) GetSupportCodeConfig() *SupportCodeConfig {
+ if m != nil {
+ return m.SupportCodeConfig
+ }
+ return nil
+}
+
+type SourcesConfig struct {
+ AbsolutePaths []string `protobuf:"bytes,1,rep,name=absolute_paths,json=absolutePaths,proto3" json:"absolute_paths,omitempty"`
+ Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"`
+ Filters *SourcesFilterConfig `protobuf:"bytes,3,opt,name=filters,proto3" json:"filters,omitempty"`
+ Order *SourcesOrder `protobuf:"bytes,4,opt,name=order,proto3" json:"order,omitempty"`
+}
+
+func (m *SourcesConfig) Reset() { *m = SourcesConfig{} }
+func (m *SourcesConfig) String() string { return proto.CompactTextString(m) }
+func (*SourcesConfig) ProtoMessage() {}
+func (*SourcesConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{23}
+}
+func (m *SourcesConfig) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *SourcesConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_SourcesConfig.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *SourcesConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SourcesConfig.Merge(m, src)
+}
+func (m *SourcesConfig) XXX_Size() int {
+ return m.Size()
+}
+func (m *SourcesConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_SourcesConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SourcesConfig proto.InternalMessageInfo
+
+func (m *SourcesConfig) GetAbsolutePaths() []string {
+ if m != nil {
+ return m.AbsolutePaths
+ }
+ return nil
+}
+
+func (m *SourcesConfig) GetLanguage() string {
+ if m != nil {
+ return m.Language
+ }
+ return ""
+}
+
+func (m *SourcesConfig) GetFilters() *SourcesFilterConfig {
+ if m != nil {
+ return m.Filters
+ }
+ return nil
+}
+
+func (m *SourcesConfig) GetOrder() *SourcesOrder {
+ if m != nil {
+ return m.Order
+ }
+ return nil
+}
+
+type SourcesFilterConfig struct {
+ TagExpression string `protobuf:"bytes,1,opt,name=tag_expression,json=tagExpression,proto3" json:"tag_expression,omitempty"`
+ NameRegularExpressions []string `protobuf:"bytes,2,rep,name=name_regular_expressions,json=nameRegularExpressions,proto3" json:"name_regular_expressions,omitempty"`
+ UriToLinesMapping []*UriToLinesMapping `protobuf:"bytes,3,rep,name=uri_to_lines_mapping,json=uriToLinesMapping,proto3" json:"uri_to_lines_mapping,omitempty"`
+}
+
+func (m *SourcesFilterConfig) Reset() { *m = SourcesFilterConfig{} }
+func (m *SourcesFilterConfig) String() string { return proto.CompactTextString(m) }
+func (*SourcesFilterConfig) ProtoMessage() {}
+func (*SourcesFilterConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{24}
+}
+func (m *SourcesFilterConfig) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *SourcesFilterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_SourcesFilterConfig.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *SourcesFilterConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SourcesFilterConfig.Merge(m, src)
+}
+func (m *SourcesFilterConfig) XXX_Size() int {
+ return m.Size()
+}
+func (m *SourcesFilterConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_SourcesFilterConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SourcesFilterConfig proto.InternalMessageInfo
+
+func (m *SourcesFilterConfig) GetTagExpression() string {
+ if m != nil {
+ return m.TagExpression
+ }
+ return ""
+}
+
+func (m *SourcesFilterConfig) GetNameRegularExpressions() []string {
+ if m != nil {
+ return m.NameRegularExpressions
+ }
+ return nil
+}
+
+func (m *SourcesFilterConfig) GetUriToLinesMapping() []*UriToLinesMapping {
+ if m != nil {
+ return m.UriToLinesMapping
+ }
+ return nil
+}
+
+type UriToLinesMapping struct {
+ AbsolutePath string `protobuf:"bytes,1,opt,name=absolute_path,json=absolutePath,proto3" json:"absolute_path,omitempty"`
+ Lines []uint64 `protobuf:"varint,2,rep,packed,name=lines,proto3" json:"lines,omitempty"`
+}
+
+func (m *UriToLinesMapping) Reset() { *m = UriToLinesMapping{} }
+func (m *UriToLinesMapping) String() string { return proto.CompactTextString(m) }
+func (*UriToLinesMapping) ProtoMessage() {}
+func (*UriToLinesMapping) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{25}
+}
+func (m *UriToLinesMapping) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *UriToLinesMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_UriToLinesMapping.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *UriToLinesMapping) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UriToLinesMapping.Merge(m, src)
+}
+func (m *UriToLinesMapping) XXX_Size() int {
+ return m.Size()
+}
+func (m *UriToLinesMapping) XXX_DiscardUnknown() {
+ xxx_messageInfo_UriToLinesMapping.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UriToLinesMapping proto.InternalMessageInfo
+
+func (m *UriToLinesMapping) GetAbsolutePath() string {
+ if m != nil {
+ return m.AbsolutePath
+ }
+ return ""
+}
+
+func (m *UriToLinesMapping) GetLines() []uint64 {
+ if m != nil {
+ return m.Lines
+ }
+ return nil
+}
+
+type SourcesOrder struct {
+ Type SourcesOrderType `protobuf:"varint,1,opt,name=type,proto3,enum=io.cucumber.messages.SourcesOrderType" json:"type,omitempty"`
+ Seed uint64 `protobuf:"varint,2,opt,name=seed,proto3" json:"seed,omitempty"`
+}
+
+func (m *SourcesOrder) Reset() { *m = SourcesOrder{} }
+func (m *SourcesOrder) String() string { return proto.CompactTextString(m) }
+func (*SourcesOrder) ProtoMessage() {}
+func (*SourcesOrder) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{26}
+}
+func (m *SourcesOrder) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *SourcesOrder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_SourcesOrder.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *SourcesOrder) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SourcesOrder.Merge(m, src)
+}
+func (m *SourcesOrder) XXX_Size() int {
+ return m.Size()
+}
+func (m *SourcesOrder) XXX_DiscardUnknown() {
+ xxx_messageInfo_SourcesOrder.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SourcesOrder proto.InternalMessageInfo
+
+func (m *SourcesOrder) GetType() SourcesOrderType {
+ if m != nil {
+ return m.Type
+ }
+ return SourcesOrderType_ORDER_OF_DEFINITION
+}
+
+func (m *SourcesOrder) GetSeed() uint64 {
+ if m != nil {
+ return m.Seed
+ }
+ return 0
+}
+
+type RuntimeConfig struct {
+ IsFailFast bool `protobuf:"varint,1,opt,name=is_fail_fast,json=isFailFast,proto3" json:"is_fail_fast,omitempty"`
+ IsDryRun bool `protobuf:"varint,2,opt,name=is_dry_run,json=isDryRun,proto3" json:"is_dry_run,omitempty"`
+ IsStrict bool `protobuf:"varint,3,opt,name=is_strict,json=isStrict,proto3" json:"is_strict,omitempty"`
+ MaxParallel uint64 `protobuf:"varint,4,opt,name=max_parallel,json=maxParallel,proto3" json:"max_parallel,omitempty"`
+}
+
+func (m *RuntimeConfig) Reset() { *m = RuntimeConfig{} }
+func (m *RuntimeConfig) String() string { return proto.CompactTextString(m) }
+func (*RuntimeConfig) ProtoMessage() {}
+func (*RuntimeConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{27}
+}
+func (m *RuntimeConfig) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RuntimeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RuntimeConfig.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RuntimeConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RuntimeConfig.Merge(m, src)
+}
+func (m *RuntimeConfig) XXX_Size() int {
+ return m.Size()
+}
+func (m *RuntimeConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_RuntimeConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RuntimeConfig proto.InternalMessageInfo
+
+func (m *RuntimeConfig) GetIsFailFast() bool {
+ if m != nil {
+ return m.IsFailFast
+ }
+ return false
+}
+
+func (m *RuntimeConfig) GetIsDryRun() bool {
+ if m != nil {
+ return m.IsDryRun
+ }
+ return false
+}
+
+func (m *RuntimeConfig) GetIsStrict() bool {
+ if m != nil {
+ return m.IsStrict
+ }
+ return false
+}
+
+func (m *RuntimeConfig) GetMaxParallel() uint64 {
+ if m != nil {
+ return m.MaxParallel
+ }
+ return 0
+}
+
+type SupportCodeConfig struct {
+ BeforeTestCaseHooks []*Hook `protobuf:"bytes,1,rep,name=before_test_case_hooks,json=beforeTestCaseHooks,proto3" json:"before_test_case_hooks,omitempty"`
+ AfterTestCaseHooks []*Hook `protobuf:"bytes,2,rep,name=after_test_case_hooks,json=afterTestCaseHooks,proto3" json:"after_test_case_hooks,omitempty"`
+ StepDefinitions []*StepDefinition `protobuf:"bytes,3,rep,name=step_definitions,json=stepDefinitions,proto3" json:"step_definitions,omitempty"`
+ ParameterTypes []*ParameterType `protobuf:"bytes,4,rep,name=parameter_types,json=parameterTypes,proto3" json:"parameter_types,omitempty"`
+}
+
+func (m *SupportCodeConfig) Reset() { *m = SupportCodeConfig{} }
+func (m *SupportCodeConfig) String() string { return proto.CompactTextString(m) }
+func (*SupportCodeConfig) ProtoMessage() {}
+func (*SupportCodeConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{28}
+}
+func (m *SupportCodeConfig) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *SupportCodeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_SupportCodeConfig.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *SupportCodeConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SupportCodeConfig.Merge(m, src)
+}
+func (m *SupportCodeConfig) XXX_Size() int {
+ return m.Size()
+}
+func (m *SupportCodeConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_SupportCodeConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SupportCodeConfig proto.InternalMessageInfo
+
+func (m *SupportCodeConfig) GetBeforeTestCaseHooks() []*Hook {
+ if m != nil {
+ return m.BeforeTestCaseHooks
+ }
+ return nil
+}
+
+func (m *SupportCodeConfig) GetAfterTestCaseHooks() []*Hook {
+ if m != nil {
+ return m.AfterTestCaseHooks
+ }
+ return nil
+}
+
+func (m *SupportCodeConfig) GetStepDefinitions() []*StepDefinition {
+ if m != nil {
+ return m.StepDefinitions
+ }
+ return nil
+}
+
+func (m *SupportCodeConfig) GetParameterTypes() []*ParameterType {
+ if m != nil {
+ return m.ParameterTypes
+ }
+ return nil
+}
+
+type Hook struct {
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ TagExpression string `protobuf:"bytes,2,opt,name=tag_expression,json=tagExpression,proto3" json:"tag_expression,omitempty"`
+ SourceReference *SourceReference `protobuf:"bytes,3,opt,name=source_reference,json=sourceReference,proto3" json:"source_reference,omitempty"`
+}
+
+func (m *Hook) Reset() { *m = Hook{} }
+func (m *Hook) String() string { return proto.CompactTextString(m) }
+func (*Hook) ProtoMessage() {}
+func (*Hook) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{29}
+}
+func (m *Hook) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Hook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Hook.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Hook) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Hook.Merge(m, src)
+}
+func (m *Hook) XXX_Size() int {
+ return m.Size()
+}
+func (m *Hook) XXX_DiscardUnknown() {
+ xxx_messageInfo_Hook.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Hook proto.InternalMessageInfo
+
+func (m *Hook) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+func (m *Hook) GetTagExpression() string {
+ if m != nil {
+ return m.TagExpression
+ }
+ return ""
+}
+
+func (m *Hook) GetSourceReference() *SourceReference {
+ if m != nil {
+ return m.SourceReference
+ }
+ return nil
+}
+
+type StepDefinition struct {
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Pattern *StepDefinitionPattern `protobuf:"bytes,2,opt,name=pattern,proto3" json:"pattern,omitempty"`
+ SourceReference *SourceReference `protobuf:"bytes,3,opt,name=source_reference,json=sourceReference,proto3" json:"source_reference,omitempty"`
+}
+
+func (m *StepDefinition) Reset() { *m = StepDefinition{} }
+func (m *StepDefinition) String() string { return proto.CompactTextString(m) }
+func (*StepDefinition) ProtoMessage() {}
+func (*StepDefinition) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{30}
+}
+func (m *StepDefinition) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *StepDefinition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_StepDefinition.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *StepDefinition) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StepDefinition.Merge(m, src)
+}
+func (m *StepDefinition) XXX_Size() int {
+ return m.Size()
+}
+func (m *StepDefinition) XXX_DiscardUnknown() {
+ xxx_messageInfo_StepDefinition.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StepDefinition proto.InternalMessageInfo
+
+func (m *StepDefinition) GetId() string {
+ if m != nil {
+ return m.Id
+ }
+ return ""
+}
+
+func (m *StepDefinition) GetPattern() *StepDefinitionPattern {
+ if m != nil {
+ return m.Pattern
+ }
+ return nil
+}
+
+func (m *StepDefinition) GetSourceReference() *SourceReference {
+ if m != nil {
+ return m.SourceReference
+ }
+ return nil
+}
+
+type StepDefinitionPattern struct {
+ Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"`
+ Type StepDefinitionPatternType `protobuf:"varint,2,opt,name=type,proto3,enum=io.cucumber.messages.StepDefinitionPatternType" json:"type,omitempty"`
+}
+
+func (m *StepDefinitionPattern) Reset() { *m = StepDefinitionPattern{} }
+func (m *StepDefinitionPattern) String() string { return proto.CompactTextString(m) }
+func (*StepDefinitionPattern) ProtoMessage() {}
+func (*StepDefinitionPattern) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{31}
+}
+func (m *StepDefinitionPattern) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *StepDefinitionPattern) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_StepDefinitionPattern.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *StepDefinitionPattern) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StepDefinitionPattern.Merge(m, src)
+}
+func (m *StepDefinitionPattern) XXX_Size() int {
+ return m.Size()
+}
+func (m *StepDefinitionPattern) XXX_DiscardUnknown() {
+ xxx_messageInfo_StepDefinitionPattern.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StepDefinitionPattern proto.InternalMessageInfo
+
+func (m *StepDefinitionPattern) GetSource() string {
+ if m != nil {
+ return m.Source
+ }
+ return ""
+}
+
+func (m *StepDefinitionPattern) GetType() StepDefinitionPatternType {
+ if m != nil {
+ return m.Type
+ }
+ return StepDefinitionPatternType_CUCUMBER_EXPRESSION
+}
+
+type ParameterType struct {
+ // The name is unique, so we don't need an id.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ RegularExpressions []string `protobuf:"bytes,2,rep,name=regular_expressions,json=regularExpressions,proto3" json:"regular_expressions,omitempty"`
+ PreferForRegularExpressionMatch bool `protobuf:"varint,3,opt,name=prefer_for_regular_expression_match,json=preferForRegularExpressionMatch,proto3" json:"prefer_for_regular_expression_match,omitempty"`
+ UseForSnippets bool `protobuf:"varint,4,opt,name=use_for_snippets,json=useForSnippets,proto3" json:"use_for_snippets,omitempty"`
+}
+
+func (m *ParameterType) Reset() { *m = ParameterType{} }
+func (m *ParameterType) String() string { return proto.CompactTextString(m) }
+func (*ParameterType) ProtoMessage() {}
+func (*ParameterType) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{32}
+}
+func (m *ParameterType) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *ParameterType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_ParameterType.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *ParameterType) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ParameterType.Merge(m, src)
+}
+func (m *ParameterType) XXX_Size() int {
+ return m.Size()
+}
+func (m *ParameterType) XXX_DiscardUnknown() {
+ xxx_messageInfo_ParameterType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ParameterType proto.InternalMessageInfo
+
+func (m *ParameterType) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *ParameterType) GetRegularExpressions() []string {
+ if m != nil {
+ return m.RegularExpressions
+ }
+ return nil
+}
+
+func (m *ParameterType) GetPreferForRegularExpressionMatch() bool {
+ if m != nil {
+ return m.PreferForRegularExpressionMatch
+ }
+ return false
+}
+
+func (m *ParameterType) GetUseForSnippets() bool {
+ if m != nil {
+ return m.UseForSnippets
+ }
+ return false
+}
+
+type UndefinedParameterType struct {
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ Expression string `protobuf:"bytes,2,opt,name=expression,proto3" json:"expression,omitempty"`
+}
+
+func (m *UndefinedParameterType) Reset() { *m = UndefinedParameterType{} }
+func (m *UndefinedParameterType) String() string { return proto.CompactTextString(m) }
+func (*UndefinedParameterType) ProtoMessage() {}
+func (*UndefinedParameterType) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{33}
+}
+func (m *UndefinedParameterType) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *UndefinedParameterType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_UndefinedParameterType.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *UndefinedParameterType) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UndefinedParameterType.Merge(m, src)
+}
+func (m *UndefinedParameterType) XXX_Size() int {
+ return m.Size()
+}
+func (m *UndefinedParameterType) XXX_DiscardUnknown() {
+ xxx_messageInfo_UndefinedParameterType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UndefinedParameterType proto.InternalMessageInfo
+
+func (m *UndefinedParameterType) GetName() string {
+ if m != nil {
+ return m.Name
+ }
+ return ""
+}
+
+func (m *UndefinedParameterType) GetExpression() string {
+ if m != nil {
+ return m.Expression
+ }
+ return ""
+}
+
+type CommandActionComplete struct {
+ CompletedId string `protobuf:"bytes,1,opt,name=completed_id,json=completedId,proto3" json:"completed_id,omitempty"`
+ // Types that are valid to be assigned to Result:
+ // *CommandActionComplete_TestStepResult
+ // *CommandActionComplete_Snippet
+ Result isCommandActionComplete_Result `protobuf_oneof:"result"`
+}
+
+func (m *CommandActionComplete) Reset() { *m = CommandActionComplete{} }
+func (m *CommandActionComplete) String() string { return proto.CompactTextString(m) }
+func (*CommandActionComplete) ProtoMessage() {}
+func (*CommandActionComplete) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{34}
+}
+func (m *CommandActionComplete) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandActionComplete) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandActionComplete.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandActionComplete) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandActionComplete.Merge(m, src)
+}
+func (m *CommandActionComplete) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandActionComplete) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandActionComplete.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandActionComplete proto.InternalMessageInfo
+
+type isCommandActionComplete_Result interface {
+ isCommandActionComplete_Result()
+ MarshalTo([]byte) (int, error)
+ Size() int
+}
+
+type CommandActionComplete_TestStepResult struct {
+ TestStepResult *TestStepResult `protobuf:"bytes,2,opt,name=test_step_result,json=testStepResult,proto3,oneof" json:"test_step_result,omitempty"`
+}
+type CommandActionComplete_Snippet struct {
+ Snippet string `protobuf:"bytes,3,opt,name=snippet,proto3,oneof" json:"snippet,omitempty"`
+}
+
+func (*CommandActionComplete_TestStepResult) isCommandActionComplete_Result() {}
+func (*CommandActionComplete_Snippet) isCommandActionComplete_Result() {}
+
+func (m *CommandActionComplete) GetResult() isCommandActionComplete_Result {
+ if m != nil {
+ return m.Result
+ }
+ return nil
+}
+
+func (m *CommandActionComplete) GetCompletedId() string {
+ if m != nil {
+ return m.CompletedId
+ }
+ return ""
+}
+
+func (m *CommandActionComplete) GetTestStepResult() *TestStepResult {
+ if x, ok := m.GetResult().(*CommandActionComplete_TestStepResult); ok {
+ return x.TestStepResult
+ }
+ return nil
+}
+
+func (m *CommandActionComplete) GetSnippet() string {
+ if x, ok := m.GetResult().(*CommandActionComplete_Snippet); ok {
+ return x.Snippet
+ }
+ return ""
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*CommandActionComplete) XXX_OneofWrappers() []interface{} {
+ return []interface{}{
+ (*CommandActionComplete_TestStepResult)(nil),
+ (*CommandActionComplete_Snippet)(nil),
+ }
+}
+
+type CommandRunBeforeTestRunHooks struct {
+ ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+}
+
+func (m *CommandRunBeforeTestRunHooks) Reset() { *m = CommandRunBeforeTestRunHooks{} }
+func (m *CommandRunBeforeTestRunHooks) String() string { return proto.CompactTextString(m) }
+func (*CommandRunBeforeTestRunHooks) ProtoMessage() {}
+func (*CommandRunBeforeTestRunHooks) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{35}
+}
+func (m *CommandRunBeforeTestRunHooks) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandRunBeforeTestRunHooks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandRunBeforeTestRunHooks.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandRunBeforeTestRunHooks) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandRunBeforeTestRunHooks.Merge(m, src)
+}
+func (m *CommandRunBeforeTestRunHooks) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandRunBeforeTestRunHooks) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandRunBeforeTestRunHooks.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandRunBeforeTestRunHooks proto.InternalMessageInfo
+
+func (m *CommandRunBeforeTestRunHooks) GetActionId() string {
+ if m != nil {
+ return m.ActionId
+ }
+ return ""
+}
+
+type CommandRunAfterTestRunHooks struct {
+ ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+}
+
+func (m *CommandRunAfterTestRunHooks) Reset() { *m = CommandRunAfterTestRunHooks{} }
+func (m *CommandRunAfterTestRunHooks) String() string { return proto.CompactTextString(m) }
+func (*CommandRunAfterTestRunHooks) ProtoMessage() {}
+func (*CommandRunAfterTestRunHooks) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{36}
+}
+func (m *CommandRunAfterTestRunHooks) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandRunAfterTestRunHooks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandRunAfterTestRunHooks.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandRunAfterTestRunHooks) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandRunAfterTestRunHooks.Merge(m, src)
+}
+func (m *CommandRunAfterTestRunHooks) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandRunAfterTestRunHooks) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandRunAfterTestRunHooks.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandRunAfterTestRunHooks proto.InternalMessageInfo
+
+func (m *CommandRunAfterTestRunHooks) GetActionId() string {
+ if m != nil {
+ return m.ActionId
+ }
+ return ""
+}
+
+type CommandInitializeTestCase struct {
+ ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+ Pickle *Pickle `protobuf:"bytes,2,opt,name=pickle,proto3" json:"pickle,omitempty"`
+}
+
+func (m *CommandInitializeTestCase) Reset() { *m = CommandInitializeTestCase{} }
+func (m *CommandInitializeTestCase) String() string { return proto.CompactTextString(m) }
+func (*CommandInitializeTestCase) ProtoMessage() {}
+func (*CommandInitializeTestCase) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{37}
+}
+func (m *CommandInitializeTestCase) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandInitializeTestCase) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandInitializeTestCase.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandInitializeTestCase) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandInitializeTestCase.Merge(m, src)
+}
+func (m *CommandInitializeTestCase) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandInitializeTestCase) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandInitializeTestCase.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandInitializeTestCase proto.InternalMessageInfo
+
+func (m *CommandInitializeTestCase) GetActionId() string {
+ if m != nil {
+ return m.ActionId
+ }
+ return ""
+}
+
+func (m *CommandInitializeTestCase) GetPickle() *Pickle {
+ if m != nil {
+ return m.Pickle
+ }
+ return nil
+}
+
+type CommandRunBeforeTestCaseHook struct {
+ ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+ HookId string `protobuf:"bytes,2,opt,name=hook_id,json=hookId,proto3" json:"hook_id,omitempty"`
+ TestCaseId string `protobuf:"bytes,3,opt,name=test_case_id,json=testCaseId,proto3" json:"test_case_id,omitempty"`
+}
+
+func (m *CommandRunBeforeTestCaseHook) Reset() { *m = CommandRunBeforeTestCaseHook{} }
+func (m *CommandRunBeforeTestCaseHook) String() string { return proto.CompactTextString(m) }
+func (*CommandRunBeforeTestCaseHook) ProtoMessage() {}
+func (*CommandRunBeforeTestCaseHook) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{38}
+}
+func (m *CommandRunBeforeTestCaseHook) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandRunBeforeTestCaseHook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandRunBeforeTestCaseHook.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandRunBeforeTestCaseHook) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandRunBeforeTestCaseHook.Merge(m, src)
+}
+func (m *CommandRunBeforeTestCaseHook) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandRunBeforeTestCaseHook) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandRunBeforeTestCaseHook.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandRunBeforeTestCaseHook proto.InternalMessageInfo
+
+func (m *CommandRunBeforeTestCaseHook) GetActionId() string {
+ if m != nil {
+ return m.ActionId
+ }
+ return ""
+}
+
+func (m *CommandRunBeforeTestCaseHook) GetHookId() string {
+ if m != nil {
+ return m.HookId
+ }
+ return ""
+}
+
+func (m *CommandRunBeforeTestCaseHook) GetTestCaseId() string {
+ if m != nil {
+ return m.TestCaseId
+ }
+ return ""
+}
+
+type CommandRunAfterTestCaseHook struct {
+ ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+ HookId string `protobuf:"bytes,2,opt,name=hook_id,json=hookId,proto3" json:"hook_id,omitempty"`
+ TestCaseId string `protobuf:"bytes,3,opt,name=test_case_id,json=testCaseId,proto3" json:"test_case_id,omitempty"`
+}
+
+func (m *CommandRunAfterTestCaseHook) Reset() { *m = CommandRunAfterTestCaseHook{} }
+func (m *CommandRunAfterTestCaseHook) String() string { return proto.CompactTextString(m) }
+func (*CommandRunAfterTestCaseHook) ProtoMessage() {}
+func (*CommandRunAfterTestCaseHook) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{39}
+}
+func (m *CommandRunAfterTestCaseHook) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandRunAfterTestCaseHook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandRunAfterTestCaseHook.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandRunAfterTestCaseHook) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandRunAfterTestCaseHook.Merge(m, src)
+}
+func (m *CommandRunAfterTestCaseHook) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandRunAfterTestCaseHook) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandRunAfterTestCaseHook.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandRunAfterTestCaseHook proto.InternalMessageInfo
+
+func (m *CommandRunAfterTestCaseHook) GetActionId() string {
+ if m != nil {
+ return m.ActionId
+ }
+ return ""
+}
+
+func (m *CommandRunAfterTestCaseHook) GetHookId() string {
+ if m != nil {
+ return m.HookId
+ }
+ return ""
+}
+
+func (m *CommandRunAfterTestCaseHook) GetTestCaseId() string {
+ if m != nil {
+ return m.TestCaseId
+ }
+ return ""
+}
+
+type CommandRunTestStep struct {
+ ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+ StepDefinitionId string `protobuf:"bytes,2,opt,name=step_definition_id,json=stepDefinitionId,proto3" json:"step_definition_id,omitempty"`
+ StepMatchArguments []*StepMatchArgument `protobuf:"bytes,3,rep,name=step_match_arguments,json=stepMatchArguments,proto3" json:"step_match_arguments,omitempty"`
+ PickleStepArgument *PickleStepArgument `protobuf:"bytes,4,opt,name=pickle_step_argument,json=pickleStepArgument,proto3" json:"pickle_step_argument,omitempty"`
+ TestCaseId string `protobuf:"bytes,5,opt,name=test_case_id,json=testCaseId,proto3" json:"test_case_id,omitempty"`
+}
+
+func (m *CommandRunTestStep) Reset() { *m = CommandRunTestStep{} }
+func (m *CommandRunTestStep) String() string { return proto.CompactTextString(m) }
+func (*CommandRunTestStep) ProtoMessage() {}
+func (*CommandRunTestStep) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{40}
+}
+func (m *CommandRunTestStep) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandRunTestStep) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandRunTestStep.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandRunTestStep) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandRunTestStep.Merge(m, src)
+}
+func (m *CommandRunTestStep) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandRunTestStep) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandRunTestStep.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandRunTestStep proto.InternalMessageInfo
+
+func (m *CommandRunTestStep) GetActionId() string {
+ if m != nil {
+ return m.ActionId
+ }
+ return ""
+}
+
+func (m *CommandRunTestStep) GetStepDefinitionId() string {
+ if m != nil {
+ return m.StepDefinitionId
+ }
+ return ""
+}
+
+func (m *CommandRunTestStep) GetStepMatchArguments() []*StepMatchArgument {
+ if m != nil {
+ return m.StepMatchArguments
+ }
+ return nil
+}
+
+func (m *CommandRunTestStep) GetPickleStepArgument() *PickleStepArgument {
+ if m != nil {
+ return m.PickleStepArgument
+ }
+ return nil
+}
+
+func (m *CommandRunTestStep) GetTestCaseId() string {
+ if m != nil {
+ return m.TestCaseId
+ }
+ return ""
+}
+
+//*
+// Represents a single argument extracted from a step match and passed to a step definition.
+// This is used for the following purposes:
+// - Construct an argument to pass to a step definition (possibly through a parameter type transform)
+// - Highlight the matched parameter in rich formatters such as the HTML formatter
+//
+// This message closely matches the `Argument` class in the `cucumber-expressions` library.
+type StepMatchArgument struct {
+ ParameterTypeName string `protobuf:"bytes,1,opt,name=parameter_type_name,json=parameterTypeName,proto3" json:"parameter_type_name,omitempty"`
+ //*
+ // Represents the outermost capture group of an argument. This message closely matches the
+ // `Group` class in the `cucumber-expressions` library.
+ Group *StepMatchArgument_Group `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (m *StepMatchArgument) Reset() { *m = StepMatchArgument{} }
+func (m *StepMatchArgument) String() string { return proto.CompactTextString(m) }
+func (*StepMatchArgument) ProtoMessage() {}
+func (*StepMatchArgument) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{41}
+}
+func (m *StepMatchArgument) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *StepMatchArgument) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_StepMatchArgument.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *StepMatchArgument) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StepMatchArgument.Merge(m, src)
+}
+func (m *StepMatchArgument) XXX_Size() int {
+ return m.Size()
+}
+func (m *StepMatchArgument) XXX_DiscardUnknown() {
+ xxx_messageInfo_StepMatchArgument.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StepMatchArgument proto.InternalMessageInfo
+
+func (m *StepMatchArgument) GetParameterTypeName() string {
+ if m != nil {
+ return m.ParameterTypeName
+ }
+ return ""
+}
+
+func (m *StepMatchArgument) GetGroup() *StepMatchArgument_Group {
+ if m != nil {
+ return m.Group
+ }
+ return nil
+}
+
+type StepMatchArgument_Group struct {
+ Start uint32 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
+ Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+ Children []*StepMatchArgument_Group `protobuf:"bytes,3,rep,name=children,proto3" json:"children,omitempty"`
+}
+
+func (m *StepMatchArgument_Group) Reset() { *m = StepMatchArgument_Group{} }
+func (m *StepMatchArgument_Group) String() string { return proto.CompactTextString(m) }
+func (*StepMatchArgument_Group) ProtoMessage() {}
+func (*StepMatchArgument_Group) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{41, 0}
+}
+func (m *StepMatchArgument_Group) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *StepMatchArgument_Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_StepMatchArgument_Group.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *StepMatchArgument_Group) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_StepMatchArgument_Group.Merge(m, src)
+}
+func (m *StepMatchArgument_Group) XXX_Size() int {
+ return m.Size()
+}
+func (m *StepMatchArgument_Group) XXX_DiscardUnknown() {
+ xxx_messageInfo_StepMatchArgument_Group.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StepMatchArgument_Group proto.InternalMessageInfo
+
+func (m *StepMatchArgument_Group) GetStart() uint32 {
+ if m != nil {
+ return m.Start
+ }
+ return 0
+}
+
+func (m *StepMatchArgument_Group) GetValue() string {
+ if m != nil {
+ return m.Value
+ }
+ return ""
+}
+
+func (m *StepMatchArgument_Group) GetChildren() []*StepMatchArgument_Group {
+ if m != nil {
+ return m.Children
+ }
+ return nil
+}
+
+type CommandGenerateSnippet struct {
+ ActionId string `protobuf:"bytes,1,opt,name=action_id,json=actionId,proto3" json:"action_id,omitempty"`
+ GeneratedExpressions []*GeneratedExpression `protobuf:"bytes,2,rep,name=generated_expressions,json=generatedExpressions,proto3" json:"generated_expressions,omitempty"`
+ PickleStepArgument *PickleStepArgument `protobuf:"bytes,3,opt,name=pickle_step_argument,json=pickleStepArgument,proto3" json:"pickle_step_argument,omitempty"`
+}
+
+func (m *CommandGenerateSnippet) Reset() { *m = CommandGenerateSnippet{} }
+func (m *CommandGenerateSnippet) String() string { return proto.CompactTextString(m) }
+func (*CommandGenerateSnippet) ProtoMessage() {}
+func (*CommandGenerateSnippet) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{42}
+}
+func (m *CommandGenerateSnippet) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CommandGenerateSnippet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_CommandGenerateSnippet.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *CommandGenerateSnippet) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CommandGenerateSnippet.Merge(m, src)
+}
+func (m *CommandGenerateSnippet) XXX_Size() int {
+ return m.Size()
+}
+func (m *CommandGenerateSnippet) XXX_DiscardUnknown() {
+ xxx_messageInfo_CommandGenerateSnippet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CommandGenerateSnippet proto.InternalMessageInfo
+
+func (m *CommandGenerateSnippet) GetActionId() string {
+ if m != nil {
+ return m.ActionId
+ }
+ return ""
+}
+
+func (m *CommandGenerateSnippet) GetGeneratedExpressions() []*GeneratedExpression {
+ if m != nil {
+ return m.GeneratedExpressions
+ }
+ return nil
+}
+
+func (m *CommandGenerateSnippet) GetPickleStepArgument() *PickleStepArgument {
+ if m != nil {
+ return m.PickleStepArgument
+ }
+ return nil
+}
+
+type GeneratedExpression struct {
+ Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
+ ParameterTypeNames []string `protobuf:"bytes,2,rep,name=parameter_type_names,json=parameterTypeNames,proto3" json:"parameter_type_names,omitempty"`
+}
+
+func (m *GeneratedExpression) Reset() { *m = GeneratedExpression{} }
+func (m *GeneratedExpression) String() string { return proto.CompactTextString(m) }
+func (*GeneratedExpression) ProtoMessage() {}
+func (*GeneratedExpression) Descriptor() ([]byte, []int) {
+ return fileDescriptor_4dc296cbfe5ffcd5, []int{43}
+}
+func (m *GeneratedExpression) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *GeneratedExpression) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_GeneratedExpression.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *GeneratedExpression) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GeneratedExpression.Merge(m, src)
+}
+func (m *GeneratedExpression) XXX_Size() int {
+ return m.Size()
+}
+func (m *GeneratedExpression) XXX_DiscardUnknown() {
+ xxx_messageInfo_GeneratedExpression.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeneratedExpression proto.InternalMessageInfo
+
+func (m *GeneratedExpression) GetText() string {
+ if m != nil {
+ return m.Text
+ }
+ return ""
+}
+
+func (m *GeneratedExpression) GetParameterTypeNames() []string {
+ if m != nil {
+ return m.ParameterTypeNames
+ }
+ return nil
+}
+
+func init() {
+ proto.RegisterEnum("io.cucumber.messages.SourcesOrderType", SourcesOrderType_name, SourcesOrderType_value)
+ proto.RegisterEnum("io.cucumber.messages.StepDefinitionPatternType", StepDefinitionPatternType_name, StepDefinitionPatternType_value)
+ proto.RegisterEnum("io.cucumber.messages.TestStepResult_Status", TestStepResult_Status_name, TestStepResult_Status_value)
+ proto.RegisterType((*Timestamp)(nil), "io.cucumber.messages.Timestamp")
+ proto.RegisterType((*Duration)(nil), "io.cucumber.messages.Duration")
+ proto.RegisterType((*Envelope)(nil), "io.cucumber.messages.Envelope")
+ proto.RegisterType((*Location)(nil), "io.cucumber.messages.Location")
+ proto.RegisterType((*SourceReference)(nil), "io.cucumber.messages.SourceReference")
+ proto.RegisterType((*Source)(nil), "io.cucumber.messages.Source")
+ proto.RegisterType((*GherkinDocument)(nil), "io.cucumber.messages.GherkinDocument")
+ proto.RegisterType((*GherkinDocument_Comment)(nil), "io.cucumber.messages.GherkinDocument.Comment")
+ proto.RegisterType((*GherkinDocument_Feature)(nil), "io.cucumber.messages.GherkinDocument.Feature")
+ proto.RegisterType((*GherkinDocument_Feature_Tag)(nil), "io.cucumber.messages.GherkinDocument.Feature.Tag")
+ proto.RegisterType((*GherkinDocument_Feature_FeatureChild)(nil), "io.cucumber.messages.GherkinDocument.Feature.FeatureChild")
+ proto.RegisterType((*GherkinDocument_Feature_FeatureChild_Rule)(nil), "io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule")
+ proto.RegisterType((*GherkinDocument_Feature_FeatureChild_RuleChild)(nil), "io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild")
+ proto.RegisterType((*GherkinDocument_Feature_Background)(nil), "io.cucumber.messages.GherkinDocument.Feature.Background")
+ proto.RegisterType((*GherkinDocument_Feature_Scenario)(nil), "io.cucumber.messages.GherkinDocument.Feature.Scenario")
+ proto.RegisterType((*GherkinDocument_Feature_Scenario_Examples)(nil), "io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples")
+ proto.RegisterType((*GherkinDocument_Feature_TableRow)(nil), "io.cucumber.messages.GherkinDocument.Feature.TableRow")
+ proto.RegisterType((*GherkinDocument_Feature_TableRow_TableCell)(nil), "io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell")
+ proto.RegisterType((*GherkinDocument_Feature_Step)(nil), "io.cucumber.messages.GherkinDocument.Feature.Step")
+ proto.RegisterType((*GherkinDocument_Feature_Step_DataTable)(nil), "io.cucumber.messages.GherkinDocument.Feature.Step.DataTable")
+ proto.RegisterType((*GherkinDocument_Feature_Step_DocString)(nil), "io.cucumber.messages.GherkinDocument.Feature.Step.DocString")
+ proto.RegisterType((*Attachment)(nil), "io.cucumber.messages.Attachment")
+ proto.RegisterType((*Pickle)(nil), "io.cucumber.messages.Pickle")
+ proto.RegisterType((*Pickle_PickleTag)(nil), "io.cucumber.messages.Pickle.PickleTag")
+ proto.RegisterType((*Pickle_PickleStep)(nil), "io.cucumber.messages.Pickle.PickleStep")
+ proto.RegisterType((*PickleStepArgument)(nil), "io.cucumber.messages.PickleStepArgument")
+ proto.RegisterType((*PickleStepArgument_PickleDocString)(nil), "io.cucumber.messages.PickleStepArgument.PickleDocString")
+ proto.RegisterType((*PickleStepArgument_PickleTable)(nil), "io.cucumber.messages.PickleStepArgument.PickleTable")
+ proto.RegisterType((*PickleStepArgument_PickleTable_PickleTableRow)(nil), "io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow")
+ proto.RegisterType((*PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell)(nil), "io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell")
+ proto.RegisterType((*TestCase)(nil), "io.cucumber.messages.TestCase")
+ proto.RegisterType((*TestCase_TestStep)(nil), "io.cucumber.messages.TestCase.TestStep")
+ proto.RegisterType((*TestCase_TestStep_StepMatchArgumentsList)(nil), "io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList")
+ proto.RegisterType((*PickleAccepted)(nil), "io.cucumber.messages.PickleAccepted")
+ proto.RegisterType((*PickleRejected)(nil), "io.cucumber.messages.PickleRejected")
+ proto.RegisterType((*TestRunStarted)(nil), "io.cucumber.messages.TestRunStarted")
+ proto.RegisterType((*TestCasePreparedStep)(nil), "io.cucumber.messages.TestCasePreparedStep")
+ proto.RegisterType((*TestCasePrepared)(nil), "io.cucumber.messages.TestCasePrepared")
+ proto.RegisterType((*TestCaseStarted)(nil), "io.cucumber.messages.TestCaseStarted")
+ proto.RegisterType((*TestCaseStarted_Platform)(nil), "io.cucumber.messages.TestCaseStarted.Platform")
+ proto.RegisterType((*TestCaseFinished)(nil), "io.cucumber.messages.TestCaseFinished")
+ proto.RegisterType((*TestStepStarted)(nil), "io.cucumber.messages.TestStepStarted")
+ proto.RegisterType((*TestStepFinished)(nil), "io.cucumber.messages.TestStepFinished")
+ proto.RegisterType((*TestStepResult)(nil), "io.cucumber.messages.TestStepResult")
+ proto.RegisterType((*TestRunFinished)(nil), "io.cucumber.messages.TestRunFinished")
+ proto.RegisterType((*CommandStart)(nil), "io.cucumber.messages.CommandStart")
+ proto.RegisterType((*SourcesConfig)(nil), "io.cucumber.messages.SourcesConfig")
+ proto.RegisterType((*SourcesFilterConfig)(nil), "io.cucumber.messages.SourcesFilterConfig")
+ proto.RegisterType((*UriToLinesMapping)(nil), "io.cucumber.messages.UriToLinesMapping")
+ proto.RegisterType((*SourcesOrder)(nil), "io.cucumber.messages.SourcesOrder")
+ proto.RegisterType((*RuntimeConfig)(nil), "io.cucumber.messages.RuntimeConfig")
+ proto.RegisterType((*SupportCodeConfig)(nil), "io.cucumber.messages.SupportCodeConfig")
+ proto.RegisterType((*Hook)(nil), "io.cucumber.messages.Hook")
+ proto.RegisterType((*StepDefinition)(nil), "io.cucumber.messages.StepDefinition")
+ proto.RegisterType((*StepDefinitionPattern)(nil), "io.cucumber.messages.StepDefinitionPattern")
+ proto.RegisterType((*ParameterType)(nil), "io.cucumber.messages.ParameterType")
+ proto.RegisterType((*UndefinedParameterType)(nil), "io.cucumber.messages.UndefinedParameterType")
+ proto.RegisterType((*CommandActionComplete)(nil), "io.cucumber.messages.CommandActionComplete")
+ proto.RegisterType((*CommandRunBeforeTestRunHooks)(nil), "io.cucumber.messages.CommandRunBeforeTestRunHooks")
+ proto.RegisterType((*CommandRunAfterTestRunHooks)(nil), "io.cucumber.messages.CommandRunAfterTestRunHooks")
+ proto.RegisterType((*CommandInitializeTestCase)(nil), "io.cucumber.messages.CommandInitializeTestCase")
+ proto.RegisterType((*CommandRunBeforeTestCaseHook)(nil), "io.cucumber.messages.CommandRunBeforeTestCaseHook")
+ proto.RegisterType((*CommandRunAfterTestCaseHook)(nil), "io.cucumber.messages.CommandRunAfterTestCaseHook")
+ proto.RegisterType((*CommandRunTestStep)(nil), "io.cucumber.messages.CommandRunTestStep")
+ proto.RegisterType((*StepMatchArgument)(nil), "io.cucumber.messages.StepMatchArgument")
+ proto.RegisterType((*StepMatchArgument_Group)(nil), "io.cucumber.messages.StepMatchArgument.Group")
+ proto.RegisterType((*CommandGenerateSnippet)(nil), "io.cucumber.messages.CommandGenerateSnippet")
+ proto.RegisterType((*GeneratedExpression)(nil), "io.cucumber.messages.GeneratedExpression")
+}
+
+func init() { proto.RegisterFile("messages.proto", fileDescriptor_4dc296cbfe5ffcd5) }
+
+var fileDescriptor_4dc296cbfe5ffcd5 = []byte{
+ // 3649 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3b, 0x4d, 0x6f, 0xe4, 0xd8,
+ 0x71, 0xcd, 0xee, 0x56, 0xab, 0xbb, 0xf4, 0xd5, 0x7a, 0xd2, 0x68, 0x7a, 0x7b, 0x27, 0x63, 0x99,
+ 0xfb, 0x35, 0x59, 0xdb, 0x5a, 0x67, 0x62, 0x6c, 0x16, 0xe3, 0x6c, 0xd6, 0xfa, 0x68, 0x4d, 0xf7,
+ 0x58, 0x23, 0x09, 0xaf, 0x47, 0xbb, 0xde, 0x35, 0xd6, 0x0c, 0x45, 0x3e, 0xb5, 0x98, 0x61, 0x93,
+ 0x0c, 0x1f, 0xb9, 0x3b, 0x72, 0x90, 0x00, 0x06, 0x72, 0xf0, 0x25, 0x70, 0x80, 0x5c, 0x72, 0xf2,
+ 0x25, 0x81, 0x6f, 0xb9, 0xe4, 0x10, 0x24, 0x41, 0xce, 0x41, 0x0e, 0x39, 0xac, 0x93, 0x8b, 0x8f,
+ 0xc6, 0xee, 0x2f, 0x08, 0xe0, 0x5b, 0x10, 0x20, 0x78, 0x5f, 0x6c, 0x92, 0xcd, 0xe6, 0x48, 0xd3,
+ 0x5e, 0xc0, 0xf0, 0x49, 0xfd, 0x8a, 0xaf, 0xea, 0xd5, 0x17, 0xeb, 0x55, 0x15, 0x4b, 0xb0, 0x3a,
+ 0x26, 0x94, 0x9a, 0x23, 0x42, 0x77, 0x82, 0xd0, 0x8f, 0x7c, 0xb4, 0xe9, 0xf8, 0x3b, 0x56, 0x6c,
+ 0xc5, 0xe3, 0x73, 0x12, 0xee, 0xa8, 0x67, 0xfa, 0xb7, 0xa1, 0xf5, 0xc4, 0x19, 0x13, 0x1a, 0x99,
+ 0xe3, 0x00, 0x75, 0x60, 0x91, 0x12, 0xcb, 0xf7, 0x6c, 0xda, 0xd1, 0xb6, 0xb5, 0x7b, 0x35, 0xac,
+ 0x96, 0x68, 0x13, 0x16, 0x3c, 0xd3, 0xf3, 0x69, 0xa7, 0xba, 0xad, 0xdd, 0x5b, 0xc0, 0x62, 0xa1,
+ 0x3f, 0x80, 0xe6, 0x41, 0x1c, 0x9a, 0x91, 0xe3, 0x7b, 0x37, 0xc6, 0xfd, 0xe9, 0x06, 0x34, 0x7b,
+ 0xde, 0x27, 0xc4, 0xf5, 0x03, 0x82, 0xde, 0x86, 0x06, 0xf5, 0xe3, 0xd0, 0x22, 0x1c, 0x77, 0xe9,
+ 0xfe, 0x9d, 0x9d, 0x22, 0x66, 0x77, 0x86, 0x7c, 0x4f, 0xbf, 0x82, 0xe5, 0x6e, 0x84, 0xa1, 0x3d,
+ 0xba, 0x24, 0xe1, 0x53, 0xc7, 0x33, 0x6c, 0xdf, 0x8a, 0xc7, 0xc4, 0x8b, 0xf8, 0x29, 0x4b, 0xf7,
+ 0x5f, 0x2b, 0xa6, 0xf0, 0x50, 0xec, 0x3e, 0x90, 0x9b, 0xfb, 0x15, 0xbc, 0x36, 0xca, 0x82, 0x18,
+ 0x2f, 0x81, 0x63, 0x3d, 0x75, 0x49, 0xa7, 0x56, 0xc6, 0xcb, 0x29, 0xdf, 0xc3, 0x78, 0x11, 0xbb,
+ 0xd1, 0x1e, 0x80, 0x19, 0x45, 0xa6, 0x75, 0xc9, 0xb9, 0xa8, 0x73, 0xdc, 0xed, 0x62, 0xdc, 0xdd,
+ 0x64, 0x5f, 0xbf, 0x82, 0x53, 0x58, 0x68, 0x08, 0xeb, 0x11, 0xa1, 0x91, 0x61, 0x99, 0x94, 0x18,
+ 0x34, 0x32, 0xc3, 0x88, 0xd8, 0x9d, 0x85, 0x32, 0x81, 0x9e, 0x10, 0x1a, 0xed, 0x9b, 0x94, 0x0c,
+ 0xc5, 0x66, 0x26, 0x50, 0x94, 0x05, 0x25, 0x44, 0x69, 0x44, 0x82, 0x84, 0x68, 0xe3, 0x79, 0x44,
+ 0x87, 0x11, 0x09, 0x72, 0x44, 0x53, 0x20, 0xf4, 0x3e, 0xa0, 0x09, 0xd1, 0x0b, 0xc7, 0x73, 0xe8,
+ 0x25, 0xb1, 0x3b, 0x8b, 0x9c, 0xea, 0xeb, 0xe5, 0x54, 0x0f, 0xe5, 0xee, 0x7e, 0x05, 0xb7, 0xa3,
+ 0x1c, 0x2c, 0xa1, 0xcb, 0x35, 0x90, 0xd0, 0x6d, 0x3e, 0x8f, 0x2e, 0x93, 0x37, 0x4f, 0x37, 0x0d,
+ 0x43, 0x27, 0xb0, 0x26, 0xec, 0x64, 0x98, 0x96, 0x45, 0x02, 0xa6, 0x82, 0x16, 0x27, 0xfa, 0x6a,
+ 0x99, 0x79, 0x77, 0xe5, 0xde, 0x7e, 0x05, 0xaf, 0x06, 0x19, 0x48, 0x8a, 0x60, 0x48, 0xfe, 0x84,
+ 0x58, 0x8c, 0x20, 0x3c, 0x9f, 0x20, 0x96, 0x7b, 0x27, 0x04, 0x15, 0x24, 0x2b, 0x79, 0x10, 0x92,
+ 0xc0, 0x0c, 0x89, 0xdd, 0x59, 0xba, 0x8e, 0xe4, 0xa7, 0x72, 0x77, 0x5a, 0x72, 0x05, 0x43, 0xa7,
+ 0xc0, 0x61, 0x46, 0x18, 0x7b, 0x89, 0xf5, 0x97, 0xcb, 0x38, 0x65, 0x54, 0x71, 0xec, 0x4d, 0x8c,
+ 0xbf, 0x1a, 0x65, 0x20, 0x89, 0x43, 0x31, 0x8a, 0x89, 0x89, 0x56, 0x9e, 0xe7, 0x50, 0x38, 0xf6,
+ 0x52, 0x16, 0x5a, 0x8b, 0xb2, 0x20, 0x34, 0x80, 0x15, 0xcb, 0x1f, 0x8f, 0x4d, 0xcf, 0x16, 0x5c,
+ 0x76, 0x56, 0x39, 0x41, 0xbd, 0x98, 0xe0, 0xbe, 0xd8, 0xca, 0x39, 0xea, 0x57, 0xf0, 0xb2, 0x95,
+ 0x5a, 0x23, 0x02, 0xb7, 0x15, 0x29, 0xd3, 0x62, 0xc1, 0xc9, 0xb0, 0xfc, 0x71, 0xe0, 0x92, 0x88,
+ 0x74, 0xd6, 0x38, 0xd1, 0xaf, 0x95, 0x12, 0xdd, 0xe5, 0x38, 0xfb, 0x12, 0xa5, 0x5f, 0xc1, 0xb7,
+ 0xac, 0xa2, 0x07, 0xe8, 0xcf, 0xe1, 0xab, 0xea, 0x18, 0xa6, 0x89, 0x73, 0x72, 0xe1, 0x87, 0xc4,
+ 0x48, 0x34, 0x73, 0xe9, 0xfb, 0x4f, 0x69, 0xa7, 0xcd, 0x0f, 0xbc, 0x5f, 0x7a, 0x20, 0x8e, 0xbd,
+ 0x3d, 0x8e, 0x2c, 0xd5, 0xd4, 0x67, 0x98, 0xfd, 0x0a, 0xbe, 0x63, 0x95, 0x3c, 0x47, 0x21, 0xa8,
+ 0xe7, 0x86, 0xe3, 0x39, 0x91, 0x63, 0xba, 0xce, 0x0f, 0xe5, 0xf1, 0xcc, 0x85, 0x3a, 0xeb, 0xfc,
+ 0xe4, 0xb7, 0x4a, 0x4f, 0x1e, 0x24, 0x88, 0xca, 0x95, 0xfa, 0x15, 0xfc, 0x92, 0x35, 0xeb, 0x61,
+ 0x99, 0xc8, 0xdc, 0x6d, 0x99, 0xcc, 0x1d, 0x74, 0x53, 0x91, 0xf9, 0xb9, 0xbe, 0xff, 0x74, 0x96,
+ 0xc8, 0xea, 0x39, 0xfa, 0x18, 0x6e, 0xa5, 0x8f, 0x4f, 0x02, 0x50, 0x67, 0x83, 0x1f, 0x79, 0xef,
+ 0x79, 0x47, 0xaa, 0x08, 0xd4, 0xaf, 0x60, 0x64, 0x4d, 0x41, 0xd1, 0x0f, 0x61, 0x3b, 0x4d, 0xde,
+ 0xbc, 0x88, 0x48, 0x98, 0x17, 0x6e, 0x93, 0x9f, 0xf4, 0x7b, 0xcf, 0x3b, 0x69, 0x97, 0xe1, 0xe6,
+ 0x64, 0x7b, 0xd9, 0x9a, 0xfd, 0xb8, 0xe4, 0xec, 0x89, 0x2f, 0xdd, 0xba, 0xe1, 0xd9, 0x29, 0x57,
+ 0x2a, 0x3a, 0x3b, 0xf1, 0xa4, 0x4b, 0xe8, 0xa8, 0xb3, 0x47, 0xc4, 0x23, 0xa1, 0x19, 0x11, 0x83,
+ 0x7a, 0x4e, 0x10, 0x90, 0xa8, 0xb3, 0xc5, 0xcf, 0xfc, 0x7a, 0xe9, 0x99, 0x0f, 0x25, 0xd2, 0x50,
+ 0xe0, 0xf4, 0x2b, 0x78, 0xcb, 0x2a, 0x7c, 0x82, 0x5e, 0x9b, 0xbc, 0xe4, 0x24, 0x0c, 0xfd, 0xb0,
+ 0x73, 0x7b, 0x5b, 0xbb, 0xd7, 0x4a, 0xbd, 0xc0, 0x3d, 0x06, 0x45, 0xef, 0x42, 0x6b, 0xe2, 0xc7,
+ 0x1d, 0xce, 0xc1, 0xdd, 0xf2, 0x08, 0xd8, 0xaf, 0xe0, 0xa6, 0x8a, 0x7c, 0x2c, 0x34, 0xf3, 0x6b,
+ 0xc9, 0x26, 0x17, 0xfc, 0xcd, 0xf0, 0xbd, 0xce, 0x4b, 0x65, 0x01, 0x8f, 0x19, 0xff, 0x20, 0xd9,
+ 0xcb, 0x02, 0x1e, 0xcd, 0x40, 0xd0, 0x37, 0xa1, 0xce, 0x8d, 0xdf, 0xe5, 0x54, 0xba, 0xc5, 0x54,
+ 0xa4, 0x95, 0xf9, 0x4e, 0x74, 0x04, 0xab, 0x81, 0x19, 0x9a, 0x63, 0xc2, 0xcd, 0x78, 0x15, 0x90,
+ 0xce, 0xcb, 0x1c, 0xf7, 0x95, 0x19, 0x97, 0x83, 0xda, 0xfb, 0xe4, 0x2a, 0x60, 0xb2, 0xac, 0x04,
+ 0x69, 0x00, 0x33, 0x50, 0xec, 0x71, 0x69, 0x88, 0x6d, 0xe4, 0xe8, 0xde, 0x29, 0x33, 0xd0, 0x99,
+ 0xc2, 0xca, 0x1f, 0xb0, 0x15, 0x17, 0x3e, 0xd9, 0x6b, 0xc1, 0xa2, 0x44, 0xd6, 0xdf, 0x86, 0xe6,
+ 0x91, 0x6f, 0x89, 0xe4, 0x0e, 0x41, 0xdd, 0x75, 0x3c, 0x91, 0x9d, 0xad, 0x60, 0xfe, 0x1b, 0x6d,
+ 0x41, 0xc3, 0xf2, 0xdd, 0x78, 0xec, 0xf1, 0x8c, 0x6b, 0x05, 0xcb, 0x95, 0x6e, 0xc0, 0x9a, 0xc8,
+ 0xd3, 0x30, 0xb9, 0x20, 0x21, 0xf1, 0x2c, 0x82, 0xda, 0x50, 0x8b, 0x43, 0x87, 0x63, 0xb7, 0x30,
+ 0xfb, 0x89, 0x1e, 0x40, 0xd3, 0x95, 0xc4, 0x65, 0xc2, 0x36, 0xc3, 0xc0, 0x8a, 0x05, 0x9c, 0xec,
+ 0xd7, 0x87, 0xd0, 0x10, 0x07, 0x14, 0xd0, 0x45, 0x50, 0xb7, 0xcd, 0xc8, 0xe4, 0x34, 0x5b, 0x98,
+ 0xff, 0x46, 0xbf, 0x03, 0x30, 0x26, 0xb6, 0x63, 0x0a, 0x7d, 0xd5, 0xf9, 0x93, 0x16, 0x87, 0x30,
+ 0x91, 0x1f, 0xd5, 0x9b, 0xb5, 0x76, 0x5d, 0xff, 0x79, 0x17, 0xd6, 0x72, 0xc9, 0x61, 0x01, 0xf9,
+ 0x87, 0xb0, 0x78, 0x41, 0xcc, 0x28, 0x0e, 0x89, 0xe4, 0xfa, 0x1b, 0xd7, 0x4a, 0x33, 0x77, 0x0e,
+ 0x05, 0x12, 0x56, 0xd8, 0x68, 0x00, 0x4d, 0xe6, 0xf1, 0xc4, 0x8b, 0x68, 0xa7, 0xb6, 0x5d, 0xbb,
+ 0x3e, 0xa5, 0x7d, 0x81, 0x85, 0x13, 0xf4, 0xee, 0x87, 0xb0, 0x28, 0x81, 0x19, 0xad, 0x6a, 0x37,
+ 0xd3, 0x2a, 0xd3, 0x5c, 0x44, 0x9e, 0x45, 0x4a, 0x73, 0xec, 0x77, 0xf7, 0xdf, 0x3a, 0xb0, 0x28,
+ 0x59, 0x9f, 0x8b, 0x76, 0x0f, 0xea, 0x91, 0x39, 0x62, 0x05, 0x40, 0x6d, 0x76, 0x00, 0x9b, 0xa1,
+ 0xb3, 0x9d, 0x27, 0xe6, 0x08, 0x73, 0x74, 0xd4, 0x85, 0xa6, 0x6b, 0x7a, 0xa3, 0xd8, 0x1c, 0x89,
+ 0xdc, 0xbc, 0x85, 0x93, 0x35, 0x2b, 0x3f, 0x9e, 0x92, 0xab, 0x4f, 0xfd, 0xd0, 0x96, 0x16, 0x56,
+ 0x4b, 0x26, 0x98, 0x67, 0x8e, 0x09, 0x4f, 0xa3, 0x5b, 0x98, 0xff, 0x46, 0xdb, 0xb0, 0x64, 0x13,
+ 0x6a, 0x85, 0x4e, 0xc0, 0xe5, 0x69, 0xf0, 0x47, 0x69, 0x10, 0x7a, 0x1f, 0x9a, 0xd6, 0xa5, 0xe3,
+ 0xda, 0x21, 0xf1, 0x3a, 0x8b, 0x9c, 0xed, 0x07, 0x37, 0x63, 0x5b, 0xfe, 0xdd, 0x67, 0x44, 0x70,
+ 0x42, 0xab, 0x4b, 0xa0, 0xf6, 0xc4, 0x1c, 0xcd, 0x6b, 0x29, 0x2e, 0x50, 0x35, 0x25, 0xd0, 0x2a,
+ 0x54, 0x1d, 0x5b, 0x2a, 0xa5, 0xea, 0xd8, 0xdd, 0x5f, 0x2e, 0xc0, 0x72, 0x9a, 0x03, 0x74, 0x06,
+ 0xf5, 0x30, 0x76, 0x55, 0x7d, 0xf5, 0xde, 0x8b, 0xcb, 0xb2, 0x83, 0x63, 0x5e, 0xf6, 0x70, 0x72,
+ 0xe8, 0x23, 0x80, 0x73, 0xd3, 0x7a, 0x3a, 0x0a, 0xfd, 0xd8, 0xb3, 0xe5, 0x3b, 0xf1, 0xce, 0xcd,
+ 0x88, 0xef, 0x25, 0xf8, 0xac, 0x18, 0x9a, 0x50, 0x43, 0x4f, 0xa0, 0x49, 0x2d, 0xe2, 0x99, 0xa1,
+ 0xe3, 0xcb, 0x52, 0xec, 0xed, 0x9b, 0x51, 0x1e, 0x4a, 0x6c, 0x76, 0x39, 0x28, 0x4a, 0xdd, 0x5f,
+ 0x69, 0x50, 0x67, 0x22, 0xcc, 0x65, 0x82, 0x94, 0xb7, 0x55, 0x8b, 0xbd, 0xad, 0x36, 0xdb, 0xdb,
+ 0xea, 0xd3, 0xde, 0xf6, 0xc7, 0x29, 0x6f, 0x5b, 0xe0, 0xde, 0x76, 0x30, 0xa7, 0x85, 0xf2, 0x7e,
+ 0xf7, 0xef, 0x1a, 0xb4, 0x12, 0x78, 0xce, 0x6c, 0xda, 0x97, 0x66, 0xb6, 0xea, 0xaf, 0xcb, 0x6c,
+ 0x7b, 0x8b, 0xb0, 0xf0, 0x89, 0xe9, 0xc6, 0x24, 0xf9, 0xd1, 0xfd, 0x5c, 0x03, 0x98, 0x30, 0xf1,
+ 0x1b, 0x65, 0xce, 0x3e, 0x2c, 0xb0, 0x0c, 0x82, 0x4a, 0x5b, 0xde, 0xbf, 0xa1, 0xfc, 0x11, 0x09,
+ 0xb0, 0x20, 0xd0, 0xfd, 0x59, 0x03, 0x9a, 0x4a, 0x1f, 0xbf, 0x09, 0x21, 0x38, 0xa5, 0xa9, 0x5a,
+ 0xb1, 0xa6, 0xea, 0xb3, 0x35, 0xb5, 0x50, 0xa2, 0xa9, 0xc6, 0x9c, 0x9a, 0x42, 0xdf, 0x87, 0x26,
+ 0x79, 0x66, 0xb2, 0xd2, 0x8c, 0xca, 0x80, 0xfd, 0xde, 0x8b, 0xb9, 0xdd, 0x4e, 0x4f, 0x92, 0xc1,
+ 0x09, 0x41, 0x19, 0x5e, 0x9b, 0x49, 0x78, 0xfd, 0x49, 0x0d, 0x9a, 0x6a, 0xdb, 0x6f, 0xa3, 0x59,
+ 0x3e, 0x84, 0xe5, 0xc8, 0x3c, 0x77, 0x89, 0x71, 0x49, 0x4c, 0x9b, 0x84, 0xb2, 0x5b, 0xf4, 0xf6,
+ 0x4d, 0xd9, 0x3b, 0x77, 0x09, 0xf6, 0x3f, 0xc5, 0x4b, 0x9c, 0x56, 0x9f, 0x93, 0x42, 0x67, 0x00,
+ 0x82, 0xf4, 0xb9, 0x6f, 0x5f, 0x49, 0x4b, 0xbd, 0x28, 0xe1, 0x16, 0xa7, 0xb4, 0xe7, 0xdb, 0x57,
+ 0xdd, 0xbf, 0xaa, 0x42, 0x53, 0xc1, 0xe7, 0xb2, 0xc8, 0xfb, 0xb0, 0x60, 0x11, 0xd7, 0x55, 0x26,
+ 0xf9, 0xce, 0x8b, 0xb1, 0x26, 0x7e, 0xec, 0x13, 0xd7, 0xc5, 0x82, 0xdc, 0xd4, 0x0d, 0xfd, 0x31,
+ 0xb4, 0x92, 0x3d, 0x73, 0x31, 0xbc, 0x29, 0x03, 0xa2, 0x0c, 0x5d, 0x32, 0x3a, 0xfe, 0x68, 0x01,
+ 0xea, 0xbc, 0xa8, 0xfd, 0xd2, 0xe2, 0x22, 0xcf, 0x16, 0x6b, 0x93, 0x6c, 0x11, 0x7d, 0x0c, 0x60,
+ 0xfb, 0x96, 0x41, 0xa3, 0xd0, 0xf1, 0x46, 0xb2, 0x6b, 0xf9, 0x87, 0x37, 0x7f, 0xa1, 0x77, 0x0e,
+ 0x7c, 0x6b, 0xc8, 0x69, 0xf4, 0x2b, 0xb8, 0x65, 0xab, 0x05, 0x27, 0x6f, 0x46, 0xa6, 0xc1, 0x6d,
+ 0x2e, 0x3d, 0xf2, 0x85, 0xc8, 0x9b, 0x91, 0xc9, 0x35, 0xcf, 0xc9, 0xab, 0x85, 0xb4, 0xcf, 0x62,
+ 0x62, 0x9f, 0xbf, 0xd1, 0xa0, 0x95, 0x6c, 0x9d, 0x4b, 0x8b, 0x8f, 0xa0, 0x1e, 0xfa, 0x9f, 0x2a,
+ 0x87, 0x7a, 0x51, 0x5f, 0xe7, 0x34, 0xba, 0x3f, 0x65, 0x5c, 0x25, 0x2a, 0x99, 0x87, 0xab, 0x6c,
+ 0x55, 0x54, 0xcd, 0x55, 0x45, 0xcc, 0xf4, 0x96, 0xef, 0x45, 0xc4, 0x53, 0x36, 0x56, 0x4b, 0x74,
+ 0x07, 0x5a, 0x36, 0x71, 0x9d, 0xb1, 0x13, 0x91, 0x50, 0x55, 0x53, 0x09, 0x60, 0x0f, 0xa0, 0x69,
+ 0x86, 0x23, 0x2e, 0x83, 0xfe, 0xa3, 0x2a, 0xc0, 0xa4, 0xd5, 0x8d, 0xde, 0xcd, 0x35, 0xf9, 0x5f,
+ 0x2b, 0x6b, 0xf2, 0x27, 0xc5, 0x63, 0xd2, 0xeb, 0xdf, 0x86, 0xe5, 0x49, 0xc7, 0xd9, 0x51, 0x69,
+ 0x3e, 0xa8, 0x0e, 0xf2, 0xc0, 0x46, 0x6f, 0xc1, 0xe6, 0x54, 0xf7, 0x9c, 0xed, 0x14, 0x01, 0x6e,
+ 0x3d, 0xd7, 0x17, 0x1f, 0xd8, 0x68, 0x53, 0x7a, 0x71, 0x43, 0x76, 0x21, 0x84, 0x1f, 0x77, 0xa0,
+ 0x71, 0xee, 0x78, 0x66, 0x78, 0xc5, 0xbd, 0x61, 0xb9, 0x5f, 0xc1, 0x72, 0x9d, 0xd3, 0x59, 0x33,
+ 0xa7, 0xb3, 0xbd, 0x06, 0xd4, 0x59, 0x50, 0x7b, 0x54, 0x6f, 0x56, 0xdb, 0x35, 0x59, 0x57, 0xfe,
+ 0x77, 0x0d, 0x1a, 0xa2, 0xf5, 0x2b, 0x3d, 0x4c, 0x53, 0x1e, 0xa6, 0xca, 0xcb, 0x6a, 0xa6, 0x7a,
+ 0x9d, 0xca, 0x36, 0xd2, 0x45, 0x4f, 0x3d, 0x57, 0xf4, 0xbc, 0x9b, 0xcd, 0x33, 0xde, 0x28, 0xeb,
+ 0x3c, 0xcb, 0x3f, 0xe9, 0x2b, 0xf3, 0x81, 0xbc, 0x7c, 0xc4, 0xdd, 0xfb, 0xfa, 0x35, 0xb0, 0x27,
+ 0x37, 0xce, 0x36, 0x2c, 0x9b, 0x34, 0x32, 0x3c, 0xdf, 0x26, 0x86, 0x63, 0x8b, 0x2b, 0xb7, 0x85,
+ 0xc1, 0xa4, 0xd1, 0xb1, 0x6f, 0x93, 0x81, 0x4d, 0xbb, 0xef, 0x41, 0x2b, 0x41, 0x4a, 0x24, 0xd3,
+ 0x52, 0x92, 0xdd, 0x85, 0xa5, 0x14, 0x09, 0xe5, 0x82, 0x09, 0x85, 0xee, 0xdf, 0x6a, 0x00, 0x13,
+ 0xa6, 0x93, 0x90, 0xa3, 0xa5, 0x42, 0xce, 0xc1, 0xc4, 0xdb, 0x64, 0xae, 0x79, 0xaf, 0x4c, 0x0a,
+ 0x46, 0x67, 0x57, 0xee, 0xc7, 0x09, 0x66, 0x3e, 0x34, 0x4f, 0xc9, 0x56, 0xcf, 0xcb, 0xa6, 0xff,
+ 0x43, 0x1d, 0xd0, 0x34, 0x49, 0xf4, 0x61, 0x26, 0x02, 0x96, 0xa6, 0xd5, 0xd3, 0xd8, 0x12, 0x34,
+ 0x23, 0xfa, 0x9d, 0x65, 0xa2, 0x9f, 0x90, 0xf5, 0x5b, 0x37, 0x24, 0x3d, 0x1d, 0xf5, 0xba, 0x8f,
+ 0x60, 0x2d, 0x77, 0x6c, 0xce, 0xc9, 0xb5, 0x92, 0xc0, 0x50, 0xcd, 0x04, 0x06, 0x76, 0x05, 0x2f,
+ 0xa5, 0x0e, 0x42, 0x1f, 0xc8, 0xb8, 0xa7, 0x71, 0xf7, 0xda, 0x7f, 0x11, 0x66, 0xd3, 0xbf, 0x27,
+ 0x41, 0xf0, 0xef, 0x35, 0x58, 0xcd, 0x3e, 0x40, 0x8e, 0xba, 0xb5, 0xc5, 0x61, 0xc3, 0x5f, 0xc3,
+ 0x61, 0xe9, 0x65, 0xea, 0x22, 0xef, 0xbe, 0xa1, 0x54, 0x36, 0xb9, 0xbe, 0x93, 0x2b, 0x58, 0x4b,
+ 0x5d, 0xc1, 0xe9, 0x5e, 0xda, 0xff, 0xd5, 0xa0, 0x99, 0x34, 0xd1, 0xf3, 0x71, 0xe0, 0x65, 0x68,
+ 0xc9, 0x2f, 0x49, 0xc9, 0x5b, 0xd0, 0x14, 0x80, 0x81, 0x8d, 0x0e, 0x01, 0x92, 0xa8, 0xa7, 0x5a,
+ 0x45, 0x6f, 0x94, 0xf7, 0x42, 0x93, 0x0f, 0x6d, 0xb8, 0xa5, 0x82, 0x23, 0xed, 0xfe, 0x6f, 0x55,
+ 0x70, 0xc0, 0x5f, 0xa5, 0x3c, 0x07, 0xaf, 0x82, 0xfc, 0x18, 0x95, 0x04, 0x57, 0xc1, 0xc6, 0x72,
+ 0x90, 0x28, 0x6c, 0x60, 0xa3, 0x1d, 0xd8, 0xc8, 0xb5, 0x55, 0xf9, 0xdb, 0x51, 0xe3, 0x6f, 0xc7,
+ 0x7a, 0xb6, 0x65, 0x3a, 0xb0, 0x29, 0xfa, 0x33, 0xe8, 0xf2, 0xfd, 0x63, 0x33, 0xb2, 0x2e, 0x0d,
+ 0xf5, 0xb6, 0x51, 0xc3, 0x75, 0x68, 0x24, 0x5e, 0xaa, 0xa5, 0xfb, 0x7f, 0x74, 0x4d, 0x51, 0xf8,
+ 0xd5, 0xfd, 0x98, 0x11, 0x52, 0x96, 0xa3, 0x47, 0x0e, 0x8d, 0xf0, 0x6d, 0x5a, 0x08, 0xa7, 0xe8,
+ 0x36, 0x2c, 0x5e, 0xfa, 0xfe, 0xd3, 0x49, 0xf8, 0x6f, 0xb0, 0xe5, 0xc0, 0xee, 0x52, 0xd8, 0x2a,
+ 0xa6, 0x85, 0x3e, 0x84, 0xcd, 0x22, 0x7e, 0xa5, 0x4b, 0xbd, 0x31, 0xbb, 0x77, 0x9c, 0xa1, 0x85,
+ 0xd1, 0x34, 0x4b, 0xfa, 0x37, 0x94, 0xc3, 0x26, 0x9f, 0x0f, 0x33, 0x46, 0xd7, 0xb2, 0x46, 0x9f,
+ 0x6c, 0x4f, 0x3e, 0x0e, 0x96, 0xf9, 0x88, 0x7e, 0x02, 0xab, 0xd9, 0x6f, 0x76, 0xbc, 0x81, 0xae,
+ 0xbe, 0xea, 0xcb, 0x38, 0xf4, 0x95, 0x19, 0x9a, 0x56, 0xdb, 0xf0, 0x04, 0x43, 0xff, 0x27, 0x0d,
+ 0x36, 0xf3, 0xdf, 0x16, 0xb9, 0xe3, 0x1c, 0xc3, 0x9a, 0xb8, 0x8d, 0x8d, 0x5c, 0xde, 0x71, 0xcd,
+ 0xbb, 0x7c, 0x55, 0x60, 0x27, 0x7d, 0xe5, 0x63, 0x58, 0x93, 0x5f, 0xe8, 0x72, 0xdd, 0xe0, 0xeb,
+ 0xd2, 0x13, 0xd8, 0x8a, 0x9e, 0xfe, 0xa7, 0xd0, 0xce, 0xf3, 0x5d, 0xaa, 0x69, 0xf4, 0x1d, 0x75,
+ 0x83, 0x8a, 0xe4, 0xec, 0xcd, 0xeb, 0x7d, 0x67, 0x4d, 0x5d, 0xa2, 0xfa, 0x2f, 0xaa, 0xb0, 0x96,
+ 0xfb, 0x08, 0x3f, 0xa7, 0xfa, 0xd1, 0x23, 0x68, 0x06, 0xae, 0x19, 0x5d, 0xf8, 0xe1, 0x58, 0xaa,
+ 0x63, 0xe7, 0x5a, 0x1f, 0xff, 0x77, 0x4e, 0x25, 0x16, 0x4e, 0xf0, 0x59, 0xb8, 0x36, 0xa3, 0x88,
+ 0x8c, 0x03, 0x91, 0xc7, 0xad, 0x60, 0xb5, 0x4c, 0xf2, 0x29, 0x9e, 0x2d, 0x65, 0xf3, 0x29, 0x46,
+ 0x73, 0x60, 0xcb, 0x30, 0xb1, 0x90, 0xa4, 0xc4, 0x1e, 0x34, 0xd5, 0x09, 0xe8, 0x75, 0x58, 0x75,
+ 0x58, 0xf9, 0xcb, 0xfc, 0x7b, 0xe2, 0x08, 0x2d, 0x9c, 0x83, 0xb2, 0xf3, 0x3f, 0x21, 0x21, 0x55,
+ 0x96, 0x6d, 0x61, 0xb5, 0x64, 0xd4, 0x7d, 0xaa, 0x6e, 0x5d, 0x9f, 0xb2, 0x74, 0xc8, 0x0a, 0x62,
+ 0xc9, 0x06, 0xfb, 0xa9, 0xff, 0x58, 0x9b, 0x98, 0x33, 0xf9, 0x4e, 0x3c, 0xa7, 0x6e, 0x67, 0xe5,
+ 0x88, 0xb5, 0x19, 0x39, 0xa2, 0x48, 0xe6, 0xf4, 0xbf, 0xd3, 0x84, 0x95, 0xd3, 0x23, 0x10, 0x73,
+ 0x72, 0x92, 0xcf, 0x67, 0xab, 0xd7, 0xce, 0x67, 0x67, 0xf1, 0xaa, 0xff, 0x4a, 0x2a, 0x2c, 0x33,
+ 0x51, 0x71, 0x2c, 0xbf, 0xff, 0xf3, 0x73, 0x42, 0x42, 0x63, 0x37, 0x92, 0xdc, 0xbe, 0x5a, 0x3e,
+ 0xa7, 0x81, 0xf9, 0x5e, 0xf1, 0xf5, 0x7f, 0xb2, 0xce, 0x8a, 0x5d, 0x9d, 0x5b, 0xec, 0xda, 0xb5,
+ 0xc5, 0xae, 0xcf, 0x12, 0xfb, 0x5f, 0xab, 0x22, 0x00, 0xa6, 0x98, 0xdc, 0x87, 0x06, 0x8d, 0xcc,
+ 0x28, 0x16, 0xc3, 0x48, 0xab, 0xb3, 0xbe, 0xf8, 0x67, 0xb1, 0x76, 0x86, 0x1c, 0x05, 0x4b, 0x54,
+ 0xe6, 0xbb, 0x72, 0xa7, 0xf2, 0x5d, 0xb9, 0x64, 0x85, 0x97, 0x2d, 0x07, 0x9f, 0x64, 0x6b, 0x7a,
+ 0x46, 0xe1, 0xa5, 0xc6, 0xa3, 0x70, 0xb2, 0x1f, 0xbd, 0x0e, 0x6b, 0x9f, 0x3a, 0xae, 0x6b, 0x9c,
+ 0x13, 0x23, 0x24, 0x51, 0xe8, 0x10, 0x21, 0x59, 0x13, 0xaf, 0x30, 0xf0, 0x1e, 0xc1, 0x02, 0xa8,
+ 0x13, 0x68, 0x08, 0x7e, 0xd0, 0x12, 0x2c, 0x9e, 0x1d, 0x7f, 0xf7, 0xf8, 0xe4, 0x83, 0xe3, 0x76,
+ 0x05, 0x01, 0x34, 0x4e, 0x77, 0x87, 0xc3, 0xde, 0x41, 0x5b, 0x63, 0x0f, 0x86, 0xdf, 0x1d, 0x9c,
+ 0x9e, 0xf6, 0x0e, 0xda, 0x55, 0xb6, 0x38, 0xed, 0x1d, 0x1f, 0x0c, 0x8e, 0x1f, 0xb6, 0x6b, 0x68,
+ 0x05, 0x5a, 0x67, 0xc7, 0x07, 0xbd, 0xc3, 0xc1, 0x71, 0xef, 0xa0, 0x5d, 0x67, 0xcb, 0xdd, 0xc7,
+ 0x7b, 0x83, 0x87, 0x67, 0x27, 0x67, 0xc3, 0xf6, 0x02, 0xa3, 0x71, 0xb8, 0x3b, 0x38, 0xea, 0x1d,
+ 0xb4, 0x1b, 0xfa, 0x5f, 0x4a, 0xcf, 0x4e, 0xcf, 0x62, 0x74, 0x60, 0x91, 0xc6, 0x96, 0x45, 0xa8,
+ 0x50, 0x5f, 0x13, 0xab, 0xe5, 0xbc, 0xc6, 0x4f, 0x69, 0xb4, 0x96, 0xd1, 0xa8, 0xfe, 0xb3, 0x2a,
+ 0x2c, 0xa7, 0x87, 0x3a, 0xd0, 0x6b, 0xb0, 0x7a, 0xce, 0x1c, 0xc0, 0x76, 0x42, 0x62, 0x45, 0x7e,
+ 0x78, 0x25, 0x6d, 0xb0, 0xc2, 0xa0, 0x07, 0x0a, 0x88, 0x1e, 0x81, 0xbc, 0x53, 0xa8, 0x61, 0xf9,
+ 0xde, 0x85, 0x33, 0x92, 0xf6, 0x78, 0xa5, 0xec, 0x02, 0xa1, 0xfb, 0x7c, 0x2b, 0x5e, 0xa1, 0xe9,
+ 0x25, 0xa3, 0x15, 0xc6, 0x1e, 0xe3, 0x56, 0xd1, 0xaa, 0x97, 0xd1, 0xc2, 0x62, 0xaf, 0xa2, 0x15,
+ 0xa6, 0x97, 0xe8, 0x03, 0xd8, 0xa0, 0x71, 0x10, 0xf8, 0x61, 0x64, 0x58, 0xac, 0x8e, 0x90, 0x04,
+ 0x45, 0x57, 0x64, 0x56, 0x2e, 0x21, 0x10, 0xf6, 0x7d, 0x5b, 0x11, 0x5d, 0xa7, 0x79, 0x90, 0xfe,
+ 0x73, 0x0d, 0x56, 0x32, 0x52, 0x30, 0x4d, 0x99, 0xe7, 0xd4, 0x77, 0xe3, 0x88, 0x18, 0x81, 0x19,
+ 0x5d, 0x8a, 0x8c, 0xa5, 0x85, 0x57, 0x14, 0xf4, 0x94, 0x01, 0x33, 0x85, 0x64, 0x35, 0x57, 0x48,
+ 0xee, 0xc3, 0xe2, 0x85, 0xe3, 0x46, 0x24, 0xa4, 0x52, 0x7d, 0xbf, 0x5b, 0xaa, 0xbe, 0x43, 0xbe,
+ 0x57, 0xf2, 0xa8, 0x30, 0xd1, 0x3b, 0xb0, 0xe0, 0x87, 0xb6, 0x6c, 0x0a, 0xcc, 0x9c, 0xdc, 0x91,
+ 0x24, 0x4e, 0xd8, 0x4e, 0x2c, 0x10, 0xf4, 0xcf, 0x34, 0xd8, 0x28, 0x20, 0xcd, 0x24, 0x8b, 0xcc,
+ 0x91, 0x41, 0x9e, 0x05, 0x21, 0xa1, 0x74, 0x72, 0xc9, 0xac, 0x44, 0xe6, 0xa8, 0x97, 0x00, 0xd1,
+ 0x3b, 0xd0, 0x61, 0x05, 0xa5, 0x11, 0x92, 0x51, 0xec, 0x9a, 0x61, 0x6a, 0xbf, 0xb8, 0xd7, 0x5b,
+ 0x78, 0x8b, 0x3d, 0xc7, 0xe2, 0xf1, 0x04, 0x91, 0xa2, 0xef, 0xc1, 0x66, 0x1c, 0x3a, 0x46, 0xe4,
+ 0x1b, 0xae, 0xe3, 0x11, 0x6a, 0x8c, 0xcd, 0x20, 0x60, 0xa5, 0x5b, 0x69, 0x9e, 0x7d, 0x16, 0x3a,
+ 0x4f, 0xfc, 0x23, 0xb6, 0xff, 0xb1, 0xd8, 0x8e, 0xd7, 0xe3, 0x3c, 0x48, 0x3f, 0x86, 0xf5, 0xa9,
+ 0x7d, 0xe8, 0x15, 0x58, 0xc9, 0x58, 0x4a, 0x8a, 0xb3, 0x9c, 0x36, 0x14, 0x2b, 0x26, 0x38, 0x33,
+ 0x9c, 0xf5, 0x3a, 0x16, 0x0b, 0xfd, 0x07, 0xb0, 0x9c, 0xd6, 0x1c, 0xaf, 0xdd, 0x55, 0x7d, 0xb6,
+ 0x3a, 0xab, 0x76, 0x4f, 0x63, 0xb0, 0xe2, 0x0d, 0x73, 0x1c, 0x56, 0x49, 0x53, 0x42, 0xc4, 0x8d,
+ 0x53, 0xc7, 0xfc, 0xb7, 0xfe, 0x13, 0x0d, 0x56, 0x32, 0x0e, 0xcd, 0x02, 0xb5, 0x43, 0x8d, 0x0b,
+ 0xd3, 0x71, 0x8d, 0x0b, 0x93, 0x46, 0x32, 0x12, 0x80, 0x43, 0x0f, 0x4d, 0xc7, 0x3d, 0x34, 0x69,
+ 0x84, 0xee, 0x00, 0x38, 0xd4, 0xb0, 0xc3, 0x2b, 0x23, 0x8c, 0xc5, 0xf5, 0xde, 0xc4, 0x4d, 0x87,
+ 0x1e, 0x84, 0x57, 0x38, 0xf6, 0x58, 0xde, 0xe5, 0x50, 0x5e, 0x0b, 0x5b, 0x22, 0xf7, 0xe0, 0x0f,
+ 0x87, 0x7c, 0x8d, 0xbe, 0x0a, 0xcb, 0x63, 0xf3, 0x19, 0x9f, 0x65, 0x70, 0x5d, 0xe2, 0x72, 0x97,
+ 0xa9, 0xe3, 0xa5, 0xb1, 0xf9, 0xec, 0x54, 0x82, 0xf4, 0xff, 0xaa, 0xc2, 0xfa, 0xd4, 0x1b, 0x81,
+ 0x4e, 0x60, 0xab, 0x70, 0xea, 0x48, 0xa5, 0xe9, 0x25, 0xc3, 0x19, 0x78, 0xe3, 0x7c, 0x6a, 0xa4,
+ 0x88, 0xa2, 0xc7, 0x70, 0xab, 0x68, 0xd0, 0x47, 0x65, 0x84, 0x65, 0xf4, 0x90, 0x99, 0x1f, 0xe3,
+ 0xa1, 0xe8, 0x04, 0xda, 0xb9, 0x22, 0x49, 0x55, 0x6d, 0xd7, 0x1a, 0x3e, 0xc1, 0x6b, 0xd9, 0x3a,
+ 0x8a, 0xa2, 0x23, 0x58, 0xcb, 0x4e, 0x7c, 0xa8, 0xd2, 0xe9, 0x3a, 0xa3, 0x24, 0x78, 0x35, 0x33,
+ 0x48, 0x42, 0x99, 0x99, 0xeb, 0x7c, 0xde, 0x28, 0x5f, 0x02, 0x4e, 0xbf, 0x6a, 0xd5, 0xa2, 0x57,
+ 0xed, 0x14, 0xda, 0xb2, 0x00, 0x08, 0x55, 0x12, 0x2e, 0x23, 0xc6, 0x35, 0x33, 0x76, 0x59, 0x3f,
+ 0x24, 0x00, 0xfd, 0x5f, 0x34, 0x58, 0xcd, 0xea, 0x60, 0x8a, 0xb7, 0x1e, 0x2c, 0x06, 0x2c, 0x6b,
+ 0x0d, 0x55, 0x75, 0xf0, 0xb5, 0xeb, 0xa8, 0xf2, 0x54, 0xa0, 0x60, 0x85, 0xfb, 0x25, 0xf0, 0x1e,
+ 0xc1, 0xad, 0xc2, 0x33, 0xd1, 0x56, 0xa6, 0xd5, 0xd9, 0x4a, 0x7a, 0x98, 0xfb, 0xf2, 0xad, 0xad,
+ 0xf2, 0xb7, 0xf6, 0xad, 0x1b, 0x88, 0x31, 0x79, 0x7d, 0xf5, 0xff, 0xd4, 0x60, 0x25, 0x63, 0xe5,
+ 0xc2, 0xee, 0xda, 0x5b, 0xb0, 0x31, 0x3b, 0x1e, 0xa2, 0x70, 0x3a, 0x16, 0x1e, 0xc1, 0x2b, 0x01,
+ 0x57, 0x8c, 0x71, 0xe1, 0x87, 0x05, 0xb1, 0x54, 0xd4, 0xc5, 0xf2, 0x4d, 0xfe, 0x8a, 0xd8, 0x7a,
+ 0xe8, 0x87, 0x53, 0x51, 0x95, 0x97, 0xbe, 0xe8, 0x1e, 0xb4, 0x63, 0x4a, 0x38, 0x29, 0x39, 0x4a,
+ 0x46, 0x65, 0x9a, 0xb3, 0x1a, 0x53, 0x72, 0xe8, 0x87, 0x72, 0x24, 0x8c, 0xea, 0x47, 0xb0, 0x55,
+ 0x3c, 0xa6, 0x34, 0xa3, 0x69, 0x08, 0x53, 0x3e, 0x9a, 0x82, 0xe8, 0xff, 0xa8, 0xc1, 0xad, 0xc2,
+ 0x39, 0x4e, 0x16, 0x72, 0xd4, 0x18, 0xa8, 0x3d, 0x29, 0x05, 0x97, 0x12, 0xd8, 0x60, 0x32, 0x2a,
+ 0x9b, 0x4e, 0x95, 0xab, 0xd7, 0x4f, 0x95, 0xd5, 0xa8, 0x6c, 0x2a, 0x0f, 0xed, 0xc2, 0xa2, 0x9a,
+ 0xa4, 0xab, 0xc9, 0x26, 0xb3, 0x02, 0xec, 0x35, 0xa1, 0x21, 0xce, 0xd0, 0xbf, 0x0d, 0x77, 0xca,
+ 0x46, 0x41, 0x59, 0x28, 0x95, 0x65, 0xf2, 0xa4, 0x84, 0x15, 0x80, 0x81, 0xad, 0x3f, 0x80, 0x97,
+ 0x4b, 0x66, 0xff, 0xca, 0x71, 0x3d, 0x78, 0x69, 0xe6, 0x24, 0x68, 0x29, 0x26, 0xfa, 0x56, 0x32,
+ 0x25, 0x5f, 0x7d, 0xfe, 0x94, 0xbc, 0x9a, 0x91, 0xd7, 0x3f, 0x29, 0x16, 0x34, 0x99, 0x82, 0x2c,
+ 0x3d, 0x32, 0xd5, 0xd2, 0xa9, 0xa6, 0x5b, 0x3a, 0x53, 0x95, 0x6c, 0x2d, 0x5f, 0xc9, 0xea, 0x71,
+ 0xa1, 0x8e, 0xbe, 0xf4, 0x63, 0xff, 0xb9, 0x0a, 0x68, 0x7a, 0xfa, 0xb4, 0xfc, 0xb8, 0xaf, 0x03,
+ 0x9a, 0xee, 0xb2, 0xc9, 0x93, 0xdb, 0xf9, 0x26, 0xdb, 0xcc, 0x9e, 0x55, 0x6d, 0xee, 0x9e, 0x15,
+ 0xfa, 0x08, 0x36, 0xd3, 0x4d, 0xc1, 0xa4, 0xcf, 0x5e, 0xbf, 0x61, 0x9f, 0x1d, 0x05, 0xd3, 0x8d,
+ 0xf2, 0xbc, 0xea, 0x16, 0xa6, 0x54, 0xf7, 0x63, 0x76, 0xfb, 0xe7, 0x99, 0x42, 0x3b, 0xb0, 0x91,
+ 0xbd, 0x0c, 0x8d, 0x54, 0x80, 0x58, 0xcf, 0xdc, 0x75, 0xc7, 0x2c, 0x5a, 0xec, 0xc3, 0xc2, 0x28,
+ 0xf4, 0xe3, 0xa0, 0x7c, 0x5a, 0x6f, 0xea, 0x9c, 0x9d, 0x87, 0x0c, 0x09, 0x0b, 0xdc, 0xee, 0x5f,
+ 0xc0, 0x02, 0x5f, 0xb3, 0xcc, 0x4c, 0x8c, 0xa6, 0x8b, 0x31, 0x48, 0xb1, 0x28, 0xfe, 0xfe, 0xca,
+ 0x07, 0xfc, 0xd4, 0x44, 0x4f, 0xe9, 0x80, 0xdf, 0xac, 0xc3, 0x13, 0x74, 0xfd, 0x7f, 0x34, 0xd8,
+ 0x2a, 0x9e, 0xb4, 0x2d, 0xf7, 0xa4, 0x1f, 0xc0, 0x2d, 0x35, 0xce, 0x6b, 0x4f, 0xdd, 0x01, 0x33,
+ 0x53, 0x7c, 0x75, 0x84, 0x3d, 0x89, 0xe8, 0x78, 0x73, 0x34, 0x0d, 0x9c, 0xed, 0x20, 0xb5, 0xf9,
+ 0x1d, 0x44, 0xff, 0x3e, 0x6c, 0x14, 0x30, 0x52, 0xf8, 0x0d, 0xe8, 0x9b, 0xb0, 0x59, 0xe0, 0x13,
+ 0xc9, 0x4d, 0x37, 0xe5, 0x14, 0xf4, 0xcd, 0x3f, 0x80, 0x76, 0x3e, 0x33, 0x46, 0xb7, 0x61, 0xe3,
+ 0x04, 0x1f, 0xf4, 0xb0, 0x71, 0x72, 0x68, 0xf0, 0xba, 0x79, 0xf0, 0x64, 0x70, 0x22, 0xeb, 0x6d,
+ 0xbc, 0x7b, 0x7c, 0x70, 0xf2, 0xb8, 0xad, 0xbd, 0x79, 0x04, 0x2f, 0xcd, 0xbc, 0x9c, 0x19, 0x85,
+ 0xfd, 0xb3, 0xfd, 0xb3, 0xc7, 0x7b, 0x3d, 0x6c, 0xf4, 0xbe, 0x77, 0x8a, 0x7b, 0xc3, 0xa1, 0xa0,
+ 0xb0, 0x05, 0x08, 0xf7, 0x1e, 0x9e, 0x1d, 0xed, 0x66, 0xe0, 0xda, 0x9e, 0xfe, 0x1f, 0x9f, 0xdf,
+ 0xd5, 0x3e, 0xfb, 0xfc, 0xae, 0xf6, 0xcb, 0xcf, 0xef, 0x6a, 0x7f, 0xfd, 0xc5, 0xdd, 0xca, 0x67,
+ 0x5f, 0xdc, 0xad, 0xfc, 0xe2, 0x8b, 0xbb, 0x95, 0x8f, 0x9a, 0x4a, 0x5d, 0xe7, 0x0d, 0xfe, 0xbf,
+ 0x5b, 0xbf, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x62, 0xfa, 0x08, 0x2b, 0xcd, 0x35, 0x00,
+ 0x00,
+}
+
+func (m *Timestamp) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Timestamp) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Timestamp) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Nanos != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Nanos))
+ i--
+ dAtA[i] = 0x10
+ }
+ if m.Seconds != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Seconds))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Duration) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Duration) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Duration) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Nanos != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Nanos))
+ i--
+ dAtA[i] = 0x10
+ }
+ if m.Seconds != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Seconds))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Envelope) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Envelope) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Message != nil {
+ {
+ size := m.Message.Size()
+ i -= size
+ if _, err := m.Message.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Envelope_Source) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_Source) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Source != nil {
+ {
+ size, err := m.Source.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_GherkinDocument) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_GherkinDocument) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.GherkinDocument != nil {
+ {
+ size, err := m.GherkinDocument.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_Pickle) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_Pickle) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Pickle != nil {
+ {
+ size, err := m.Pickle.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_Attachment) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_Attachment) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Attachment != nil {
+ {
+ size, err := m.Attachment.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestCaseStarted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestCaseStarted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestCaseStarted != nil {
+ {
+ size, err := m.TestCaseStarted.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x2a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestStepStarted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestStepStarted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestStepStarted != nil {
+ {
+ size, err := m.TestStepStarted.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x32
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestStepFinished) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestStepFinished) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestStepFinished != nil {
+ {
+ size, err := m.TestStepFinished.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestCaseFinished) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestCaseFinished) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestCaseFinished != nil {
+ {
+ size, err := m.TestCaseFinished.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x42
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_PickleAccepted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_PickleAccepted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.PickleAccepted != nil {
+ {
+ size, err := m.PickleAccepted.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x4a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_PickleRejected) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_PickleRejected) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.PickleRejected != nil {
+ {
+ size, err := m.PickleRejected.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x52
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestCasePrepared) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestCasePrepared) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestCasePrepared != nil {
+ {
+ size, err := m.TestCasePrepared.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x5a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestRunStarted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestRunStarted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestRunStarted != nil {
+ {
+ size, err := m.TestRunStarted.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x62
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestRunFinished) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestRunFinished) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestRunFinished != nil {
+ {
+ size, err := m.TestRunFinished.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x6a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandStart) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandStart) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandStart != nil {
+ {
+ size, err := m.CommandStart.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x72
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandActionComplete) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandActionComplete) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandActionComplete != nil {
+ {
+ size, err := m.CommandActionComplete.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x7a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandRunBeforeTestRunHooks) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandRunBeforeTestRunHooks) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandRunBeforeTestRunHooks != nil {
+ {
+ size, err := m.CommandRunBeforeTestRunHooks.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0x82
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandInitializeTestCase) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandInitializeTestCase) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandInitializeTestCase != nil {
+ {
+ size, err := m.CommandInitializeTestCase.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0x8a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandRunBeforeTestCaseHook) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandRunBeforeTestCaseHook) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandRunBeforeTestCaseHook != nil {
+ {
+ size, err := m.CommandRunBeforeTestCaseHook.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0x92
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandRunTestStep) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandRunTestStep) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandRunTestStep != nil {
+ {
+ size, err := m.CommandRunTestStep.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0x9a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandRunAfterTestCaseHook) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandRunAfterTestCaseHook) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandRunAfterTestCaseHook != nil {
+ {
+ size, err := m.CommandRunAfterTestCaseHook.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xa2
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandRunAfterTestRunHooks) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandRunAfterTestRunHooks) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandRunAfterTestRunHooks != nil {
+ {
+ size, err := m.CommandRunAfterTestRunHooks.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xaa
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandGenerateSnippet) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandGenerateSnippet) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.CommandGenerateSnippet != nil {
+ {
+ size, err := m.CommandGenerateSnippet.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xb2
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_CommandError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_CommandError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ i -= len(m.CommandError)
+ copy(dAtA[i:], m.CommandError)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.CommandError)))
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xba
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_TestCase) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_TestCase) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestCase != nil {
+ {
+ size, err := m.TestCase.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xc2
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_StepDefinition) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_StepDefinition) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.StepDefinition != nil {
+ {
+ size, err := m.StepDefinition.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xca
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_Hook) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_Hook) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Hook != nil {
+ {
+ size, err := m.Hook.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xd2
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_ParameterType) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_ParameterType) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.ParameterType != nil {
+ {
+ size, err := m.ParameterType.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xda
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Envelope_UndefinedParameterType) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Envelope_UndefinedParameterType) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.UndefinedParameterType != nil {
+ {
+ size, err := m.UndefinedParameterType.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0xe2
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Location) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Location) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Location) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Column != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Column))
+ i--
+ dAtA[i] = 0x10
+ }
+ if m.Line != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Line))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *SourceReference) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *SourceReference) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *SourceReference) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Uri) > 0 {
+ i -= len(m.Uri)
+ copy(dAtA[i:], m.Uri)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Uri)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Source) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Source) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Source) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.MediaType) > 0 {
+ i -= len(m.MediaType)
+ copy(dAtA[i:], m.MediaType)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.MediaType)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Data) > 0 {
+ i -= len(m.Data)
+ copy(dAtA[i:], m.Data)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Data)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Uri) > 0 {
+ i -= len(m.Uri)
+ copy(dAtA[i:], m.Uri)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Uri)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Comments) > 0 {
+ for iNdEx := len(m.Comments) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Comments[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if m.Feature != nil {
+ {
+ size, err := m.Feature.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Uri) > 0 {
+ i -= len(m.Uri)
+ copy(dAtA[i:], m.Uri)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Uri)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Comment) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Comment) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Comment) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Text) > 0 {
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Children) > 0 {
+ for iNdEx := len(m.Children) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Children[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ }
+ }
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x32
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.Keyword) > 0 {
+ i -= len(m.Keyword)
+ copy(dAtA[i:], m.Keyword)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Keyword)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Language) > 0 {
+ i -= len(m.Language)
+ copy(dAtA[i:], m.Language)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Language)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Tags) > 0 {
+ for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Tags[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_Tag) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_Tag) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Tag) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Value != nil {
+ {
+ size := m.Value.Size()
+ i -= size
+ if _, err := m.Value.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule_) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule_) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Rule != nil {
+ {
+ size, err := m.Rule.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+func (m *GherkinDocument_Feature_FeatureChild_Background) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Background) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Background != nil {
+ {
+ size, err := m.Background.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+func (m *GherkinDocument_Feature_FeatureChild_Scenario) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Scenario) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Scenario != nil {
+ {
+ size, err := m.Scenario.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Children) > 0 {
+ for iNdEx := len(m.Children) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Children[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x2a
+ }
+ }
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Keyword) > 0 {
+ i -= len(m.Keyword)
+ copy(dAtA[i:], m.Keyword)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Keyword)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Value != nil {
+ {
+ size := m.Value.Size()
+ i -= size
+ if _, err := m.Value.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild_Background) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild_Background) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Background != nil {
+ {
+ size, err := m.Background.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild_Scenario) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild_Scenario) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Scenario != nil {
+ {
+ size, err := m.Scenario.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+func (m *GherkinDocument_Feature_Background) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_Background) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Background) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Steps) > 0 {
+ for iNdEx := len(m.Steps) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Steps[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x2a
+ }
+ }
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Keyword) > 0 {
+ i -= len(m.Keyword)
+ copy(dAtA[i:], m.Keyword)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Keyword)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_Scenario) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_Scenario) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Scenario) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0x42
+ }
+ if len(m.Examples) > 0 {
+ for iNdEx := len(m.Examples) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Examples[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ }
+ }
+ if len(m.Steps) > 0 {
+ for iNdEx := len(m.Steps) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Steps[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x32
+ }
+ }
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Keyword) > 0 {
+ i -= len(m.Keyword)
+ copy(dAtA[i:], m.Keyword)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Keyword)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Tags) > 0 {
+ for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Tags[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TableBody) > 0 {
+ for iNdEx := len(m.TableBody) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.TableBody[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ }
+ }
+ if m.TableHeader != nil {
+ {
+ size, err := m.TableHeader.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x32
+ }
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Keyword) > 0 {
+ i -= len(m.Keyword)
+ copy(dAtA[i:], m.Keyword)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Keyword)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Tags) > 0 {
+ for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Tags[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_TableRow) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_TableRow) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_TableRow) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Cells) > 0 {
+ for iNdEx := len(m.Cells) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Cells[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_TableRow_TableCell) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_TableRow_TableCell) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_TableRow_TableCell) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Value) > 0 {
+ i -= len(m.Value)
+ copy(dAtA[i:], m.Value)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Value)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_Step) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_Step) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Step) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0x3a
+ }
+ if m.Argument != nil {
+ {
+ size := m.Argument.Size()
+ i -= size
+ if _, err := m.Argument.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ }
+ }
+ if len(m.Text) > 0 {
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Keyword) > 0 {
+ i -= len(m.Keyword)
+ copy(dAtA[i:], m.Keyword)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Keyword)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_Step_DocString_) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Step_DocString_) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.DocString != nil {
+ {
+ size, err := m.DocString.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x2a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *GherkinDocument_Feature_Step_DataTable_) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Step_DataTable_) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.DataTable != nil {
+ {
+ size, err := m.DataTable.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x32
+ }
+ return len(dAtA) - i, nil
+}
+func (m *GherkinDocument_Feature_Step_DataTable) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_Step_DataTable) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Step_DataTable) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Rows) > 0 {
+ for iNdEx := len(m.Rows) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Rows[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Delimiter) > 0 {
+ i -= len(m.Delimiter)
+ copy(dAtA[i:], m.Delimiter)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Delimiter)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Content) > 0 {
+ i -= len(m.Content)
+ copy(dAtA[i:], m.Content)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Content)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.MediaType) > 0 {
+ i -= len(m.MediaType)
+ copy(dAtA[i:], m.MediaType)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.MediaType)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Location != nil {
+ {
+ size, err := m.Location.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Attachment) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Attachment) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Attachment) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.MediaType) > 0 {
+ i -= len(m.MediaType)
+ copy(dAtA[i:], m.MediaType)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.MediaType)))
+ i--
+ dAtA[i] = 0x42
+ }
+ if m.Body != nil {
+ {
+ size := m.Body.Size()
+ i -= size
+ if _, err := m.Body.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ }
+ }
+ if len(m.TestCaseStartedId) > 0 {
+ i -= len(m.TestCaseStartedId)
+ copy(dAtA[i:], m.TestCaseStartedId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseStartedId)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.TestStepId) > 0 {
+ i -= len(m.TestStepId)
+ copy(dAtA[i:], m.TestStepId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestStepId)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if m.Source != nil {
+ {
+ size, err := m.Source.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Attachment_Text) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Attachment_Text) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0x32
+ return len(dAtA) - i, nil
+}
+func (m *Attachment_Binary) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Attachment_Binary) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.Binary != nil {
+ i -= len(m.Binary)
+ copy(dAtA[i:], m.Binary)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Binary)))
+ i--
+ dAtA[i] = 0x3a
+ }
+ return len(dAtA) - i, nil
+}
+func (m *Pickle) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Pickle) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Pickle) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.AstNodeIds) > 0 {
+ for iNdEx := len(m.AstNodeIds) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.AstNodeIds[iNdEx])
+ copy(dAtA[i:], m.AstNodeIds[iNdEx])
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.AstNodeIds[iNdEx])))
+ i--
+ dAtA[i] = 0x3a
+ }
+ }
+ if len(m.Tags) > 0 {
+ for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Tags[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x32
+ }
+ }
+ if len(m.Steps) > 0 {
+ for iNdEx := len(m.Steps) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Steps[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x2a
+ }
+ }
+ if len(m.Language) > 0 {
+ i -= len(m.Language)
+ copy(dAtA[i:], m.Language)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Language)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Uri) > 0 {
+ i -= len(m.Uri)
+ copy(dAtA[i:], m.Uri)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Uri)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Pickle_PickleTag) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Pickle_PickleTag) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Pickle_PickleTag) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.AstNodeId) > 0 {
+ i -= len(m.AstNodeId)
+ copy(dAtA[i:], m.AstNodeId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.AstNodeId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Pickle_PickleStep) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Pickle_PickleStep) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Pickle_PickleStep) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.AstNodeIds) > 0 {
+ for iNdEx := len(m.AstNodeIds) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.AstNodeIds[iNdEx])
+ copy(dAtA[i:], m.AstNodeIds[iNdEx])
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.AstNodeIds[iNdEx])))
+ i--
+ dAtA[i] = 0x22
+ }
+ }
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if m.Argument != nil {
+ {
+ size, err := m.Argument.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Text) > 0 {
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PickleStepArgument) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PickleStepArgument) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleStepArgument) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Message != nil {
+ {
+ size := m.Message.Size()
+ i -= size
+ if _, err := m.Message.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PickleStepArgument_DocString) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleStepArgument_DocString) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.DocString != nil {
+ {
+ size, err := m.DocString.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+func (m *PickleStepArgument_DataTable) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleStepArgument_DataTable) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.DataTable != nil {
+ {
+ size, err := m.DataTable.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+func (m *PickleStepArgument_PickleDocString) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PickleStepArgument_PickleDocString) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleStepArgument_PickleDocString) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Content) > 0 {
+ i -= len(m.Content)
+ copy(dAtA[i:], m.Content)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Content)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.MediaType) > 0 {
+ i -= len(m.MediaType)
+ copy(dAtA[i:], m.MediaType)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.MediaType)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PickleStepArgument_PickleTable) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PickleStepArgument_PickleTable) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleStepArgument_PickleTable) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Rows) > 0 {
+ for iNdEx := len(m.Rows) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Rows[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Cells) > 0 {
+ for iNdEx := len(m.Cells) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Cells[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Value) > 0 {
+ i -= len(m.Value)
+ copy(dAtA[i:], m.Value)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Value)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCase) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCase) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCase) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TestSteps) > 0 {
+ for iNdEx := len(m.TestSteps) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.TestSteps[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.PickleId) > 0 {
+ i -= len(m.PickleId)
+ copy(dAtA[i:], m.PickleId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.PickleId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCase_TestStep) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCase_TestStep) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCase_TestStep) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.HookId) > 0 {
+ i -= len(m.HookId)
+ copy(dAtA[i:], m.HookId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.HookId)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.StepMatchArgumentsLists) > 0 {
+ for iNdEx := len(m.StepMatchArgumentsLists) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.StepMatchArgumentsLists[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ }
+ if len(m.StepDefinitionIds) > 0 {
+ for iNdEx := len(m.StepDefinitionIds) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.StepDefinitionIds[iNdEx])
+ copy(dAtA[i:], m.StepDefinitionIds[iNdEx])
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.StepDefinitionIds[iNdEx])))
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.PickleStepId) > 0 {
+ i -= len(m.PickleStepId)
+ copy(dAtA[i:], m.PickleStepId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.PickleStepId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCase_TestStep_StepMatchArgumentsList) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCase_TestStep_StepMatchArgumentsList) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCase_TestStep_StepMatchArgumentsList) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.StepMatchArguments) > 0 {
+ for iNdEx := len(m.StepMatchArguments) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.StepMatchArguments[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PickleAccepted) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PickleAccepted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleAccepted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.PickleId) > 0 {
+ i -= len(m.PickleId)
+ copy(dAtA[i:], m.PickleId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.PickleId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PickleRejected) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PickleRejected) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PickleRejected) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.PickleId) > 0 {
+ i -= len(m.PickleId)
+ copy(dAtA[i:], m.PickleId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.PickleId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestRunStarted) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestRunStarted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestRunStarted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Timestamp != nil {
+ {
+ size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCasePreparedStep) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCasePreparedStep) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCasePreparedStep) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.ActionLocation != nil {
+ {
+ size, err := m.ActionLocation.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.SourceLocation != nil {
+ {
+ size, err := m.SourceLocation.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCasePrepared) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCasePrepared) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCasePrepared) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Steps) > 0 {
+ for iNdEx := len(m.Steps) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Steps[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if len(m.PickleId) > 0 {
+ i -= len(m.PickleId)
+ copy(dAtA[i:], m.PickleId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.PickleId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCaseStarted) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCaseStarted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCaseStarted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.TestCaseId) > 0 {
+ i -= len(m.TestCaseId)
+ copy(dAtA[i:], m.TestCaseId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseId)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if m.Attempt != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Attempt))
+ i--
+ dAtA[i] = 0x18
+ }
+ if m.Platform != nil {
+ {
+ size, err := m.Platform.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Timestamp != nil {
+ {
+ size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCaseStarted_Platform) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCaseStarted_Platform) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCaseStarted_Platform) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Cpu) > 0 {
+ i -= len(m.Cpu)
+ copy(dAtA[i:], m.Cpu)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Cpu)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Os) > 0 {
+ i -= len(m.Os)
+ copy(dAtA[i:], m.Os)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Os)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Version) > 0 {
+ i -= len(m.Version)
+ copy(dAtA[i:], m.Version)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Version)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Implementation) > 0 {
+ i -= len(m.Implementation)
+ copy(dAtA[i:], m.Implementation)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Implementation)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestCaseFinished) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestCaseFinished) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestCaseFinished) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TestCaseStartedId) > 0 {
+ i -= len(m.TestCaseStartedId)
+ copy(dAtA[i:], m.TestCaseStartedId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseStartedId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if m.Timestamp != nil {
+ {
+ size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestStepStarted) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestStepStarted) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestStepStarted) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TestCaseStartedId) > 0 {
+ i -= len(m.TestCaseStartedId)
+ copy(dAtA[i:], m.TestCaseStartedId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseStartedId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.TestStepId) > 0 {
+ i -= len(m.TestStepId)
+ copy(dAtA[i:], m.TestStepId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestStepId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Timestamp != nil {
+ {
+ size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestStepFinished) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestStepFinished) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestStepFinished) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TestCaseStartedId) > 0 {
+ i -= len(m.TestCaseStartedId)
+ copy(dAtA[i:], m.TestCaseStartedId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseStartedId)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.TestStepId) > 0 {
+ i -= len(m.TestStepId)
+ copy(dAtA[i:], m.TestStepId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestStepId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if m.Timestamp != nil {
+ {
+ size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.TestStepResult != nil {
+ {
+ size, err := m.TestStepResult.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestStepResult) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestStepResult) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestStepResult) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.WillBeRetried {
+ i--
+ if m.WillBeRetried {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x20
+ }
+ if m.Duration != nil {
+ {
+ size, err := m.Duration.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Message) > 0 {
+ i -= len(m.Message)
+ copy(dAtA[i:], m.Message)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Message)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Status != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Status))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *TestRunFinished) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TestRunFinished) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TestRunFinished) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Message) > 0 {
+ i -= len(m.Message)
+ copy(dAtA[i:], m.Message)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Message)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if m.Timestamp != nil {
+ {
+ size, err := m.Timestamp.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Success {
+ i--
+ if m.Success {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandStart) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandStart) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandStart) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.SupportCodeConfig != nil {
+ {
+ size, err := m.SupportCodeConfig.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x2a
+ }
+ if m.RuntimeConfig != nil {
+ {
+ size, err := m.RuntimeConfig.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ if m.SourcesConfig != nil {
+ {
+ size, err := m.SourcesConfig.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.BaseDirectory) > 0 {
+ i -= len(m.BaseDirectory)
+ copy(dAtA[i:], m.BaseDirectory)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.BaseDirectory)))
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *SourcesConfig) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *SourcesConfig) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *SourcesConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Order != nil {
+ {
+ size, err := m.Order.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ if m.Filters != nil {
+ {
+ size, err := m.Filters.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Language) > 0 {
+ i -= len(m.Language)
+ copy(dAtA[i:], m.Language)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Language)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.AbsolutePaths) > 0 {
+ for iNdEx := len(m.AbsolutePaths) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.AbsolutePaths[iNdEx])
+ copy(dAtA[i:], m.AbsolutePaths[iNdEx])
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.AbsolutePaths[iNdEx])))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *SourcesFilterConfig) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *SourcesFilterConfig) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *SourcesFilterConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.UriToLinesMapping) > 0 {
+ for iNdEx := len(m.UriToLinesMapping) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.UriToLinesMapping[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.NameRegularExpressions) > 0 {
+ for iNdEx := len(m.NameRegularExpressions) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.NameRegularExpressions[iNdEx])
+ copy(dAtA[i:], m.NameRegularExpressions[iNdEx])
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.NameRegularExpressions[iNdEx])))
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if len(m.TagExpression) > 0 {
+ i -= len(m.TagExpression)
+ copy(dAtA[i:], m.TagExpression)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TagExpression)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *UriToLinesMapping) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *UriToLinesMapping) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *UriToLinesMapping) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Lines) > 0 {
+ dAtA71 := make([]byte, len(m.Lines)*10)
+ var j70 int
+ for _, num := range m.Lines {
+ for num >= 1<<7 {
+ dAtA71[j70] = uint8(uint64(num)&0x7f | 0x80)
+ num >>= 7
+ j70++
+ }
+ dAtA71[j70] = uint8(num)
+ j70++
+ }
+ i -= j70
+ copy(dAtA[i:], dAtA71[:j70])
+ i = encodeVarintMessages(dAtA, i, uint64(j70))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.AbsolutePath) > 0 {
+ i -= len(m.AbsolutePath)
+ copy(dAtA[i:], m.AbsolutePath)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.AbsolutePath)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *SourcesOrder) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *SourcesOrder) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *SourcesOrder) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Seed != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Seed))
+ i--
+ dAtA[i] = 0x10
+ }
+ if m.Type != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Type))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RuntimeConfig) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RuntimeConfig) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RuntimeConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.MaxParallel != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.MaxParallel))
+ i--
+ dAtA[i] = 0x20
+ }
+ if m.IsStrict {
+ i--
+ if m.IsStrict {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x18
+ }
+ if m.IsDryRun {
+ i--
+ if m.IsDryRun {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x10
+ }
+ if m.IsFailFast {
+ i--
+ if m.IsFailFast {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *SupportCodeConfig) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *SupportCodeConfig) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *SupportCodeConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ParameterTypes) > 0 {
+ for iNdEx := len(m.ParameterTypes) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.ParameterTypes[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ }
+ if len(m.StepDefinitions) > 0 {
+ for iNdEx := len(m.StepDefinitions) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.StepDefinitions[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.AfterTestCaseHooks) > 0 {
+ for iNdEx := len(m.AfterTestCaseHooks) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.AfterTestCaseHooks[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if len(m.BeforeTestCaseHooks) > 0 {
+ for iNdEx := len(m.BeforeTestCaseHooks) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.BeforeTestCaseHooks[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *Hook) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Hook) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Hook) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.SourceReference != nil {
+ {
+ size, err := m.SourceReference.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.TagExpression) > 0 {
+ i -= len(m.TagExpression)
+ copy(dAtA[i:], m.TagExpression)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TagExpression)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *StepDefinition) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *StepDefinition) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *StepDefinition) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.SourceReference != nil {
+ {
+ size, err := m.SourceReference.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if m.Pattern != nil {
+ {
+ size, err := m.Pattern.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Id) > 0 {
+ i -= len(m.Id)
+ copy(dAtA[i:], m.Id)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Id)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *StepDefinitionPattern) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *StepDefinitionPattern) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *StepDefinitionPattern) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Type != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Type))
+ i--
+ dAtA[i] = 0x10
+ }
+ if len(m.Source) > 0 {
+ i -= len(m.Source)
+ copy(dAtA[i:], m.Source)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Source)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *ParameterType) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *ParameterType) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *ParameterType) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.UseForSnippets {
+ i--
+ if m.UseForSnippets {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x20
+ }
+ if m.PreferForRegularExpressionMatch {
+ i--
+ if m.PreferForRegularExpressionMatch {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x18
+ }
+ if len(m.RegularExpressions) > 0 {
+ for iNdEx := len(m.RegularExpressions) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.RegularExpressions[iNdEx])
+ copy(dAtA[i:], m.RegularExpressions[iNdEx])
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.RegularExpressions[iNdEx])))
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *UndefinedParameterType) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *UndefinedParameterType) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *UndefinedParameterType) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Expression) > 0 {
+ i -= len(m.Expression)
+ copy(dAtA[i:], m.Expression)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Expression)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Name) > 0 {
+ i -= len(m.Name)
+ copy(dAtA[i:], m.Name)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Name)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandActionComplete) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandActionComplete) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandActionComplete) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Result != nil {
+ {
+ size := m.Result.Size()
+ i -= size
+ if _, err := m.Result.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ }
+ }
+ if len(m.CompletedId) > 0 {
+ i -= len(m.CompletedId)
+ copy(dAtA[i:], m.CompletedId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.CompletedId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandActionComplete_TestStepResult) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandActionComplete_TestStepResult) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.TestStepResult != nil {
+ {
+ size, err := m.TestStepResult.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+func (m *CommandActionComplete_Snippet) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandActionComplete_Snippet) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ i -= len(m.Snippet)
+ copy(dAtA[i:], m.Snippet)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Snippet)))
+ i--
+ dAtA[i] = 0x1a
+ return len(dAtA) - i, nil
+}
+func (m *CommandRunBeforeTestRunHooks) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandRunBeforeTestRunHooks) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandRunBeforeTestRunHooks) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ActionId) > 0 {
+ i -= len(m.ActionId)
+ copy(dAtA[i:], m.ActionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ActionId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandRunAfterTestRunHooks) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandRunAfterTestRunHooks) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandRunAfterTestRunHooks) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ActionId) > 0 {
+ i -= len(m.ActionId)
+ copy(dAtA[i:], m.ActionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ActionId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandInitializeTestCase) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandInitializeTestCase) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandInitializeTestCase) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Pickle != nil {
+ {
+ size, err := m.Pickle.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ActionId) > 0 {
+ i -= len(m.ActionId)
+ copy(dAtA[i:], m.ActionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ActionId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandRunBeforeTestCaseHook) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandRunBeforeTestCaseHook) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandRunBeforeTestCaseHook) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TestCaseId) > 0 {
+ i -= len(m.TestCaseId)
+ copy(dAtA[i:], m.TestCaseId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.HookId) > 0 {
+ i -= len(m.HookId)
+ copy(dAtA[i:], m.HookId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.HookId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ActionId) > 0 {
+ i -= len(m.ActionId)
+ copy(dAtA[i:], m.ActionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ActionId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandRunAfterTestCaseHook) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandRunAfterTestCaseHook) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandRunAfterTestCaseHook) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TestCaseId) > 0 {
+ i -= len(m.TestCaseId)
+ copy(dAtA[i:], m.TestCaseId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.HookId) > 0 {
+ i -= len(m.HookId)
+ copy(dAtA[i:], m.HookId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.HookId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ActionId) > 0 {
+ i -= len(m.ActionId)
+ copy(dAtA[i:], m.ActionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ActionId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandRunTestStep) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandRunTestStep) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandRunTestStep) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TestCaseId) > 0 {
+ i -= len(m.TestCaseId)
+ copy(dAtA[i:], m.TestCaseId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.TestCaseId)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if m.PickleStepArgument != nil {
+ {
+ size, err := m.PickleStepArgument.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.StepMatchArguments) > 0 {
+ for iNdEx := len(m.StepMatchArguments) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.StepMatchArguments[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.StepDefinitionId) > 0 {
+ i -= len(m.StepDefinitionId)
+ copy(dAtA[i:], m.StepDefinitionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.StepDefinitionId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ActionId) > 0 {
+ i -= len(m.ActionId)
+ copy(dAtA[i:], m.ActionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ActionId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *StepMatchArgument) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *StepMatchArgument) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *StepMatchArgument) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Group != nil {
+ {
+ size, err := m.Group.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ParameterTypeName) > 0 {
+ i -= len(m.ParameterTypeName)
+ copy(dAtA[i:], m.ParameterTypeName)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ParameterTypeName)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *StepMatchArgument_Group) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *StepMatchArgument_Group) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *StepMatchArgument_Group) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Children) > 0 {
+ for iNdEx := len(m.Children) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Children[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.Value) > 0 {
+ i -= len(m.Value)
+ copy(dAtA[i:], m.Value)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Value)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Start != 0 {
+ i = encodeVarintMessages(dAtA, i, uint64(m.Start))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *CommandGenerateSnippet) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *CommandGenerateSnippet) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CommandGenerateSnippet) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.PickleStepArgument != nil {
+ {
+ size, err := m.PickleStepArgument.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.GeneratedExpressions) > 0 {
+ for iNdEx := len(m.GeneratedExpressions) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.GeneratedExpressions[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintMessages(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if len(m.ActionId) > 0 {
+ i -= len(m.ActionId)
+ copy(dAtA[i:], m.ActionId)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ActionId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *GeneratedExpression) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *GeneratedExpression) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *GeneratedExpression) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ParameterTypeNames) > 0 {
+ for iNdEx := len(m.ParameterTypeNames) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.ParameterTypeNames[iNdEx])
+ copy(dAtA[i:], m.ParameterTypeNames[iNdEx])
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.ParameterTypeNames[iNdEx])))
+ i--
+ dAtA[i] = 0x12
+ }
+ }
+ if len(m.Text) > 0 {
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintMessages(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func encodeVarintMessages(dAtA []byte, offset int, v uint64) int {
+ offset -= sovMessages(v)
+ base := offset
+ for v >= 1<<7 {
+ dAtA[offset] = uint8(v&0x7f | 0x80)
+ v >>= 7
+ offset++
+ }
+ dAtA[offset] = uint8(v)
+ return base
+}
+func (m *Timestamp) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Seconds != 0 {
+ n += 1 + sovMessages(uint64(m.Seconds))
+ }
+ if m.Nanos != 0 {
+ n += 1 + sovMessages(uint64(m.Nanos))
+ }
+ return n
+}
+
+func (m *Duration) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Seconds != 0 {
+ n += 1 + sovMessages(uint64(m.Seconds))
+ }
+ if m.Nanos != 0 {
+ n += 1 + sovMessages(uint64(m.Nanos))
+ }
+ return n
+}
+
+func (m *Envelope) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Message != nil {
+ n += m.Message.Size()
+ }
+ return n
+}
+
+func (m *Envelope_Source) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Source != nil {
+ l = m.Source.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_GherkinDocument) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.GherkinDocument != nil {
+ l = m.GherkinDocument.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_Pickle) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Pickle != nil {
+ l = m.Pickle.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_Attachment) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Attachment != nil {
+ l = m.Attachment.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_TestCaseStarted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestCaseStarted != nil {
+ l = m.TestCaseStarted.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_TestStepStarted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestStepStarted != nil {
+ l = m.TestStepStarted.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_TestStepFinished) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestStepFinished != nil {
+ l = m.TestStepFinished.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_TestCaseFinished) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestCaseFinished != nil {
+ l = m.TestCaseFinished.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_PickleAccepted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.PickleAccepted != nil {
+ l = m.PickleAccepted.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_PickleRejected) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.PickleRejected != nil {
+ l = m.PickleRejected.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_TestCasePrepared) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestCasePrepared != nil {
+ l = m.TestCasePrepared.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_TestRunStarted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestRunStarted != nil {
+ l = m.TestRunStarted.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_TestRunFinished) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestRunFinished != nil {
+ l = m.TestRunFinished.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandStart) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandStart != nil {
+ l = m.CommandStart.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandActionComplete) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandActionComplete != nil {
+ l = m.CommandActionComplete.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandRunBeforeTestRunHooks) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandRunBeforeTestRunHooks != nil {
+ l = m.CommandRunBeforeTestRunHooks.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandInitializeTestCase) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandInitializeTestCase != nil {
+ l = m.CommandInitializeTestCase.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandRunBeforeTestCaseHook) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandRunBeforeTestCaseHook != nil {
+ l = m.CommandRunBeforeTestCaseHook.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandRunTestStep) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandRunTestStep != nil {
+ l = m.CommandRunTestStep.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandRunAfterTestCaseHook) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandRunAfterTestCaseHook != nil {
+ l = m.CommandRunAfterTestCaseHook.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandRunAfterTestRunHooks) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandRunAfterTestRunHooks != nil {
+ l = m.CommandRunAfterTestRunHooks.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandGenerateSnippet) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.CommandGenerateSnippet != nil {
+ l = m.CommandGenerateSnippet.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_CommandError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.CommandError)
+ n += 2 + l + sovMessages(uint64(l))
+ return n
+}
+func (m *Envelope_TestCase) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestCase != nil {
+ l = m.TestCase.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_StepDefinition) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.StepDefinition != nil {
+ l = m.StepDefinition.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_Hook) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Hook != nil {
+ l = m.Hook.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_ParameterType) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.ParameterType != nil {
+ l = m.ParameterType.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Envelope_UndefinedParameterType) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.UndefinedParameterType != nil {
+ l = m.UndefinedParameterType.Size()
+ n += 2 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Location) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Line != 0 {
+ n += 1 + sovMessages(uint64(m.Line))
+ }
+ if m.Column != 0 {
+ n += 1 + sovMessages(uint64(m.Column))
+ }
+ return n
+}
+
+func (m *SourceReference) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Uri)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *Source) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Uri)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Data)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.MediaType)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GherkinDocument) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Uri)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Feature != nil {
+ l = m.Feature.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Comments) > 0 {
+ for _, e := range m.Comments {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *GherkinDocument_Comment) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Text)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Tags) > 0 {
+ for _, e := range m.Tags {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ l = len(m.Language)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Keyword)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Children) > 0 {
+ for _, e := range m.Children {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_Tag) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_FeatureChild) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Value != nil {
+ n += m.Value.Size()
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_Rule_) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Rule != nil {
+ l = m.Rule.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *GherkinDocument_Feature_FeatureChild_Background) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Background != nil {
+ l = m.Background.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *GherkinDocument_Feature_FeatureChild_Scenario) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Scenario != nil {
+ l = m.Scenario.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Keyword)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Children) > 0 {
+ for _, e := range m.Children {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Value != nil {
+ n += m.Value.Size()
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild_Background) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Background != nil {
+ l = m.Background.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild_Scenario) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Scenario != nil {
+ l = m.Scenario.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *GherkinDocument_Feature_Background) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Keyword)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Steps) > 0 {
+ for _, e := range m.Steps {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_Scenario) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Tags) > 0 {
+ for _, e := range m.Tags {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ l = len(m.Keyword)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Steps) > 0 {
+ for _, e := range m.Steps {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.Examples) > 0 {
+ for _, e := range m.Examples {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_Scenario_Examples) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Tags) > 0 {
+ for _, e := range m.Tags {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ l = len(m.Keyword)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.TableHeader != nil {
+ l = m.TableHeader.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.TableBody) > 0 {
+ for _, e := range m.TableBody {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_TableRow) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Cells) > 0 {
+ for _, e := range m.Cells {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_TableRow_TableCell) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Value)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_Step) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Keyword)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Text)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Argument != nil {
+ n += m.Argument.Size()
+ }
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_Step_DocString_) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.DocString != nil {
+ l = m.DocString.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *GherkinDocument_Feature_Step_DataTable_) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.DataTable != nil {
+ l = m.DataTable.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *GherkinDocument_Feature_Step_DataTable) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Rows) > 0 {
+ for _, e := range m.Rows {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *GherkinDocument_Feature_Step_DocString) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Location != nil {
+ l = m.Location.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.MediaType)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Content)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Delimiter)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *Attachment) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Source != nil {
+ l = m.Source.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestStepId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestCaseStartedId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Body != nil {
+ n += m.Body.Size()
+ }
+ l = len(m.MediaType)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *Attachment_Text) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Text)
+ n += 1 + l + sovMessages(uint64(l))
+ return n
+}
+func (m *Attachment_Binary) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Binary != nil {
+ l = len(m.Binary)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *Pickle) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Uri)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Language)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Steps) > 0 {
+ for _, e := range m.Steps {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.Tags) > 0 {
+ for _, e := range m.Tags {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.AstNodeIds) > 0 {
+ for _, s := range m.AstNodeIds {
+ l = len(s)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *Pickle_PickleTag) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.AstNodeId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *Pickle_PickleStep) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Text)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Argument != nil {
+ l = m.Argument.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.AstNodeIds) > 0 {
+ for _, s := range m.AstNodeIds {
+ l = len(s)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *PickleStepArgument) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Message != nil {
+ n += m.Message.Size()
+ }
+ return n
+}
+
+func (m *PickleStepArgument_DocString) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.DocString != nil {
+ l = m.DocString.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *PickleStepArgument_DataTable) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.DataTable != nil {
+ l = m.DataTable.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *PickleStepArgument_PickleDocString) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.MediaType)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Content)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *PickleStepArgument_PickleTable) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Rows) > 0 {
+ for _, e := range m.Rows {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Cells) > 0 {
+ for _, e := range m.Cells {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Value)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestCase) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.PickleId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.TestSteps) > 0 {
+ for _, e := range m.TestSteps {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *TestCase_TestStep) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.PickleStepId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.StepDefinitionIds) > 0 {
+ for _, s := range m.StepDefinitionIds {
+ l = len(s)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.StepMatchArgumentsLists) > 0 {
+ for _, e := range m.StepMatchArgumentsLists {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ l = len(m.HookId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestCase_TestStep_StepMatchArgumentsList) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.StepMatchArguments) > 0 {
+ for _, e := range m.StepMatchArguments {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *PickleAccepted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.PickleId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *PickleRejected) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.PickleId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestRunStarted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Timestamp != nil {
+ l = m.Timestamp.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestCasePreparedStep) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.SourceLocation != nil {
+ l = m.SourceLocation.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.ActionLocation != nil {
+ l = m.ActionLocation.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestCasePrepared) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.PickleId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Steps) > 0 {
+ for _, e := range m.Steps {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *TestCaseStarted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Timestamp != nil {
+ l = m.Timestamp.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Platform != nil {
+ l = m.Platform.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Attempt != 0 {
+ n += 1 + sovMessages(uint64(m.Attempt))
+ }
+ l = len(m.TestCaseId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestCaseStarted_Platform) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Implementation)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Version)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Os)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Cpu)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestCaseFinished) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Timestamp != nil {
+ l = m.Timestamp.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestCaseStartedId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestStepStarted) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Timestamp != nil {
+ l = m.Timestamp.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestStepId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestCaseStartedId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestStepFinished) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestStepResult != nil {
+ l = m.TestStepResult.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Timestamp != nil {
+ l = m.Timestamp.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestStepId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestCaseStartedId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *TestStepResult) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Status != 0 {
+ n += 1 + sovMessages(uint64(m.Status))
+ }
+ l = len(m.Message)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Duration != nil {
+ l = m.Duration.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.WillBeRetried {
+ n += 2
+ }
+ return n
+}
+
+func (m *TestRunFinished) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Success {
+ n += 2
+ }
+ if m.Timestamp != nil {
+ l = m.Timestamp.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Message)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *CommandStart) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.BaseDirectory)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.SourcesConfig != nil {
+ l = m.SourcesConfig.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.RuntimeConfig != nil {
+ l = m.RuntimeConfig.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.SupportCodeConfig != nil {
+ l = m.SupportCodeConfig.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *SourcesConfig) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.AbsolutePaths) > 0 {
+ for _, s := range m.AbsolutePaths {
+ l = len(s)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ l = len(m.Language)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Filters != nil {
+ l = m.Filters.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Order != nil {
+ l = m.Order.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *SourcesFilterConfig) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.TagExpression)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.NameRegularExpressions) > 0 {
+ for _, s := range m.NameRegularExpressions {
+ l = len(s)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.UriToLinesMapping) > 0 {
+ for _, e := range m.UriToLinesMapping {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *UriToLinesMapping) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.AbsolutePath)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Lines) > 0 {
+ l = 0
+ for _, e := range m.Lines {
+ l += sovMessages(uint64(e))
+ }
+ n += 1 + sovMessages(uint64(l)) + l
+ }
+ return n
+}
+
+func (m *SourcesOrder) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Type != 0 {
+ n += 1 + sovMessages(uint64(m.Type))
+ }
+ if m.Seed != 0 {
+ n += 1 + sovMessages(uint64(m.Seed))
+ }
+ return n
+}
+
+func (m *RuntimeConfig) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.IsFailFast {
+ n += 2
+ }
+ if m.IsDryRun {
+ n += 2
+ }
+ if m.IsStrict {
+ n += 2
+ }
+ if m.MaxParallel != 0 {
+ n += 1 + sovMessages(uint64(m.MaxParallel))
+ }
+ return n
+}
+
+func (m *SupportCodeConfig) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.BeforeTestCaseHooks) > 0 {
+ for _, e := range m.BeforeTestCaseHooks {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.AfterTestCaseHooks) > 0 {
+ for _, e := range m.AfterTestCaseHooks {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.StepDefinitions) > 0 {
+ for _, e := range m.StepDefinitions {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if len(m.ParameterTypes) > 0 {
+ for _, e := range m.ParameterTypes {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *Hook) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TagExpression)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.SourceReference != nil {
+ l = m.SourceReference.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *StepDefinition) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Id)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Pattern != nil {
+ l = m.Pattern.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.SourceReference != nil {
+ l = m.SourceReference.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *StepDefinitionPattern) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Source)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Type != 0 {
+ n += 1 + sovMessages(uint64(m.Type))
+ }
+ return n
+}
+
+func (m *ParameterType) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.RegularExpressions) > 0 {
+ for _, s := range m.RegularExpressions {
+ l = len(s)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if m.PreferForRegularExpressionMatch {
+ n += 2
+ }
+ if m.UseForSnippets {
+ n += 2
+ }
+ return n
+}
+
+func (m *UndefinedParameterType) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Name)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.Expression)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *CommandActionComplete) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.CompletedId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Result != nil {
+ n += m.Result.Size()
+ }
+ return n
+}
+
+func (m *CommandActionComplete_TestStepResult) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TestStepResult != nil {
+ l = m.TestStepResult.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+func (m *CommandActionComplete_Snippet) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Snippet)
+ n += 1 + l + sovMessages(uint64(l))
+ return n
+}
+func (m *CommandRunBeforeTestRunHooks) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ActionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *CommandRunAfterTestRunHooks) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ActionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *CommandInitializeTestCase) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ActionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Pickle != nil {
+ l = m.Pickle.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *CommandRunBeforeTestCaseHook) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ActionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.HookId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestCaseId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *CommandRunAfterTestCaseHook) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ActionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.HookId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestCaseId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *CommandRunTestStep) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ActionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.StepDefinitionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.StepMatchArguments) > 0 {
+ for _, e := range m.StepMatchArguments {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if m.PickleStepArgument != nil {
+ l = m.PickleStepArgument.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ l = len(m.TestCaseId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *StepMatchArgument) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ParameterTypeName)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if m.Group != nil {
+ l = m.Group.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *StepMatchArgument_Group) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Start != 0 {
+ n += 1 + sovMessages(uint64(m.Start))
+ }
+ l = len(m.Value)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.Children) > 0 {
+ for _, e := range m.Children {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *CommandGenerateSnippet) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ActionId)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.GeneratedExpressions) > 0 {
+ for _, e := range m.GeneratedExpressions {
+ l = e.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ if m.PickleStepArgument != nil {
+ l = m.PickleStepArgument.Size()
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ return n
+}
+
+func (m *GeneratedExpression) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Text)
+ if l > 0 {
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ if len(m.ParameterTypeNames) > 0 {
+ for _, s := range m.ParameterTypeNames {
+ l = len(s)
+ n += 1 + l + sovMessages(uint64(l))
+ }
+ }
+ return n
+}
+
+func sovMessages(x uint64) (n int) {
+ return (math_bits.Len64(x|1) + 6) / 7
+}
+func sozMessages(x uint64) (n int) {
+ return sovMessages(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+}
+func (m *Timestamp) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Timestamp: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Timestamp: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Seconds", wireType)
+ }
+ m.Seconds = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Seconds |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Nanos", wireType)
+ }
+ m.Nanos = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Nanos |= int32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Duration) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Duration: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Duration: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Seconds", wireType)
+ }
+ m.Seconds = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Seconds |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Nanos", wireType)
+ }
+ m.Nanos = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Nanos |= int32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Envelope) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Envelope: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Envelope: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &Source{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_Source{v}
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field GherkinDocument", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_GherkinDocument{v}
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pickle", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &Pickle{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_Pickle{v}
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Attachment", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &Attachment{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_Attachment{v}
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseStarted", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestCaseStarted{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestCaseStarted{v}
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestStepStarted", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestStepStarted{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestStepStarted{v}
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestStepFinished", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestStepFinished{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestStepFinished{v}
+ iNdEx = postIndex
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseFinished", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestCaseFinished{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestCaseFinished{v}
+ iNdEx = postIndex
+ case 9:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleAccepted", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &PickleAccepted{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_PickleAccepted{v}
+ iNdEx = postIndex
+ case 10:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleRejected", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &PickleRejected{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_PickleRejected{v}
+ iNdEx = postIndex
+ case 11:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCasePrepared", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestCasePrepared{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestCasePrepared{v}
+ iNdEx = postIndex
+ case 12:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestRunStarted", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestRunStarted{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestRunStarted{v}
+ iNdEx = postIndex
+ case 13:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestRunFinished", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestRunFinished{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestRunFinished{v}
+ iNdEx = postIndex
+ case 14:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandStart", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandStart{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandStart{v}
+ iNdEx = postIndex
+ case 15:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandActionComplete", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandActionComplete{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandActionComplete{v}
+ iNdEx = postIndex
+ case 16:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandRunBeforeTestRunHooks", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandRunBeforeTestRunHooks{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandRunBeforeTestRunHooks{v}
+ iNdEx = postIndex
+ case 17:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandInitializeTestCase", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandInitializeTestCase{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandInitializeTestCase{v}
+ iNdEx = postIndex
+ case 18:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandRunBeforeTestCaseHook", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandRunBeforeTestCaseHook{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandRunBeforeTestCaseHook{v}
+ iNdEx = postIndex
+ case 19:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandRunTestStep", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandRunTestStep{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandRunTestStep{v}
+ iNdEx = postIndex
+ case 20:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandRunAfterTestCaseHook", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandRunAfterTestCaseHook{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandRunAfterTestCaseHook{v}
+ iNdEx = postIndex
+ case 21:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandRunAfterTestRunHooks", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandRunAfterTestRunHooks{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandRunAfterTestRunHooks{v}
+ iNdEx = postIndex
+ case 22:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandGenerateSnippet", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &CommandGenerateSnippet{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_CommandGenerateSnippet{v}
+ iNdEx = postIndex
+ case 23:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommandError", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Message = &Envelope_CommandError{string(dAtA[iNdEx:postIndex])}
+ iNdEx = postIndex
+ case 24:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCase", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestCase{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_TestCase{v}
+ iNdEx = postIndex
+ case 25:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StepDefinition", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &StepDefinition{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_StepDefinition{v}
+ iNdEx = postIndex
+ case 26:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Hook", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &Hook{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_Hook{v}
+ iNdEx = postIndex
+ case 27:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ParameterType", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &ParameterType{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_ParameterType{v}
+ iNdEx = postIndex
+ case 28:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field UndefinedParameterType", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &UndefinedParameterType{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &Envelope_UndefinedParameterType{v}
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Location) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Location: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Location: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Line", wireType)
+ }
+ m.Line = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Line |= uint32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Column", wireType)
+ }
+ m.Column = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Column |= uint32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *SourceReference) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: SourceReference: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: SourceReference: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Uri = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Source) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Source: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Source: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Uri = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Data = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.MediaType = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GherkinDocument: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GherkinDocument: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Uri = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Feature", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Feature == nil {
+ m.Feature = &GherkinDocument_Feature{}
+ }
+ if err := m.Feature.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Comments", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Comments = append(m.Comments, &GherkinDocument_Comment{})
+ if err := m.Comments[len(m.Comments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Comment) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Comment: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Comment: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Text = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Feature: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Feature: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Tags = append(m.Tags, &GherkinDocument_Feature_Tag{})
+ if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Language", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Language = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyword", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyword = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Children", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Children = append(m.Children, &GherkinDocument_Feature_FeatureChild{})
+ if err := m.Children[len(m.Children)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_Tag) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Tag: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Tag: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_FeatureChild) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: FeatureChild: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: FeatureChild: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Rule", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument_Feature_FeatureChild_Rule{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &GherkinDocument_Feature_FeatureChild_Rule_{v}
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Background", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument_Feature_Background{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &GherkinDocument_Feature_FeatureChild_Background{v}
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Scenario", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument_Feature_Scenario{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &GherkinDocument_Feature_FeatureChild_Scenario{v}
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_FeatureChild_Rule) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Rule: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Rule: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyword", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyword = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Children", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Children = append(m.Children, &GherkinDocument_Feature_FeatureChild_RuleChild{})
+ if err := m.Children[len(m.Children)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_FeatureChild_RuleChild) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: RuleChild: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: RuleChild: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Background", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument_Feature_Background{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &GherkinDocument_Feature_FeatureChild_RuleChild_Background{v}
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Scenario", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument_Feature_Scenario{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &GherkinDocument_Feature_FeatureChild_RuleChild_Scenario{v}
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_Background) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Background: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Background: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyword", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyword = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Steps = append(m.Steps, &GherkinDocument_Feature_Step{})
+ if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_Scenario) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Scenario: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Scenario: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Tags = append(m.Tags, &GherkinDocument_Feature_Tag{})
+ if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyword", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyword = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Steps = append(m.Steps, &GherkinDocument_Feature_Step{})
+ if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Examples", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Examples = append(m.Examples, &GherkinDocument_Feature_Scenario_Examples{})
+ if err := m.Examples[len(m.Examples)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_Scenario_Examples) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Examples: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Examples: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Tags = append(m.Tags, &GherkinDocument_Feature_Tag{})
+ if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyword", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyword = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TableHeader", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.TableHeader == nil {
+ m.TableHeader = &GherkinDocument_Feature_TableRow{}
+ }
+ if err := m.TableHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TableBody", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TableBody = append(m.TableBody, &GherkinDocument_Feature_TableRow{})
+ if err := m.TableBody[len(m.TableBody)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_TableRow) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TableRow: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TableRow: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Cells = append(m.Cells, &GherkinDocument_Feature_TableRow_TableCell{})
+ if err := m.Cells[len(m.Cells)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_TableRow_TableCell) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TableCell: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TableCell: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Value = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_Step) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Step: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Step: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Keyword", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Keyword = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Text = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DocString", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument_Feature_Step_DocString{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Argument = &GherkinDocument_Feature_Step_DocString_{v}
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DataTable", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &GherkinDocument_Feature_Step_DataTable{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Argument = &GherkinDocument_Feature_Step_DataTable_{v}
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_Step_DataTable) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: DataTable: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: DataTable: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Rows", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Rows = append(m.Rows, &GherkinDocument_Feature_TableRow{})
+ if err := m.Rows[len(m.Rows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GherkinDocument_Feature_Step_DocString) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: DocString: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: DocString: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Location", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Location == nil {
+ m.Location = &Location{}
+ }
+ if err := m.Location.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.MediaType = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Content", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Content = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Delimiter", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Delimiter = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Attachment) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Attachment: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Attachment: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Source == nil {
+ m.Source = &SourceReference{}
+ }
+ if err := m.Source.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestStepId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseStartedId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseStartedId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Body = &Attachment_Text{string(dAtA[iNdEx:postIndex])}
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Binary", wireType)
+ }
+ var byteLen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ byteLen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if byteLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + byteLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := make([]byte, postIndex-iNdEx)
+ copy(v, dAtA[iNdEx:postIndex])
+ m.Body = &Attachment_Binary{v}
+ iNdEx = postIndex
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.MediaType = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Pickle) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Pickle: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Pickle: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Uri", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Uri = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Language", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Language = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Steps = append(m.Steps, &Pickle_PickleStep{})
+ if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Tags = append(m.Tags, &Pickle_PickleTag{})
+ if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AstNodeIds", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.AstNodeIds = append(m.AstNodeIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Pickle_PickleTag) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleTag: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleTag: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AstNodeId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.AstNodeId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Pickle_PickleStep) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleStep: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleStep: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Text = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Argument", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Argument == nil {
+ m.Argument = &PickleStepArgument{}
+ }
+ if err := m.Argument.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AstNodeIds", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.AstNodeIds = append(m.AstNodeIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PickleStepArgument) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleStepArgument: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleStepArgument: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DocString", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &PickleStepArgument_PickleDocString{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &PickleStepArgument_DocString{v}
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DataTable", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &PickleStepArgument_PickleTable{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Message = &PickleStepArgument_DataTable{v}
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PickleStepArgument_PickleDocString) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleDocString: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleDocString: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.MediaType = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Content", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Content = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PickleStepArgument_PickleTable) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleTable: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleTable: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Rows", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Rows = append(m.Rows, &PickleStepArgument_PickleTable_PickleTableRow{})
+ if err := m.Rows[len(m.Rows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleTableRow: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleTableRow: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cells", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Cells = append(m.Cells, &PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell{})
+ if err := m.Cells[len(m.Cells)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PickleStepArgument_PickleTable_PickleTableRow_PickleTableCell) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleTableCell: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleTableCell: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Value = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCase) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestCase: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestCase: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.PickleId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestSteps", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestSteps = append(m.TestSteps, &TestCase_TestStep{})
+ if err := m.TestSteps[len(m.TestSteps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCase_TestStep) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestStep: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestStep: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleStepId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.PickleStepId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StepDefinitionIds", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StepDefinitionIds = append(m.StepDefinitionIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StepMatchArgumentsLists", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StepMatchArgumentsLists = append(m.StepMatchArgumentsLists, &TestCase_TestStep_StepMatchArgumentsList{})
+ if err := m.StepMatchArgumentsLists[len(m.StepMatchArgumentsLists)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field HookId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.HookId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCase_TestStep_StepMatchArgumentsList) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: StepMatchArgumentsList: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: StepMatchArgumentsList: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StepMatchArguments", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StepMatchArguments = append(m.StepMatchArguments, &StepMatchArgument{})
+ if err := m.StepMatchArguments[len(m.StepMatchArguments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PickleAccepted) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleAccepted: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleAccepted: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.PickleId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PickleRejected) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PickleRejected: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PickleRejected: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.PickleId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestRunStarted) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestRunStarted: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestRunStarted: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Timestamp == nil {
+ m.Timestamp = &Timestamp{}
+ }
+ if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCasePreparedStep) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestCasePreparedStep: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestCasePreparedStep: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SourceLocation", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.SourceLocation == nil {
+ m.SourceLocation = &SourceReference{}
+ }
+ if err := m.SourceLocation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionLocation", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.ActionLocation == nil {
+ m.ActionLocation = &SourceReference{}
+ }
+ if err := m.ActionLocation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCasePrepared) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestCasePrepared: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestCasePrepared: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.PickleId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Steps = append(m.Steps, &TestCasePreparedStep{})
+ if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCaseStarted) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestCaseStarted: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestCaseStarted: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Timestamp == nil {
+ m.Timestamp = &Timestamp{}
+ }
+ if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Platform", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Platform == nil {
+ m.Platform = &TestCaseStarted_Platform{}
+ }
+ if err := m.Platform.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Attempt", wireType)
+ }
+ m.Attempt = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Attempt |= uint32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCaseStarted_Platform) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Platform: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Platform: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Implementation", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Implementation = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Version = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Os", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Os = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Cpu", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Cpu = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestCaseFinished) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestCaseFinished: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestCaseFinished: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Timestamp == nil {
+ m.Timestamp = &Timestamp{}
+ }
+ if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseStartedId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseStartedId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestStepStarted) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestStepStarted: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestStepStarted: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Timestamp == nil {
+ m.Timestamp = &Timestamp{}
+ }
+ if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestStepId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseStartedId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseStartedId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestStepFinished) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestStepFinished: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestStepFinished: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestStepResult", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.TestStepResult == nil {
+ m.TestStepResult = &TestStepResult{}
+ }
+ if err := m.TestStepResult.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Timestamp == nil {
+ m.Timestamp = &Timestamp{}
+ }
+ if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestStepId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestStepId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseStartedId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseStartedId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestStepResult) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestStepResult: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestStepResult: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ }
+ m.Status = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Status |= TestStepResult_Status(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Message = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Duration == nil {
+ m.Duration = &Duration{}
+ }
+ if err := m.Duration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field WillBeRetried", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.WillBeRetried = bool(v != 0)
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *TestRunFinished) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TestRunFinished: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TestRunFinished: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Success = bool(v != 0)
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Timestamp == nil {
+ m.Timestamp = &Timestamp{}
+ }
+ if err := m.Timestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Message = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandStart) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandStart: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandStart: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field BaseDirectory", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.BaseDirectory = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SourcesConfig", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.SourcesConfig == nil {
+ m.SourcesConfig = &SourcesConfig{}
+ }
+ if err := m.SourcesConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RuntimeConfig", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.RuntimeConfig == nil {
+ m.RuntimeConfig = &RuntimeConfig{}
+ }
+ if err := m.RuntimeConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SupportCodeConfig", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.SupportCodeConfig == nil {
+ m.SupportCodeConfig = &SupportCodeConfig{}
+ }
+ if err := m.SupportCodeConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *SourcesConfig) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: SourcesConfig: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: SourcesConfig: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AbsolutePaths", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.AbsolutePaths = append(m.AbsolutePaths, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Language", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Language = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Filters", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Filters == nil {
+ m.Filters = &SourcesFilterConfig{}
+ }
+ if err := m.Filters.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Order", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Order == nil {
+ m.Order = &SourcesOrder{}
+ }
+ if err := m.Order.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *SourcesFilterConfig) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: SourcesFilterConfig: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: SourcesFilterConfig: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TagExpression", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TagExpression = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field NameRegularExpressions", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.NameRegularExpressions = append(m.NameRegularExpressions, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field UriToLinesMapping", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.UriToLinesMapping = append(m.UriToLinesMapping, &UriToLinesMapping{})
+ if err := m.UriToLinesMapping[len(m.UriToLinesMapping)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *UriToLinesMapping) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: UriToLinesMapping: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: UriToLinesMapping: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AbsolutePath", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.AbsolutePath = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType == 0 {
+ var v uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Lines = append(m.Lines, v)
+ } else if wireType == 2 {
+ var packedLen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ packedLen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if packedLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + packedLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ var elementCount int
+ var count int
+ for _, integer := range dAtA[iNdEx:postIndex] {
+ if integer < 128 {
+ count++
+ }
+ }
+ elementCount = count
+ if elementCount != 0 && len(m.Lines) == 0 {
+ m.Lines = make([]uint64, 0, elementCount)
+ }
+ for iNdEx < postIndex {
+ var v uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.Lines = append(m.Lines, v)
+ }
+ } else {
+ return fmt.Errorf("proto: wrong wireType = %d for field Lines", wireType)
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *SourcesOrder) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: SourcesOrder: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: SourcesOrder: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
+ }
+ m.Type = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Type |= SourcesOrderType(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Seed", wireType)
+ }
+ m.Seed = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Seed |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RuntimeConfig) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: RuntimeConfig: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: RuntimeConfig: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IsFailFast", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.IsFailFast = bool(v != 0)
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IsDryRun", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.IsDryRun = bool(v != 0)
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IsStrict", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.IsStrict = bool(v != 0)
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MaxParallel", wireType)
+ }
+ m.MaxParallel = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.MaxParallel |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *SupportCodeConfig) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: SupportCodeConfig: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: SupportCodeConfig: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field BeforeTestCaseHooks", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.BeforeTestCaseHooks = append(m.BeforeTestCaseHooks, &Hook{})
+ if err := m.BeforeTestCaseHooks[len(m.BeforeTestCaseHooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AfterTestCaseHooks", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.AfterTestCaseHooks = append(m.AfterTestCaseHooks, &Hook{})
+ if err := m.AfterTestCaseHooks[len(m.AfterTestCaseHooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StepDefinitions", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StepDefinitions = append(m.StepDefinitions, &StepDefinition{})
+ if err := m.StepDefinitions[len(m.StepDefinitions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ParameterTypes", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ParameterTypes = append(m.ParameterTypes, &ParameterType{})
+ if err := m.ParameterTypes[len(m.ParameterTypes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *Hook) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Hook: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Hook: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TagExpression", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TagExpression = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SourceReference", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.SourceReference == nil {
+ m.SourceReference = &SourceReference{}
+ }
+ if err := m.SourceReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *StepDefinition) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: StepDefinition: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: StepDefinition: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Id = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pattern", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pattern == nil {
+ m.Pattern = &StepDefinitionPattern{}
+ }
+ if err := m.Pattern.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SourceReference", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.SourceReference == nil {
+ m.SourceReference = &SourceReference{}
+ }
+ if err := m.SourceReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *StepDefinitionPattern) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: StepDefinitionPattern: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: StepDefinitionPattern: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Source = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
+ }
+ m.Type = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Type |= StepDefinitionPatternType(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ParameterType) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ParameterType: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ParameterType: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RegularExpressions", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.RegularExpressions = append(m.RegularExpressions, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PreferForRegularExpressionMatch", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.PreferForRegularExpressionMatch = bool(v != 0)
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field UseForSnippets", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.UseForSnippets = bool(v != 0)
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *UndefinedParameterType) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: UndefinedParameterType: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: UndefinedParameterType: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Expression", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Expression = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandActionComplete) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandActionComplete: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandActionComplete: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CompletedId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.CompletedId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestStepResult", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &TestStepResult{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Result = &CommandActionComplete_TestStepResult{v}
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Snippet", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Result = &CommandActionComplete_Snippet{string(dAtA[iNdEx:postIndex])}
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandRunBeforeTestRunHooks) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandRunBeforeTestRunHooks: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandRunBeforeTestRunHooks: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ActionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandRunAfterTestRunHooks) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandRunAfterTestRunHooks: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandRunAfterTestRunHooks: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ActionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandInitializeTestCase) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandInitializeTestCase: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandInitializeTestCase: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ActionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pickle", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pickle == nil {
+ m.Pickle = &Pickle{}
+ }
+ if err := m.Pickle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandRunBeforeTestCaseHook) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandRunBeforeTestCaseHook: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandRunBeforeTestCaseHook: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ActionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field HookId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.HookId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandRunAfterTestCaseHook) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandRunAfterTestCaseHook: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandRunAfterTestCaseHook: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ActionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field HookId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.HookId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandRunTestStep) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandRunTestStep: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandRunTestStep: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ActionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StepDefinitionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StepDefinitionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field StepMatchArguments", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.StepMatchArguments = append(m.StepMatchArguments, &StepMatchArgument{})
+ if err := m.StepMatchArguments[len(m.StepMatchArguments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleStepArgument", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.PickleStepArgument == nil {
+ m.PickleStepArgument = &PickleStepArgument{}
+ }
+ if err := m.PickleStepArgument.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TestCaseId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TestCaseId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *StepMatchArgument) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: StepMatchArgument: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: StepMatchArgument: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ParameterTypeName", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ParameterTypeName = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Group == nil {
+ m.Group = &StepMatchArgument_Group{}
+ }
+ if err := m.Group.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *StepMatchArgument_Group) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Group: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Group: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType)
+ }
+ m.Start = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Start |= uint32(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Value = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Children", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Children = append(m.Children, &StepMatchArgument_Group{})
+ if err := m.Children[len(m.Children)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CommandGenerateSnippet) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: CommandGenerateSnippet: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CommandGenerateSnippet: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ActionId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ActionId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field GeneratedExpressions", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.GeneratedExpressions = append(m.GeneratedExpressions, &GeneratedExpression{})
+ if err := m.GeneratedExpressions[len(m.GeneratedExpressions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field PickleStepArgument", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.PickleStepArgument == nil {
+ m.PickleStepArgument = &PickleStepArgument{}
+ }
+ if err := m.PickleStepArgument.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *GeneratedExpression) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: GeneratedExpression: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: GeneratedExpression: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Text = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ParameterTypeNames", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthMessages
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ParameterTypeNames = append(m.ParameterTypeNames, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipMessages(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthMessages
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func skipMessages(dAtA []byte) (n int, err error) {
+ l := len(dAtA)
+ iNdEx := 0
+ depth := 0
+ for iNdEx < l {
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 0, ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= (uint64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ wireType := int(wire & 0x7)
+ switch wireType {
+ case 0:
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 0, ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ iNdEx++
+ if dAtA[iNdEx-1] < 0x80 {
+ break
+ }
+ }
+ case 1:
+ iNdEx += 8
+ case 2:
+ var length int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return 0, ErrIntOverflowMessages
+ }
+ if iNdEx >= l {
+ return 0, io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ length |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if length < 0 {
+ return 0, ErrInvalidLengthMessages
+ }
+ iNdEx += length
+ case 3:
+ depth++
+ case 4:
+ if depth == 0 {
+ return 0, ErrUnexpectedEndOfGroupMessages
+ }
+ depth--
+ case 5:
+ iNdEx += 4
+ default:
+ return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
+ }
+ if iNdEx < 0 {
+ return 0, ErrInvalidLengthMessages
+ }
+ if depth == 0 {
+ return iNdEx, nil
+ }
+ }
+ return 0, io.ErrUnexpectedEOF
+}
+
+var (
+ ErrInvalidLengthMessages = fmt.Errorf("proto: negative length found during unmarshaling")
+ ErrIntOverflowMessages = fmt.Errorf("proto: integer overflow")
+ ErrUnexpectedEndOfGroupMessages = fmt.Errorf("proto: unexpected end of group")
+)
diff --git a/vendor/github.com/cucumber/messages-go/v10/messages.proto b/vendor/github.com/cucumber/messages-go/v10/messages.proto
new file mode 100644
index 00000000..9a2932ed
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/messages.proto
@@ -0,0 +1,730 @@
+syntax = "proto3";
+package io.cucumber.messages;
+option go_package = "messages";
+
+// When removing a field, replace it with reserved, rather than deleting the line.
+// When adding a field, add it to the end and increment the number by one.
+// See https://developers.google.com/protocol-buffers/docs/proto#updating for details
+
+// From https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto
+message Timestamp {
+ // Represents seconds of UTC time since Unix epoch
+ // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
+ // 9999-12-31T23:59:59Z inclusive.
+ int64 seconds = 1;
+
+ // Non-negative fractions of a second at nanosecond resolution. Negative
+ // second values with fractions must still have non-negative nanos values
+ // that count forward in time. Must be from 0 to 999,999,999
+ // inclusive.
+ int32 nanos = 2;
+}
+
+// The structure is pretty close of the Timestamp one. For clarity, a second type
+// of message is used.
+message Duration {
+ int64 seconds = 1;
+
+ // Non-negative fractions of a second at nanosecond resolution. Negative
+ // second values with fractions must still have non-negative nanos values
+ // that count forward in time. Must be from 0 to 999,999,999
+ // inclusive.
+ int32 nanos = 2;
+}
+
+/**
+ * All the messages that are passed between different components/processes are Envelope
+ * messages.
+ */
+message Envelope {
+ oneof message {
+ // Gherkin messages
+ Source source = 1;
+ GherkinDocument gherkin_document = 2;
+ Pickle pickle = 3;
+ Attachment attachment = 4;
+ // Execution messages
+ TestCaseStarted test_case_started = 5;
+ TestStepStarted test_step_started = 6;
+ TestStepFinished test_step_finished = 7;
+ TestCaseFinished test_case_finished = 8;
+ PickleAccepted pickle_accepted = 9;
+ PickleRejected pickle_rejected = 10;
+ TestCasePrepared test_case_prepared = 11;
+ TestRunStarted test_run_started = 12;
+ TestRunFinished test_run_finished = 13;
+ // Cucumber-Engine Messages
+ CommandStart command_start = 14;
+ CommandActionComplete command_action_complete = 15;
+ CommandRunBeforeTestRunHooks command_run_before_test_run_hooks = 16;
+ CommandInitializeTestCase command_initialize_test_case = 17;
+ CommandRunBeforeTestCaseHook command_run_before_test_case_hook = 18;
+ CommandRunTestStep command_run_test_step = 19;
+ CommandRunAfterTestCaseHook command_run_after_test_case_hook = 20;
+ CommandRunAfterTestRunHooks command_run_after_test_run_hooks = 21;
+ CommandGenerateSnippet command_generate_snippet = 22;
+ string command_error = 23;
+ TestCase test_case = 24;
+ StepDefinition step_definition = 25;
+ Hook hook = 26;
+ ParameterType parameter_type = 27;
+ UndefinedParameterType undefined_parameter_type = 28;
+ }
+}
+
+
+////// Common types
+
+/**
+ * Points to a line and a column in a text file
+ */
+message Location {
+ uint32 line = 1;
+ uint32 column = 2;
+}
+
+/**
+ * Points to a [Source](#io.cucumber.messages.Source) identified by `uri` and a
+ * [Location](#io.cucumber.messages.Location) within that file.
+ */
+message SourceReference {
+ string uri = 1;
+ Location location = 2;
+}
+
+////// Source
+
+/**
+ * A source file, typically a Gherkin document
+ */
+message Source {
+ /**
+ * The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
+ * of the source, typically a file path relative to the root directory
+ */
+ string uri = 1;
+ // The contents of the file
+ string data = 2;
+ reserved 3;
+ // The media type of the file. Can be used to specify custom types, such as
+ // text/x.cucumber.gherkin+plain
+ string media_type = 4;
+}
+
+////// Gherkin
+
+/**
+ * The [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) of a Gherkin document.
+ * Cucumber implementations should *not* depend on `GherkinDocument` or any of its
+ * children for execution - use [Pickle](#io.cucumber.messages.Pickle) instead.
+ *
+ * The only consumers of `GherkinDocument` should only be formatters that produce
+ * "rich" output, resembling the original Gherkin document.
+ */
+message GherkinDocument {
+ /**
+ * The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
+ * of the source, typically a file path relative to the root directory
+ */
+ string uri = 1;
+ Feature feature = 2;
+ // All the comments in the Gherkin document
+ repeated Comment comments = 3;
+
+ /**
+ * A comment in a Gherkin document
+ */
+ message Comment {
+ // The location of the comment
+ Location location = 1;
+ // The text of the comment
+ string text = 2;
+ }
+
+ /**
+ * The top level node in the AST
+ */
+ message Feature {
+ // The location of the `Feature` keyword
+ Location location = 1;
+ // All the tags placed above the `Feature` keyword
+ repeated Tag tags = 2;
+ // The [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code of the Gherkin document
+ string language = 3;
+ // The text of the `Feature` keyword (in the language specified by `language`)
+ string keyword = 4;
+ // The name of the feature (the text following the `keyword`)
+ string name = 5;
+ // The line(s) underneath the line with the `keyword` that are used as description
+ string description = 6;
+ // Zero or more children
+ repeated FeatureChild children = 7;
+
+ /**
+ * A tag
+ */
+ message Tag {
+ // Location of the tag
+ Location location = 1;
+ // The name of the tag (including the leading `@`)
+ string name = 2;
+ // Unique ID to be able to reference the Tag from PickleTag
+ string id = 3;
+ }
+
+ /**
+ * A child node of a `Feature` node
+ */
+ message FeatureChild {
+ oneof value {
+ Rule rule = 1;
+ Background background = 2;
+ Scenario scenario = 3;
+ }
+
+ /**
+ * A `Rule` node
+ */
+ message Rule {
+ // The location of the `Rule` keyword
+ Location location = 1;
+ string keyword = 2;
+ string name = 3;
+ string description = 4;
+ repeated RuleChild children = 5;
+ }
+
+ message RuleChild {
+ oneof value {
+ Background background = 1;
+ Scenario scenario = 2;
+ }
+ }
+ }
+
+ message Background {
+ // The location of the `Background` keyword
+ Location location = 1;
+ string keyword = 2;
+ string name = 3;
+ string description = 4;
+ repeated Step steps = 5;
+ }
+
+ message Scenario {
+ // The location of the `Scenario` keyword
+ Location location = 1;
+ repeated Tag tags = 2;
+ string keyword = 3;
+ string name = 4;
+ string description = 5;
+ repeated Step steps = 6;
+ repeated Examples examples = 7;
+ string id = 8;
+
+ message Examples {
+ // The location of the `Examples` keyword
+ Location location = 1;
+ repeated Tag tags = 2;
+ string keyword = 3;
+ string name = 4;
+ string description = 5;
+ TableRow table_header = 6;
+ repeated TableRow table_body = 7;
+ }
+ }
+
+ // A row in a table
+ message TableRow {
+ // The location of the first cell in the row
+ Location location = 1;
+ // Cells in the row
+ repeated TableCell cells = 2;
+ string id = 3;
+
+ // A cell in a `TableRow`
+ message TableCell {
+ // The location of the cell
+ Location location = 1;
+ // The value of the cell
+ string value = 2;
+ }
+ }
+
+ // A step
+ message Step {
+ // The location of the steps' `keyword`
+ Location location = 1;
+ string keyword = 2;
+ string text = 3;
+ oneof argument {
+ DocString doc_string = 5;
+ DataTable data_table = 6;
+ }
+ // Unique ID to be able to reference the Step from PickleStep
+ string id = 7;
+
+ message DataTable {
+ Location location = 1;
+ repeated TableRow rows = 2;
+ }
+
+ message DocString {
+ Location location = 1;
+ string media_type = 2;
+ string content = 3;
+ string delimiter = 4;
+ }
+ }
+ }
+}
+
+////// Attachments (parse errors, execution errors, screenshots, links...)
+
+/**
+ * An attachment represents any kind of data associated with a line in a
+ * [Source](#io.cucumber.messages.Source) file. It can be used for:
+ *
+ * * Syntax errors during parse time
+ * * Screenshots captured and attached during execution
+ * * Logs captured and attached during execution
+ *
+ * It is not to be used for runtime errors raised/thrown during execution. This
+ * is captured in `TestResult`.
+ */
+message Attachment {
+ SourceReference source = 1;
+ reserved 2, 3;
+ string test_step_id = 4;
+ string test_case_started_id = 5;
+ // The body of the attachment
+ oneof body {
+ // For text/* media types
+ string text = 6;
+ // For all non-text/ media types
+ bytes binary = 7;
+ }
+ /**
+ * The media type of the data. This can be any valid
+ * [IANA Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml)
+ * as well as Cucumber-specific media types such as `text/x.cucumber.gherkin+plain`
+ * and `text/x.cucumber.stacktrace+plain`
+ */
+ string media_type = 8;
+}
+
+////// Pickles
+
+/**
+ * A `Pickle` represents a template for a `TestCase`. It is typically derived
+ * from another format, such as [GherkinDocument](#io.cucumber.messages.GherkinDocument).
+ * In the future a `Pickle` may be derived from other formats such as Markdown or
+ * Excel files.
+ *
+ * By making `Pickle` the main data structure Cucumber uses for execution, the
+ * implementation of Cucumber itself becomes simpler, as it doesn't have to deal
+ * with the complex structure of a [GherkinDocument](#io.cucumber.messages.GherkinDocument).
+ *
+ * Each `PickleStep` of a `Pickle` is matched with a `StepDefinition` to create a `TestCase`
+ */
+message Pickle {
+ /**
+ * A unique id for the pickle. This is a [SHA1](https://en.wikipedia.org/wiki/SHA-1) hash
+ * from the source data and the `locations` of the pickle.
+ * This ID will change if source the file is modified.
+ */
+ string id = 1;
+ // The uri of the source file
+ string uri = 2;
+ // The name of the pickle
+ string name = 3;
+ // The language of the pickle
+ string language = 4;
+ // One or more steps
+ repeated PickleStep steps = 5;
+ /**
+ * One or more tags. If this pickle is constructed from a Gherkin document,
+ * It includes inherited tags from the `Feature` as well.
+ */
+ repeated PickleTag tags = 6;
+ /**
+ * Points to the AST node locations of the pickle. The last one represents the unique
+ * id of the pickle. A pickle constructed from `Examples` will have the first
+ * id originating from the `Scenario` AST node, and the second from the `TableRow` AST node.
+ */
+ repeated string ast_node_ids = 7;
+
+ /**
+ * A tag
+ */
+ message PickleTag {
+ string name = 1;
+ // Points to the AST node this was created from
+ string ast_node_id = 2;
+ }
+
+ /**
+ * An executable step
+ */
+ message PickleStep {
+ string text = 1;
+ // An optional argument
+ PickleStepArgument argument = 2;
+ // A unique ID for the PickleStep
+ string id = 3;
+ // References the IDs of the source of the step. For Gherkin, this can be
+ // the ID of a Step, and possibly also the ID of a TableRow
+ repeated string ast_node_ids = 4;
+ }
+}
+
+/**
+ * A wrapper for either a doc string or a table.
+ */
+message PickleStepArgument {
+ oneof message {
+ PickleDocString doc_string = 1;
+ PickleTable data_table = 2;
+ }
+
+ message PickleDocString {
+ string media_type = 1;
+ string content = 2;
+ }
+
+ message PickleTable {
+ repeated PickleTableRow rows = 1;
+
+ message PickleTableRow {
+ repeated PickleTableCell cells = 1;
+
+ message PickleTableCell {
+ string value = 1;
+ }
+ }
+ }
+}
+
+////// TestCases
+
+/**
+ * A `TestCase` contains a sequence of `TestStep`s.
+ */
+message TestCase {
+ string id = 1;
+ // The ID of the `Pickle` this `TestCase` is derived from.
+ string pickle_id = 2;
+ repeated TestStep test_steps = 3;
+
+ /**
+ * A `TestStep` is derived from either a `PickleStep`
+ * combined with a `StepDefinition`, or from a `Hook`.
+ */
+ message TestStep {
+ string id = 1;
+ // Pointer to the `PickleStep` (if derived from a PickleStep)
+ string pickle_step_id = 2;
+ // Pointer to all the matching `StepDefinition`s (if derived from a PickleStep)
+ repeated string step_definition_ids = 3;
+ // A list of list of StepMatchArgument (if derived from a `StepDefinition`).
+ // Each element represents a matching step definition. A size of 0 means `UNDEFINED`,
+ // and a size of 2+ means `AMBIGUOUS`
+ repeated StepMatchArgumentsList step_match_arguments_lists = 4;
+ // Pointer to the `Hook` (if derived from a Hook)
+ string hook_id = 5;
+
+ message StepMatchArgumentsList {
+ repeated StepMatchArgument step_match_arguments = 1;
+ }
+ }
+}
+
+//// Cucumber Engine
+
+////// Filtering
+
+message PickleAccepted {
+ string pickle_id = 1;
+}
+
+message PickleRejected {
+ string pickle_id = 2;
+}
+
+////// Results
+
+message TestRunStarted {
+ Timestamp timestamp = 1;
+}
+
+// DEPRECATED. Use TestCase.TestStep
+message TestCasePreparedStep {
+ SourceReference source_location = 1;
+ SourceReference action_location = 2;
+}
+
+// DEPRECATED. Use TestCase
+message TestCasePrepared {
+ string pickle_id = 1;
+ repeated TestCasePreparedStep steps = 2;
+}
+
+message TestCaseStarted {
+ Timestamp timestamp = 1;
+ Platform platform = 2;
+ /**
+ * The first attempt should have value 0, and for each retry the value
+ * should increase by 1.
+ */
+ uint32 attempt = 3;
+ string test_case_id = 4;
+ /**
+ * Because a `TestCase` can be run multiple times (in case of a retry),
+ * we use this field to group messages relating to the same attempt.
+ */
+ string id = 5;
+
+ message Platform {
+ // The runner implementation. For example "SpecFlow", "Cucumber-JVM", "Behat" etc.
+ string implementation = 1;
+ // The version of the runner
+ string version = 2;
+ // The operating system
+ string os = 3;
+ // The CPU architecture
+ string cpu = 4;
+ }
+}
+
+message TestCaseFinished {
+ Timestamp timestamp = 1;
+ reserved 2;
+ string test_case_started_id = 3;
+}
+
+message TestStepStarted {
+ Timestamp timestamp = 1;
+ string test_step_id = 2;
+ string test_case_started_id = 3;
+}
+
+message TestStepFinished {
+ TestStepResult test_step_result = 1;
+ Timestamp timestamp = 2;
+ string test_step_id = 3;
+ string test_case_started_id = 4;
+}
+
+message TestStepResult {
+ Status status = 1;
+ string message = 2;
+ Duration duration = 3;
+ bool will_be_retried = 4;
+
+ /**
+ * Status of a `TestStep`.
+ *
+ * The ordinal values of statuses are significant. The status of a TestCase
+ * is computed by picking the status with the highest value for all of its steps.
+ *
+ * For example, if a TestCase has steps with statuses passed, undefined and skipped,
+ * then the pickle's status is undefined.
+ */
+ enum Status {
+ // The step hasn't been matched or executed.
+ UNKNOWN = 0;
+ // The step matched one step definition and passed execution.
+ PASSED = 1;
+ // The step matched one step definition but was not executed because the
+ // previous step was not PASSED.
+ SKIPPED = 2;
+ // The step matched one step definition and signalled pending during execution.
+ // This is the default behaviour of generated step definitions, which either
+ // throw a special PendingException, or return a special value indicating that it's
+ // pending. How to signal the pending status depends on the Cucumber implementation.
+ PENDING = 3;
+ // The step matched no step definitions.
+ UNDEFINED = 4;
+ // The step matched two or more step definitions.
+ AMBIGUOUS = 5;
+ // The step matched one step definition and failed execution.
+ FAILED = 6;
+ }
+}
+
+message TestRunFinished {
+ // success = StrictModeEnabled ? (failed_count == 0 && ambiguous_count == 0 && undefined_count == 0 && pending_count == 0) : (failed_count == 0 && ambiguous_count == 0)
+ bool success = 1;
+ // Timestamp when the TestRun is finished
+ Timestamp timestamp = 2;
+ // Error message. Can be a stack trace from a failed `BeforeAll` or `AfterAll`.
+ // If there are undefined parameter types, the message is simply
+ // "The following parameter type(s() are not defined: xxx, yyy".
+ // The independent `UndefinedParameterType` messages can be used to generate
+ // snippets for those parameter types.
+ string message = 3;
+}
+
+////// Commands
+
+message CommandStart {
+ string base_directory = 2;
+ SourcesConfig sources_config = 3;
+ RuntimeConfig runtime_config = 4;
+ SupportCodeConfig support_code_config = 5;
+}
+
+message SourcesConfig {
+ repeated string absolute_paths = 1;
+ string language = 2;
+ SourcesFilterConfig filters = 3;
+ SourcesOrder order = 4;
+}
+
+message SourcesFilterConfig {
+ string tag_expression = 1;
+ repeated string name_regular_expressions = 2;
+ repeated UriToLinesMapping uri_to_lines_mapping = 3;
+}
+
+message UriToLinesMapping {
+ string absolute_path = 1;
+ repeated uint64 lines = 2;
+}
+
+message SourcesOrder {
+ SourcesOrderType type = 1;
+ uint64 seed = 2;
+}
+
+enum SourcesOrderType {
+ ORDER_OF_DEFINITION = 0;
+ RANDOM = 1;
+}
+
+message RuntimeConfig {
+ bool is_fail_fast = 1;
+ bool is_dry_run = 2;
+ bool is_strict = 3;
+ uint64 max_parallel = 4;
+}
+
+message SupportCodeConfig {
+ repeated Hook before_test_case_hooks = 1;
+ repeated Hook after_test_case_hooks = 2;
+ repeated StepDefinition step_definitions = 3;
+ repeated ParameterType parameter_types = 4;
+}
+
+message Hook {
+ string id = 1;
+ string tag_expression = 2;
+ SourceReference source_reference = 3;
+}
+
+message StepDefinition {
+ string id = 1;
+ StepDefinitionPattern pattern = 2;
+ SourceReference source_reference = 3;
+}
+
+message StepDefinitionPattern {
+ string source = 1;
+ StepDefinitionPatternType type = 2;
+}
+
+enum StepDefinitionPatternType {
+ CUCUMBER_EXPRESSION = 0;
+ REGULAR_EXPRESSION = 1;
+}
+
+message ParameterType {
+ // The name is unique, so we don't need an id.
+ string name = 1;
+ repeated string regular_expressions = 2;
+ bool prefer_for_regular_expression_match = 3;
+ bool use_for_snippets = 4;
+}
+
+message UndefinedParameterType {
+ string name = 1;
+ string expression = 2;
+}
+
+message CommandActionComplete {
+ string completed_id = 1;
+
+ oneof result {
+ // Used for responses to CommandRunBeforeTestCaseHook / CommandRunTestStep / CommandRunAfterTestCaseHook
+ TestStepResult test_step_result = 2;
+ // Used for response to CommandGenerateSnippet
+ string snippet = 3;
+ }
+}
+
+message CommandRunBeforeTestRunHooks {
+ string action_id = 1;
+}
+
+message CommandRunAfterTestRunHooks {
+ string action_id = 1;
+}
+
+message CommandInitializeTestCase {
+ string action_id = 1;
+ Pickle pickle = 2;
+}
+
+message CommandRunBeforeTestCaseHook {
+ string action_id = 1;
+ string hook_id = 2;
+ string test_case_id = 3;
+}
+
+message CommandRunAfterTestCaseHook {
+ string action_id = 1;
+ string hook_id = 2;
+ string test_case_id = 3;
+}
+
+message CommandRunTestStep {
+ string action_id = 1;
+ string step_definition_id = 2;
+ repeated StepMatchArgument step_match_arguments = 3;
+ PickleStepArgument pickle_step_argument = 4;
+ string test_case_id = 5;
+}
+
+/**
+ * Represents a single argument extracted from a step match and passed to a step definition.
+ * This is used for the following purposes:
+ * - Construct an argument to pass to a step definition (possibly through a parameter type transform)
+ * - Highlight the matched parameter in rich formatters such as the HTML formatter
+ *
+ * This message closely matches the `Argument` class in the `cucumber-expressions` library.
+ */
+message StepMatchArgument {
+ string parameter_type_name = 1;
+ /**
+ * Represents the outermost capture group of an argument. This message closely matches the
+ * `Group` class in the `cucumber-expressions` library.
+ */
+ Group group = 2;
+
+ message Group {
+ uint32 start = 1;
+ string value = 2;
+ repeated Group children = 3;
+ }
+}
+
+message CommandGenerateSnippet {
+ string action_id = 1;
+ repeated GeneratedExpression generated_expressions = 2;
+ PickleStepArgument pickle_step_argument = 3;
+}
+
+message GeneratedExpression {
+ string text = 1;
+ repeated string parameter_type_names = 2;
+}
diff --git a/vendor/github.com/cucumber/messages-go/v10/time_conversion.go b/vendor/github.com/cucumber/messages-go/v10/time_conversion.go
new file mode 100644
index 00000000..ecdec270
--- /dev/null
+++ b/vendor/github.com/cucumber/messages-go/v10/time_conversion.go
@@ -0,0 +1,34 @@
+package messages
+
+import "time"
+
+const nanosPerSecond = 1000000000
+
+func DurationToGoDuration(duration Duration) time.Duration {
+ secondNanos := duration.Seconds * nanosPerSecond
+ return time.Duration(secondNanos + int64(duration.Nanos))
+}
+
+func GoDurationToDuration(goDuration time.Duration) Duration {
+ seconds := int64(goDuration / nanosPerSecond)
+ nanos := int32(goDuration % nanosPerSecond)
+ return Duration{
+ Seconds: seconds,
+ Nanos: nanos,
+ }
+}
+
+func TimestampToGoTime(timestamp Timestamp) time.Time {
+ return time.Unix(timestamp.Seconds, (int64(timestamp.Nanos)))
+}
+
+func GoTimeToTimestamp(t time.Time) Timestamp {
+ unixNanos := t.UnixNano()
+ seconds := unixNanos / nanosPerSecond
+ nanos := int32(unixNanos % nanosPerSecond)
+
+ return Timestamp{
+ Seconds: seconds,
+ Nanos: nanos,
+ }
+}
diff --git a/vendor/github.com/docker/distribution/LICENSE b/vendor/github.com/docker/distribution/LICENSE
new file mode 100644
index 00000000..e06d2081
--- /dev/null
+++ b/vendor/github.com/docker/distribution/LICENSE
@@ -0,0 +1,202 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/vendor/github.com/docker/distribution/digestset/set.go b/vendor/github.com/docker/distribution/digestset/set.go
new file mode 100644
index 00000000..71327dca
--- /dev/null
+++ b/vendor/github.com/docker/distribution/digestset/set.go
@@ -0,0 +1,247 @@
+package digestset
+
+import (
+ "errors"
+ "sort"
+ "strings"
+ "sync"
+
+ digest "github.com/opencontainers/go-digest"
+)
+
+var (
+ // ErrDigestNotFound is used when a matching digest
+ // could not be found in a set.
+ ErrDigestNotFound = errors.New("digest not found")
+
+ // ErrDigestAmbiguous is used when multiple digests
+ // are found in a set. None of the matching digests
+ // should be considered valid matches.
+ ErrDigestAmbiguous = errors.New("ambiguous digest string")
+)
+
+// Set is used to hold a unique set of digests which
+// may be easily referenced by easily referenced by a string
+// representation of the digest as well as short representation.
+// The uniqueness of the short representation is based on other
+// digests in the set. If digests are omitted from this set,
+// collisions in a larger set may not be detected, therefore it
+// is important to always do short representation lookups on
+// the complete set of digests. To mitigate collisions, an
+// appropriately long short code should be used.
+type Set struct {
+ mutex sync.RWMutex
+ entries digestEntries
+}
+
+// NewSet creates an empty set of digests
+// which may have digests added.
+func NewSet() *Set {
+ return &Set{
+ entries: digestEntries{},
+ }
+}
+
+// checkShortMatch checks whether two digests match as either whole
+// values or short values. This function does not test equality,
+// rather whether the second value could match against the first
+// value.
+func checkShortMatch(alg digest.Algorithm, hex, shortAlg, shortHex string) bool {
+ if len(hex) == len(shortHex) {
+ if hex != shortHex {
+ return false
+ }
+ if len(shortAlg) > 0 && string(alg) != shortAlg {
+ return false
+ }
+ } else if !strings.HasPrefix(hex, shortHex) {
+ return false
+ } else if len(shortAlg) > 0 && string(alg) != shortAlg {
+ return false
+ }
+ return true
+}
+
+// Lookup looks for a digest matching the given string representation.
+// If no digests could be found ErrDigestNotFound will be returned
+// with an empty digest value. If multiple matches are found
+// ErrDigestAmbiguous will be returned with an empty digest value.
+func (dst *Set) Lookup(d string) (digest.Digest, error) {
+ dst.mutex.RLock()
+ defer dst.mutex.RUnlock()
+ if len(dst.entries) == 0 {
+ return "", ErrDigestNotFound
+ }
+ var (
+ searchFunc func(int) bool
+ alg digest.Algorithm
+ hex string
+ )
+ dgst, err := digest.Parse(d)
+ if err == digest.ErrDigestInvalidFormat {
+ hex = d
+ searchFunc = func(i int) bool {
+ return dst.entries[i].val >= d
+ }
+ } else {
+ hex = dgst.Hex()
+ alg = dgst.Algorithm()
+ searchFunc = func(i int) bool {
+ if dst.entries[i].val == hex {
+ return dst.entries[i].alg >= alg
+ }
+ return dst.entries[i].val >= hex
+ }
+ }
+ idx := sort.Search(len(dst.entries), searchFunc)
+ if idx == len(dst.entries) || !checkShortMatch(dst.entries[idx].alg, dst.entries[idx].val, string(alg), hex) {
+ return "", ErrDigestNotFound
+ }
+ if dst.entries[idx].alg == alg && dst.entries[idx].val == hex {
+ return dst.entries[idx].digest, nil
+ }
+ if idx+1 < len(dst.entries) && checkShortMatch(dst.entries[idx+1].alg, dst.entries[idx+1].val, string(alg), hex) {
+ return "", ErrDigestAmbiguous
+ }
+
+ return dst.entries[idx].digest, nil
+}
+
+// Add adds the given digest to the set. An error will be returned
+// if the given digest is invalid. If the digest already exists in the
+// set, this operation will be a no-op.
+func (dst *Set) Add(d digest.Digest) error {
+ if err := d.Validate(); err != nil {
+ return err
+ }
+ dst.mutex.Lock()
+ defer dst.mutex.Unlock()
+ entry := &digestEntry{alg: d.Algorithm(), val: d.Hex(), digest: d}
+ searchFunc := func(i int) bool {
+ if dst.entries[i].val == entry.val {
+ return dst.entries[i].alg >= entry.alg
+ }
+ return dst.entries[i].val >= entry.val
+ }
+ idx := sort.Search(len(dst.entries), searchFunc)
+ if idx == len(dst.entries) {
+ dst.entries = append(dst.entries, entry)
+ return nil
+ } else if dst.entries[idx].digest == d {
+ return nil
+ }
+
+ entries := append(dst.entries, nil)
+ copy(entries[idx+1:], entries[idx:len(entries)-1])
+ entries[idx] = entry
+ dst.entries = entries
+ return nil
+}
+
+// Remove removes the given digest from the set. An err will be
+// returned if the given digest is invalid. If the digest does
+// not exist in the set, this operation will be a no-op.
+func (dst *Set) Remove(d digest.Digest) error {
+ if err := d.Validate(); err != nil {
+ return err
+ }
+ dst.mutex.Lock()
+ defer dst.mutex.Unlock()
+ entry := &digestEntry{alg: d.Algorithm(), val: d.Hex(), digest: d}
+ searchFunc := func(i int) bool {
+ if dst.entries[i].val == entry.val {
+ return dst.entries[i].alg >= entry.alg
+ }
+ return dst.entries[i].val >= entry.val
+ }
+ idx := sort.Search(len(dst.entries), searchFunc)
+ // Not found if idx is after or value at idx is not digest
+ if idx == len(dst.entries) || dst.entries[idx].digest != d {
+ return nil
+ }
+
+ entries := dst.entries
+ copy(entries[idx:], entries[idx+1:])
+ entries = entries[:len(entries)-1]
+ dst.entries = entries
+
+ return nil
+}
+
+// All returns all the digests in the set
+func (dst *Set) All() []digest.Digest {
+ dst.mutex.RLock()
+ defer dst.mutex.RUnlock()
+ retValues := make([]digest.Digest, len(dst.entries))
+ for i := range dst.entries {
+ retValues[i] = dst.entries[i].digest
+ }
+
+ return retValues
+}
+
+// ShortCodeTable returns a map of Digest to unique short codes. The
+// length represents the minimum value, the maximum length may be the
+// entire value of digest if uniqueness cannot be achieved without the
+// full value. This function will attempt to make short codes as short
+// as possible to be unique.
+func ShortCodeTable(dst *Set, length int) map[digest.Digest]string {
+ dst.mutex.RLock()
+ defer dst.mutex.RUnlock()
+ m := make(map[digest.Digest]string, len(dst.entries))
+ l := length
+ resetIdx := 0
+ for i := 0; i < len(dst.entries); i++ {
+ var short string
+ extended := true
+ for extended {
+ extended = false
+ if len(dst.entries[i].val) <= l {
+ short = dst.entries[i].digest.String()
+ } else {
+ short = dst.entries[i].val[:l]
+ for j := i + 1; j < len(dst.entries); j++ {
+ if checkShortMatch(dst.entries[j].alg, dst.entries[j].val, "", short) {
+ if j > resetIdx {
+ resetIdx = j
+ }
+ extended = true
+ } else {
+ break
+ }
+ }
+ if extended {
+ l++
+ }
+ }
+ }
+ m[dst.entries[i].digest] = short
+ if i >= resetIdx {
+ l = length
+ }
+ }
+ return m
+}
+
+type digestEntry struct {
+ alg digest.Algorithm
+ val string
+ digest digest.Digest
+}
+
+type digestEntries []*digestEntry
+
+func (d digestEntries) Len() int {
+ return len(d)
+}
+
+func (d digestEntries) Less(i, j int) bool {
+ if d[i].val != d[j].val {
+ return d[i].val < d[j].val
+ }
+ return d[i].alg < d[j].alg
+}
+
+func (d digestEntries) Swap(i, j int) {
+ d[i], d[j] = d[j], d[i]
+}
diff --git a/vendor/github.com/docker/distribution/reference/helpers.go b/vendor/github.com/docker/distribution/reference/helpers.go
new file mode 100644
index 00000000..978df7ea
--- /dev/null
+++ b/vendor/github.com/docker/distribution/reference/helpers.go
@@ -0,0 +1,42 @@
+package reference
+
+import "path"
+
+// IsNameOnly returns true if reference only contains a repo name.
+func IsNameOnly(ref Named) bool {
+ if _, ok := ref.(NamedTagged); ok {
+ return false
+ }
+ if _, ok := ref.(Canonical); ok {
+ return false
+ }
+ return true
+}
+
+// FamiliarName returns the familiar name string
+// for the given named, familiarizing if needed.
+func FamiliarName(ref Named) string {
+ if nn, ok := ref.(normalizedNamed); ok {
+ return nn.Familiar().Name()
+ }
+ return ref.Name()
+}
+
+// FamiliarString returns the familiar string representation
+// for the given reference, familiarizing if needed.
+func FamiliarString(ref Reference) string {
+ if nn, ok := ref.(normalizedNamed); ok {
+ return nn.Familiar().String()
+ }
+ return ref.String()
+}
+
+// FamiliarMatch reports whether ref matches the specified pattern.
+// See https://godoc.org/path#Match for supported patterns.
+func FamiliarMatch(pattern string, ref Reference) (bool, error) {
+ matched, err := path.Match(pattern, FamiliarString(ref))
+ if namedRef, isNamed := ref.(Named); isNamed && !matched {
+ matched, _ = path.Match(pattern, FamiliarName(namedRef))
+ }
+ return matched, err
+}
diff --git a/vendor/github.com/docker/distribution/reference/normalize.go b/vendor/github.com/docker/distribution/reference/normalize.go
new file mode 100644
index 00000000..2d71fc5e
--- /dev/null
+++ b/vendor/github.com/docker/distribution/reference/normalize.go
@@ -0,0 +1,170 @@
+package reference
+
+import (
+ "errors"
+ "fmt"
+ "strings"
+
+ "github.com/docker/distribution/digestset"
+ "github.com/opencontainers/go-digest"
+)
+
+var (
+ legacyDefaultDomain = "index.docker.io"
+ defaultDomain = "docker.io"
+ officialRepoName = "library"
+ defaultTag = "latest"
+)
+
+// normalizedNamed represents a name which has been
+// normalized and has a familiar form. A familiar name
+// is what is used in Docker UI. An example normalized
+// name is "docker.io/library/ubuntu" and corresponding
+// familiar name of "ubuntu".
+type normalizedNamed interface {
+ Named
+ Familiar() Named
+}
+
+// ParseNormalizedNamed parses a string into a named reference
+// transforming a familiar name from Docker UI to a fully
+// qualified reference. If the value may be an identifier
+// use ParseAnyReference.
+func ParseNormalizedNamed(s string) (Named, error) {
+ if ok := anchoredIdentifierRegexp.MatchString(s); ok {
+ return nil, fmt.Errorf("invalid repository name (%s), cannot specify 64-byte hexadecimal strings", s)
+ }
+ domain, remainder := splitDockerDomain(s)
+ var remoteName string
+ if tagSep := strings.IndexRune(remainder, ':'); tagSep > -1 {
+ remoteName = remainder[:tagSep]
+ } else {
+ remoteName = remainder
+ }
+ if strings.ToLower(remoteName) != remoteName {
+ return nil, errors.New("invalid reference format: repository name must be lowercase")
+ }
+
+ ref, err := Parse(domain + "/" + remainder)
+ if err != nil {
+ return nil, err
+ }
+ named, isNamed := ref.(Named)
+ if !isNamed {
+ return nil, fmt.Errorf("reference %s has no name", ref.String())
+ }
+ return named, nil
+}
+
+// splitDockerDomain splits a repository name to domain and remotename string.
+// If no valid domain is found, the default domain is used. Repository name
+// needs to be already validated before.
+func splitDockerDomain(name string) (domain, remainder string) {
+ i := strings.IndexRune(name, '/')
+ if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != "localhost") {
+ domain, remainder = defaultDomain, name
+ } else {
+ domain, remainder = name[:i], name[i+1:]
+ }
+ if domain == legacyDefaultDomain {
+ domain = defaultDomain
+ }
+ if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {
+ remainder = officialRepoName + "/" + remainder
+ }
+ return
+}
+
+// familiarizeName returns a shortened version of the name familiar
+// to to the Docker UI. Familiar names have the default domain
+// "docker.io" and "library/" repository prefix removed.
+// For example, "docker.io/library/redis" will have the familiar
+// name "redis" and "docker.io/dmcgowan/myapp" will be "dmcgowan/myapp".
+// Returns a familiarized named only reference.
+func familiarizeName(named namedRepository) repository {
+ repo := repository{
+ domain: named.Domain(),
+ path: named.Path(),
+ }
+
+ if repo.domain == defaultDomain {
+ repo.domain = ""
+ // Handle official repositories which have the pattern "library/"
+ if split := strings.Split(repo.path, "/"); len(split) == 2 && split[0] == officialRepoName {
+ repo.path = split[1]
+ }
+ }
+ return repo
+}
+
+func (r reference) Familiar() Named {
+ return reference{
+ namedRepository: familiarizeName(r.namedRepository),
+ tag: r.tag,
+ digest: r.digest,
+ }
+}
+
+func (r repository) Familiar() Named {
+ return familiarizeName(r)
+}
+
+func (t taggedReference) Familiar() Named {
+ return taggedReference{
+ namedRepository: familiarizeName(t.namedRepository),
+ tag: t.tag,
+ }
+}
+
+func (c canonicalReference) Familiar() Named {
+ return canonicalReference{
+ namedRepository: familiarizeName(c.namedRepository),
+ digest: c.digest,
+ }
+}
+
+// TagNameOnly adds the default tag "latest" to a reference if it only has
+// a repo name.
+func TagNameOnly(ref Named) Named {
+ if IsNameOnly(ref) {
+ namedTagged, err := WithTag(ref, defaultTag)
+ if err != nil {
+ // Default tag must be valid, to create a NamedTagged
+ // type with non-validated input the WithTag function
+ // should be used instead
+ panic(err)
+ }
+ return namedTagged
+ }
+ return ref
+}
+
+// ParseAnyReference parses a reference string as a possible identifier,
+// full digest, or familiar name.
+func ParseAnyReference(ref string) (Reference, error) {
+ if ok := anchoredIdentifierRegexp.MatchString(ref); ok {
+ return digestReference("sha256:" + ref), nil
+ }
+ if dgst, err := digest.Parse(ref); err == nil {
+ return digestReference(dgst), nil
+ }
+
+ return ParseNormalizedNamed(ref)
+}
+
+// ParseAnyReferenceWithSet parses a reference string as a possible short
+// identifier to be matched in a digest set, a full digest, or familiar name.
+func ParseAnyReferenceWithSet(ref string, ds *digestset.Set) (Reference, error) {
+ if ok := anchoredShortIdentifierRegexp.MatchString(ref); ok {
+ dgst, err := ds.Lookup(ref)
+ if err == nil {
+ return digestReference(dgst), nil
+ }
+ } else {
+ if dgst, err := digest.Parse(ref); err == nil {
+ return digestReference(dgst), nil
+ }
+ }
+
+ return ParseNormalizedNamed(ref)
+}
diff --git a/vendor/github.com/docker/distribution/reference/reference.go b/vendor/github.com/docker/distribution/reference/reference.go
new file mode 100644
index 00000000..2f66cca8
--- /dev/null
+++ b/vendor/github.com/docker/distribution/reference/reference.go
@@ -0,0 +1,433 @@
+// Package reference provides a general type to represent any way of referencing images within the registry.
+// Its main purpose is to abstract tags and digests (content-addressable hash).
+//
+// Grammar
+//
+// reference := name [ ":" tag ] [ "@" digest ]
+// name := [domain '/'] path-component ['/' path-component]*
+// domain := domain-component ['.' domain-component]* [':' port-number]
+// domain-component := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/
+// port-number := /[0-9]+/
+// path-component := alpha-numeric [separator alpha-numeric]*
+// alpha-numeric := /[a-z0-9]+/
+// separator := /[_.]|__|[-]*/
+//
+// tag := /[\w][\w.-]{0,127}/
+//
+// digest := digest-algorithm ":" digest-hex
+// digest-algorithm := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ]*
+// digest-algorithm-separator := /[+.-_]/
+// digest-algorithm-component := /[A-Za-z][A-Za-z0-9]*/
+// digest-hex := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value
+//
+// identifier := /[a-f0-9]{64}/
+// short-identifier := /[a-f0-9]{6,64}/
+package reference
+
+import (
+ "errors"
+ "fmt"
+ "strings"
+
+ "github.com/opencontainers/go-digest"
+)
+
+const (
+ // NameTotalLengthMax is the maximum total number of characters in a repository name.
+ NameTotalLengthMax = 255
+)
+
+var (
+ // ErrReferenceInvalidFormat represents an error while trying to parse a string as a reference.
+ ErrReferenceInvalidFormat = errors.New("invalid reference format")
+
+ // ErrTagInvalidFormat represents an error while trying to parse a string as a tag.
+ ErrTagInvalidFormat = errors.New("invalid tag format")
+
+ // ErrDigestInvalidFormat represents an error while trying to parse a string as a tag.
+ ErrDigestInvalidFormat = errors.New("invalid digest format")
+
+ // ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters.
+ ErrNameContainsUppercase = errors.New("repository name must be lowercase")
+
+ // ErrNameEmpty is returned for empty, invalid repository names.
+ ErrNameEmpty = errors.New("repository name must have at least one component")
+
+ // ErrNameTooLong is returned when a repository name is longer than NameTotalLengthMax.
+ ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", NameTotalLengthMax)
+
+ // ErrNameNotCanonical is returned when a name is not canonical.
+ ErrNameNotCanonical = errors.New("repository name must be canonical")
+)
+
+// Reference is an opaque object reference identifier that may include
+// modifiers such as a hostname, name, tag, and digest.
+type Reference interface {
+ // String returns the full reference
+ String() string
+}
+
+// Field provides a wrapper type for resolving correct reference types when
+// working with encoding.
+type Field struct {
+ reference Reference
+}
+
+// AsField wraps a reference in a Field for encoding.
+func AsField(reference Reference) Field {
+ return Field{reference}
+}
+
+// Reference unwraps the reference type from the field to
+// return the Reference object. This object should be
+// of the appropriate type to further check for different
+// reference types.
+func (f Field) Reference() Reference {
+ return f.reference
+}
+
+// MarshalText serializes the field to byte text which
+// is the string of the reference.
+func (f Field) MarshalText() (p []byte, err error) {
+ return []byte(f.reference.String()), nil
+}
+
+// UnmarshalText parses text bytes by invoking the
+// reference parser to ensure the appropriately
+// typed reference object is wrapped by field.
+func (f *Field) UnmarshalText(p []byte) error {
+ r, err := Parse(string(p))
+ if err != nil {
+ return err
+ }
+
+ f.reference = r
+ return nil
+}
+
+// Named is an object with a full name
+type Named interface {
+ Reference
+ Name() string
+}
+
+// Tagged is an object which has a tag
+type Tagged interface {
+ Reference
+ Tag() string
+}
+
+// NamedTagged is an object including a name and tag.
+type NamedTagged interface {
+ Named
+ Tag() string
+}
+
+// Digested is an object which has a digest
+// in which it can be referenced by
+type Digested interface {
+ Reference
+ Digest() digest.Digest
+}
+
+// Canonical reference is an object with a fully unique
+// name including a name with domain and digest
+type Canonical interface {
+ Named
+ Digest() digest.Digest
+}
+
+// namedRepository is a reference to a repository with a name.
+// A namedRepository has both domain and path components.
+type namedRepository interface {
+ Named
+ Domain() string
+ Path() string
+}
+
+// Domain returns the domain part of the Named reference
+func Domain(named Named) string {
+ if r, ok := named.(namedRepository); ok {
+ return r.Domain()
+ }
+ domain, _ := splitDomain(named.Name())
+ return domain
+}
+
+// Path returns the name without the domain part of the Named reference
+func Path(named Named) (name string) {
+ if r, ok := named.(namedRepository); ok {
+ return r.Path()
+ }
+ _, path := splitDomain(named.Name())
+ return path
+}
+
+func splitDomain(name string) (string, string) {
+ match := anchoredNameRegexp.FindStringSubmatch(name)
+ if len(match) != 3 {
+ return "", name
+ }
+ return match[1], match[2]
+}
+
+// SplitHostname splits a named reference into a
+// hostname and name string. If no valid hostname is
+// found, the hostname is empty and the full value
+// is returned as name
+// DEPRECATED: Use Domain or Path
+func SplitHostname(named Named) (string, string) {
+ if r, ok := named.(namedRepository); ok {
+ return r.Domain(), r.Path()
+ }
+ return splitDomain(named.Name())
+}
+
+// Parse parses s and returns a syntactically valid Reference.
+// If an error was encountered it is returned, along with a nil Reference.
+// NOTE: Parse will not handle short digests.
+func Parse(s string) (Reference, error) {
+ matches := ReferenceRegexp.FindStringSubmatch(s)
+ if matches == nil {
+ if s == "" {
+ return nil, ErrNameEmpty
+ }
+ if ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil {
+ return nil, ErrNameContainsUppercase
+ }
+ return nil, ErrReferenceInvalidFormat
+ }
+
+ if len(matches[1]) > NameTotalLengthMax {
+ return nil, ErrNameTooLong
+ }
+
+ var repo repository
+
+ nameMatch := anchoredNameRegexp.FindStringSubmatch(matches[1])
+ if nameMatch != nil && len(nameMatch) == 3 {
+ repo.domain = nameMatch[1]
+ repo.path = nameMatch[2]
+ } else {
+ repo.domain = ""
+ repo.path = matches[1]
+ }
+
+ ref := reference{
+ namedRepository: repo,
+ tag: matches[2],
+ }
+ if matches[3] != "" {
+ var err error
+ ref.digest, err = digest.Parse(matches[3])
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ r := getBestReferenceType(ref)
+ if r == nil {
+ return nil, ErrNameEmpty
+ }
+
+ return r, nil
+}
+
+// ParseNamed parses s and returns a syntactically valid reference implementing
+// the Named interface. The reference must have a name and be in the canonical
+// form, otherwise an error is returned.
+// If an error was encountered it is returned, along with a nil Reference.
+// NOTE: ParseNamed will not handle short digests.
+func ParseNamed(s string) (Named, error) {
+ named, err := ParseNormalizedNamed(s)
+ if err != nil {
+ return nil, err
+ }
+ if named.String() != s {
+ return nil, ErrNameNotCanonical
+ }
+ return named, nil
+}
+
+// WithName returns a named object representing the given string. If the input
+// is invalid ErrReferenceInvalidFormat will be returned.
+func WithName(name string) (Named, error) {
+ if len(name) > NameTotalLengthMax {
+ return nil, ErrNameTooLong
+ }
+
+ match := anchoredNameRegexp.FindStringSubmatch(name)
+ if match == nil || len(match) != 3 {
+ return nil, ErrReferenceInvalidFormat
+ }
+ return repository{
+ domain: match[1],
+ path: match[2],
+ }, nil
+}
+
+// WithTag combines the name from "name" and the tag from "tag" to form a
+// reference incorporating both the name and the tag.
+func WithTag(name Named, tag string) (NamedTagged, error) {
+ if !anchoredTagRegexp.MatchString(tag) {
+ return nil, ErrTagInvalidFormat
+ }
+ var repo repository
+ if r, ok := name.(namedRepository); ok {
+ repo.domain = r.Domain()
+ repo.path = r.Path()
+ } else {
+ repo.path = name.Name()
+ }
+ if canonical, ok := name.(Canonical); ok {
+ return reference{
+ namedRepository: repo,
+ tag: tag,
+ digest: canonical.Digest(),
+ }, nil
+ }
+ return taggedReference{
+ namedRepository: repo,
+ tag: tag,
+ }, nil
+}
+
+// WithDigest combines the name from "name" and the digest from "digest" to form
+// a reference incorporating both the name and the digest.
+func WithDigest(name Named, digest digest.Digest) (Canonical, error) {
+ if !anchoredDigestRegexp.MatchString(digest.String()) {
+ return nil, ErrDigestInvalidFormat
+ }
+ var repo repository
+ if r, ok := name.(namedRepository); ok {
+ repo.domain = r.Domain()
+ repo.path = r.Path()
+ } else {
+ repo.path = name.Name()
+ }
+ if tagged, ok := name.(Tagged); ok {
+ return reference{
+ namedRepository: repo,
+ tag: tagged.Tag(),
+ digest: digest,
+ }, nil
+ }
+ return canonicalReference{
+ namedRepository: repo,
+ digest: digest,
+ }, nil
+}
+
+// TrimNamed removes any tag or digest from the named reference.
+func TrimNamed(ref Named) Named {
+ domain, path := SplitHostname(ref)
+ return repository{
+ domain: domain,
+ path: path,
+ }
+}
+
+func getBestReferenceType(ref reference) Reference {
+ if ref.Name() == "" {
+ // Allow digest only references
+ if ref.digest != "" {
+ return digestReference(ref.digest)
+ }
+ return nil
+ }
+ if ref.tag == "" {
+ if ref.digest != "" {
+ return canonicalReference{
+ namedRepository: ref.namedRepository,
+ digest: ref.digest,
+ }
+ }
+ return ref.namedRepository
+ }
+ if ref.digest == "" {
+ return taggedReference{
+ namedRepository: ref.namedRepository,
+ tag: ref.tag,
+ }
+ }
+
+ return ref
+}
+
+type reference struct {
+ namedRepository
+ tag string
+ digest digest.Digest
+}
+
+func (r reference) String() string {
+ return r.Name() + ":" + r.tag + "@" + r.digest.String()
+}
+
+func (r reference) Tag() string {
+ return r.tag
+}
+
+func (r reference) Digest() digest.Digest {
+ return r.digest
+}
+
+type repository struct {
+ domain string
+ path string
+}
+
+func (r repository) String() string {
+ return r.Name()
+}
+
+func (r repository) Name() string {
+ if r.domain == "" {
+ return r.path
+ }
+ return r.domain + "/" + r.path
+}
+
+func (r repository) Domain() string {
+ return r.domain
+}
+
+func (r repository) Path() string {
+ return r.path
+}
+
+type digestReference digest.Digest
+
+func (d digestReference) String() string {
+ return digest.Digest(d).String()
+}
+
+func (d digestReference) Digest() digest.Digest {
+ return digest.Digest(d)
+}
+
+type taggedReference struct {
+ namedRepository
+ tag string
+}
+
+func (t taggedReference) String() string {
+ return t.Name() + ":" + t.tag
+}
+
+func (t taggedReference) Tag() string {
+ return t.tag
+}
+
+type canonicalReference struct {
+ namedRepository
+ digest digest.Digest
+}
+
+func (c canonicalReference) String() string {
+ return c.Name() + "@" + c.digest.String()
+}
+
+func (c canonicalReference) Digest() digest.Digest {
+ return c.digest
+}
diff --git a/vendor/github.com/docker/distribution/reference/regexp.go b/vendor/github.com/docker/distribution/reference/regexp.go
new file mode 100644
index 00000000..78603493
--- /dev/null
+++ b/vendor/github.com/docker/distribution/reference/regexp.go
@@ -0,0 +1,143 @@
+package reference
+
+import "regexp"
+
+var (
+ // alphaNumericRegexp defines the alpha numeric atom, typically a
+ // component of names. This only allows lower case characters and digits.
+ alphaNumericRegexp = match(`[a-z0-9]+`)
+
+ // separatorRegexp defines the separators allowed to be embedded in name
+ // components. This allow one period, one or two underscore and multiple
+ // dashes.
+ separatorRegexp = match(`(?:[._]|__|[-]*)`)
+
+ // nameComponentRegexp restricts registry path component names to start
+ // with at least one letter or number, with following parts able to be
+ // separated by one period, one or two underscore and multiple dashes.
+ nameComponentRegexp = expression(
+ alphaNumericRegexp,
+ optional(repeated(separatorRegexp, alphaNumericRegexp)))
+
+ // domainComponentRegexp restricts the registry domain component of a
+ // repository name to start with a component as defined by DomainRegexp
+ // and followed by an optional port.
+ domainComponentRegexp = match(`(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])`)
+
+ // DomainRegexp defines the structure of potential domain components
+ // that may be part of image names. This is purposely a subset of what is
+ // allowed by DNS to ensure backwards compatibility with Docker image
+ // names.
+ DomainRegexp = expression(
+ domainComponentRegexp,
+ optional(repeated(literal(`.`), domainComponentRegexp)),
+ optional(literal(`:`), match(`[0-9]+`)))
+
+ // TagRegexp matches valid tag names. From docker/docker:graph/tags.go.
+ TagRegexp = match(`[\w][\w.-]{0,127}`)
+
+ // anchoredTagRegexp matches valid tag names, anchored at the start and
+ // end of the matched string.
+ anchoredTagRegexp = anchored(TagRegexp)
+
+ // DigestRegexp matches valid digests.
+ DigestRegexp = match(`[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`)
+
+ // anchoredDigestRegexp matches valid digests, anchored at the start and
+ // end of the matched string.
+ anchoredDigestRegexp = anchored(DigestRegexp)
+
+ // NameRegexp is the format for the name component of references. The
+ // regexp has capturing groups for the domain and name part omitting
+ // the separating forward slash from either.
+ NameRegexp = expression(
+ optional(DomainRegexp, literal(`/`)),
+ nameComponentRegexp,
+ optional(repeated(literal(`/`), nameComponentRegexp)))
+
+ // anchoredNameRegexp is used to parse a name value, capturing the
+ // domain and trailing components.
+ anchoredNameRegexp = anchored(
+ optional(capture(DomainRegexp), literal(`/`)),
+ capture(nameComponentRegexp,
+ optional(repeated(literal(`/`), nameComponentRegexp))))
+
+ // ReferenceRegexp is the full supported format of a reference. The regexp
+ // is anchored and has capturing groups for name, tag, and digest
+ // components.
+ ReferenceRegexp = anchored(capture(NameRegexp),
+ optional(literal(":"), capture(TagRegexp)),
+ optional(literal("@"), capture(DigestRegexp)))
+
+ // IdentifierRegexp is the format for string identifier used as a
+ // content addressable identifier using sha256. These identifiers
+ // are like digests without the algorithm, since sha256 is used.
+ IdentifierRegexp = match(`([a-f0-9]{64})`)
+
+ // ShortIdentifierRegexp is the format used to represent a prefix
+ // of an identifier. A prefix may be used to match a sha256 identifier
+ // within a list of trusted identifiers.
+ ShortIdentifierRegexp = match(`([a-f0-9]{6,64})`)
+
+ // anchoredIdentifierRegexp is used to check or match an
+ // identifier value, anchored at start and end of string.
+ anchoredIdentifierRegexp = anchored(IdentifierRegexp)
+
+ // anchoredShortIdentifierRegexp is used to check if a value
+ // is a possible identifier prefix, anchored at start and end
+ // of string.
+ anchoredShortIdentifierRegexp = anchored(ShortIdentifierRegexp)
+)
+
+// match compiles the string to a regular expression.
+var match = regexp.MustCompile
+
+// literal compiles s into a literal regular expression, escaping any regexp
+// reserved characters.
+func literal(s string) *regexp.Regexp {
+ re := match(regexp.QuoteMeta(s))
+
+ if _, complete := re.LiteralPrefix(); !complete {
+ panic("must be a literal")
+ }
+
+ return re
+}
+
+// expression defines a full expression, where each regular expression must
+// follow the previous.
+func expression(res ...*regexp.Regexp) *regexp.Regexp {
+ var s string
+ for _, re := range res {
+ s += re.String()
+ }
+
+ return match(s)
+}
+
+// optional wraps the expression in a non-capturing group and makes the
+// production optional.
+func optional(res ...*regexp.Regexp) *regexp.Regexp {
+ return match(group(expression(res...)).String() + `?`)
+}
+
+// repeated wraps the regexp in a non-capturing group to get one or more
+// matches.
+func repeated(res ...*regexp.Regexp) *regexp.Regexp {
+ return match(group(expression(res...)).String() + `+`)
+}
+
+// group wraps the regexp in a non-capturing group.
+func group(res ...*regexp.Regexp) *regexp.Regexp {
+ return match(`(?:` + expression(res...).String() + `)`)
+}
+
+// capture wraps the expression in a capturing group.
+func capture(res ...*regexp.Regexp) *regexp.Regexp {
+ return match(`(` + expression(res...).String() + `)`)
+}
+
+// anchored anchors the regular expression by adding start and end delimiters.
+func anchored(res ...*regexp.Regexp) *regexp.Regexp {
+ return match(`^` + expression(res...).String() + `$`)
+}
diff --git a/vendor/github.com/docker/distribution/registry/api/errcode/errors.go b/vendor/github.com/docker/distribution/registry/api/errcode/errors.go
new file mode 100644
index 00000000..6d9bb4b6
--- /dev/null
+++ b/vendor/github.com/docker/distribution/registry/api/errcode/errors.go
@@ -0,0 +1,267 @@
+package errcode
+
+import (
+ "encoding/json"
+ "fmt"
+ "strings"
+)
+
+// ErrorCoder is the base interface for ErrorCode and Error allowing
+// users of each to just call ErrorCode to get the real ID of each
+type ErrorCoder interface {
+ ErrorCode() ErrorCode
+}
+
+// ErrorCode represents the error type. The errors are serialized via strings
+// and the integer format may change and should *never* be exported.
+type ErrorCode int
+
+var _ error = ErrorCode(0)
+
+// ErrorCode just returns itself
+func (ec ErrorCode) ErrorCode() ErrorCode {
+ return ec
+}
+
+// Error returns the ID/Value
+func (ec ErrorCode) Error() string {
+ // NOTE(stevvooe): Cannot use message here since it may have unpopulated args.
+ return strings.ToLower(strings.Replace(ec.String(), "_", " ", -1))
+}
+
+// Descriptor returns the descriptor for the error code.
+func (ec ErrorCode) Descriptor() ErrorDescriptor {
+ d, ok := errorCodeToDescriptors[ec]
+
+ if !ok {
+ return ErrorCodeUnknown.Descriptor()
+ }
+
+ return d
+}
+
+// String returns the canonical identifier for this error code.
+func (ec ErrorCode) String() string {
+ return ec.Descriptor().Value
+}
+
+// Message returned the human-readable error message for this error code.
+func (ec ErrorCode) Message() string {
+ return ec.Descriptor().Message
+}
+
+// MarshalText encodes the receiver into UTF-8-encoded text and returns the
+// result.
+func (ec ErrorCode) MarshalText() (text []byte, err error) {
+ return []byte(ec.String()), nil
+}
+
+// UnmarshalText decodes the form generated by MarshalText.
+func (ec *ErrorCode) UnmarshalText(text []byte) error {
+ desc, ok := idToDescriptors[string(text)]
+
+ if !ok {
+ desc = ErrorCodeUnknown.Descriptor()
+ }
+
+ *ec = desc.Code
+
+ return nil
+}
+
+// WithMessage creates a new Error struct based on the passed-in info and
+// overrides the Message property.
+func (ec ErrorCode) WithMessage(message string) Error {
+ return Error{
+ Code: ec,
+ Message: message,
+ }
+}
+
+// WithDetail creates a new Error struct based on the passed-in info and
+// set the Detail property appropriately
+func (ec ErrorCode) WithDetail(detail interface{}) Error {
+ return Error{
+ Code: ec,
+ Message: ec.Message(),
+ }.WithDetail(detail)
+}
+
+// WithArgs creates a new Error struct and sets the Args slice
+func (ec ErrorCode) WithArgs(args ...interface{}) Error {
+ return Error{
+ Code: ec,
+ Message: ec.Message(),
+ }.WithArgs(args...)
+}
+
+// Error provides a wrapper around ErrorCode with extra Details provided.
+type Error struct {
+ Code ErrorCode `json:"code"`
+ Message string `json:"message"`
+ Detail interface{} `json:"detail,omitempty"`
+
+ // TODO(duglin): See if we need an "args" property so we can do the
+ // variable substitution right before showing the message to the user
+}
+
+var _ error = Error{}
+
+// ErrorCode returns the ID/Value of this Error
+func (e Error) ErrorCode() ErrorCode {
+ return e.Code
+}
+
+// Error returns a human readable representation of the error.
+func (e Error) Error() string {
+ return fmt.Sprintf("%s: %s", e.Code.Error(), e.Message)
+}
+
+// WithDetail will return a new Error, based on the current one, but with
+// some Detail info added
+func (e Error) WithDetail(detail interface{}) Error {
+ return Error{
+ Code: e.Code,
+ Message: e.Message,
+ Detail: detail,
+ }
+}
+
+// WithArgs uses the passed-in list of interface{} as the substitution
+// variables in the Error's Message string, but returns a new Error
+func (e Error) WithArgs(args ...interface{}) Error {
+ return Error{
+ Code: e.Code,
+ Message: fmt.Sprintf(e.Code.Message(), args...),
+ Detail: e.Detail,
+ }
+}
+
+// ErrorDescriptor provides relevant information about a given error code.
+type ErrorDescriptor struct {
+ // Code is the error code that this descriptor describes.
+ Code ErrorCode
+
+ // Value provides a unique, string key, often captilized with
+ // underscores, to identify the error code. This value is used as the
+ // keyed value when serializing api errors.
+ Value string
+
+ // Message is a short, human readable decription of the error condition
+ // included in API responses.
+ Message string
+
+ // Description provides a complete account of the errors purpose, suitable
+ // for use in documentation.
+ Description string
+
+ // HTTPStatusCode provides the http status code that is associated with
+ // this error condition.
+ HTTPStatusCode int
+}
+
+// ParseErrorCode returns the value by the string error code.
+// `ErrorCodeUnknown` will be returned if the error is not known.
+func ParseErrorCode(value string) ErrorCode {
+ ed, ok := idToDescriptors[value]
+ if ok {
+ return ed.Code
+ }
+
+ return ErrorCodeUnknown
+}
+
+// Errors provides the envelope for multiple errors and a few sugar methods
+// for use within the application.
+type Errors []error
+
+var _ error = Errors{}
+
+func (errs Errors) Error() string {
+ switch len(errs) {
+ case 0:
+ return ""
+ case 1:
+ return errs[0].Error()
+ default:
+ msg := "errors:\n"
+ for _, err := range errs {
+ msg += err.Error() + "\n"
+ }
+ return msg
+ }
+}
+
+// Len returns the current number of errors.
+func (errs Errors) Len() int {
+ return len(errs)
+}
+
+// MarshalJSON converts slice of error, ErrorCode or Error into a
+// slice of Error - then serializes
+func (errs Errors) MarshalJSON() ([]byte, error) {
+ var tmpErrs struct {
+ Errors []Error `json:"errors,omitempty"`
+ }
+
+ for _, daErr := range errs {
+ var err Error
+
+ switch daErr.(type) {
+ case ErrorCode:
+ err = daErr.(ErrorCode).WithDetail(nil)
+ case Error:
+ err = daErr.(Error)
+ default:
+ err = ErrorCodeUnknown.WithDetail(daErr)
+
+ }
+
+ // If the Error struct was setup and they forgot to set the
+ // Message field (meaning its "") then grab it from the ErrCode
+ msg := err.Message
+ if msg == "" {
+ msg = err.Code.Message()
+ }
+
+ tmpErrs.Errors = append(tmpErrs.Errors, Error{
+ Code: err.Code,
+ Message: msg,
+ Detail: err.Detail,
+ })
+ }
+
+ return json.Marshal(tmpErrs)
+}
+
+// UnmarshalJSON deserializes []Error and then converts it into slice of
+// Error or ErrorCode
+func (errs *Errors) UnmarshalJSON(data []byte) error {
+ var tmpErrs struct {
+ Errors []Error
+ }
+
+ if err := json.Unmarshal(data, &tmpErrs); err != nil {
+ return err
+ }
+
+ var newErrs Errors
+ for _, daErr := range tmpErrs.Errors {
+ // If Message is empty or exactly matches the Code's message string
+ // then just use the Code, no need for a full Error struct
+ if daErr.Detail == nil && (daErr.Message == "" || daErr.Message == daErr.Code.Message()) {
+ // Error's w/o details get converted to ErrorCode
+ newErrs = append(newErrs, daErr.Code)
+ } else {
+ // Error's w/ details are untouched
+ newErrs = append(newErrs, Error{
+ Code: daErr.Code,
+ Message: daErr.Message,
+ Detail: daErr.Detail,
+ })
+ }
+ }
+
+ *errs = newErrs
+ return nil
+}
diff --git a/vendor/github.com/docker/distribution/registry/api/errcode/handler.go b/vendor/github.com/docker/distribution/registry/api/errcode/handler.go
new file mode 100644
index 00000000..d77e7047
--- /dev/null
+++ b/vendor/github.com/docker/distribution/registry/api/errcode/handler.go
@@ -0,0 +1,40 @@
+package errcode
+
+import (
+ "encoding/json"
+ "net/http"
+)
+
+// ServeJSON attempts to serve the errcode in a JSON envelope. It marshals err
+// and sets the content-type header to 'application/json'. It will handle
+// ErrorCoder and Errors, and if necessary will create an envelope.
+func ServeJSON(w http.ResponseWriter, err error) error {
+ w.Header().Set("Content-Type", "application/json; charset=utf-8")
+ var sc int
+
+ switch errs := err.(type) {
+ case Errors:
+ if len(errs) < 1 {
+ break
+ }
+
+ if err, ok := errs[0].(ErrorCoder); ok {
+ sc = err.ErrorCode().Descriptor().HTTPStatusCode
+ }
+ case ErrorCoder:
+ sc = errs.ErrorCode().Descriptor().HTTPStatusCode
+ err = Errors{err} // create an envelope.
+ default:
+ // We just have an unhandled error type, so just place in an envelope
+ // and move along.
+ err = Errors{err}
+ }
+
+ if sc == 0 {
+ sc = http.StatusInternalServerError
+ }
+
+ w.WriteHeader(sc)
+
+ return json.NewEncoder(w).Encode(err)
+}
diff --git a/vendor/github.com/docker/distribution/registry/api/errcode/register.go b/vendor/github.com/docker/distribution/registry/api/errcode/register.go
new file mode 100644
index 00000000..d1e8826c
--- /dev/null
+++ b/vendor/github.com/docker/distribution/registry/api/errcode/register.go
@@ -0,0 +1,138 @@
+package errcode
+
+import (
+ "fmt"
+ "net/http"
+ "sort"
+ "sync"
+)
+
+var (
+ errorCodeToDescriptors = map[ErrorCode]ErrorDescriptor{}
+ idToDescriptors = map[string]ErrorDescriptor{}
+ groupToDescriptors = map[string][]ErrorDescriptor{}
+)
+
+var (
+ // ErrorCodeUnknown is a generic error that can be used as a last
+ // resort if there is no situation-specific error message that can be used
+ ErrorCodeUnknown = Register("errcode", ErrorDescriptor{
+ Value: "UNKNOWN",
+ Message: "unknown error",
+ Description: `Generic error returned when the error does not have an
+ API classification.`,
+ HTTPStatusCode: http.StatusInternalServerError,
+ })
+
+ // ErrorCodeUnsupported is returned when an operation is not supported.
+ ErrorCodeUnsupported = Register("errcode", ErrorDescriptor{
+ Value: "UNSUPPORTED",
+ Message: "The operation is unsupported.",
+ Description: `The operation was unsupported due to a missing
+ implementation or invalid set of parameters.`,
+ HTTPStatusCode: http.StatusMethodNotAllowed,
+ })
+
+ // ErrorCodeUnauthorized is returned if a request requires
+ // authentication.
+ ErrorCodeUnauthorized = Register("errcode", ErrorDescriptor{
+ Value: "UNAUTHORIZED",
+ Message: "authentication required",
+ Description: `The access controller was unable to authenticate
+ the client. Often this will be accompanied by a
+ Www-Authenticate HTTP response header indicating how to
+ authenticate.`,
+ HTTPStatusCode: http.StatusUnauthorized,
+ })
+
+ // ErrorCodeDenied is returned if a client does not have sufficient
+ // permission to perform an action.
+ ErrorCodeDenied = Register("errcode", ErrorDescriptor{
+ Value: "DENIED",
+ Message: "requested access to the resource is denied",
+ Description: `The access controller denied access for the
+ operation on a resource.`,
+ HTTPStatusCode: http.StatusForbidden,
+ })
+
+ // ErrorCodeUnavailable provides a common error to report unavailability
+ // of a service or endpoint.
+ ErrorCodeUnavailable = Register("errcode", ErrorDescriptor{
+ Value: "UNAVAILABLE",
+ Message: "service unavailable",
+ Description: "Returned when a service is not available",
+ HTTPStatusCode: http.StatusServiceUnavailable,
+ })
+
+ // ErrorCodeTooManyRequests is returned if a client attempts too many
+ // times to contact a service endpoint.
+ ErrorCodeTooManyRequests = Register("errcode", ErrorDescriptor{
+ Value: "TOOMANYREQUESTS",
+ Message: "too many requests",
+ Description: `Returned when a client attempts to contact a
+ service too many times`,
+ HTTPStatusCode: http.StatusTooManyRequests,
+ })
+)
+
+var nextCode = 1000
+var registerLock sync.Mutex
+
+// Register will make the passed-in error known to the environment and
+// return a new ErrorCode
+func Register(group string, descriptor ErrorDescriptor) ErrorCode {
+ registerLock.Lock()
+ defer registerLock.Unlock()
+
+ descriptor.Code = ErrorCode(nextCode)
+
+ if _, ok := idToDescriptors[descriptor.Value]; ok {
+ panic(fmt.Sprintf("ErrorValue %q is already registered", descriptor.Value))
+ }
+ if _, ok := errorCodeToDescriptors[descriptor.Code]; ok {
+ panic(fmt.Sprintf("ErrorCode %v is already registered", descriptor.Code))
+ }
+
+ groupToDescriptors[group] = append(groupToDescriptors[group], descriptor)
+ errorCodeToDescriptors[descriptor.Code] = descriptor
+ idToDescriptors[descriptor.Value] = descriptor
+
+ nextCode++
+ return descriptor.Code
+}
+
+type byValue []ErrorDescriptor
+
+func (a byValue) Len() int { return len(a) }
+func (a byValue) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a byValue) Less(i, j int) bool { return a[i].Value < a[j].Value }
+
+// GetGroupNames returns the list of Error group names that are registered
+func GetGroupNames() []string {
+ keys := []string{}
+
+ for k := range groupToDescriptors {
+ keys = append(keys, k)
+ }
+ sort.Strings(keys)
+ return keys
+}
+
+// GetErrorCodeGroup returns the named group of error descriptors
+func GetErrorCodeGroup(name string) []ErrorDescriptor {
+ desc := groupToDescriptors[name]
+ sort.Sort(byValue(desc))
+ return desc
+}
+
+// GetErrorAllDescriptors returns a slice of all ErrorDescriptors that are
+// registered, irrespective of what group they're in
+func GetErrorAllDescriptors() []ErrorDescriptor {
+ result := []ErrorDescriptor{}
+
+ for _, group := range GetGroupNames() {
+ result = append(result, GetErrorCodeGroup(group)...)
+ }
+ sort.Sort(byValue(result))
+ return result
+}
diff --git a/vendor/github.com/docker/docker/AUTHORS b/vendor/github.com/docker/docker/AUTHORS
new file mode 100644
index 00000000..dffacff1
--- /dev/null
+++ b/vendor/github.com/docker/docker/AUTHORS
@@ -0,0 +1,2175 @@
+# This file lists all individuals having contributed content to the repository.
+# For how it is generated, see `hack/generate-authors.sh`.
+
+Aanand Prasad
+Aaron Davidson
+Aaron Feng
+Aaron Hnatiw
+Aaron Huslage
+Aaron L. Xu
+Aaron Lehmann
+Aaron Welch
+Aaron.L.Xu
+Abel Muiño
+Abhijeet Kasurde
+Abhinandan Prativadi
+Abhinav Ajgaonkar
+Abhishek Chanda
+Abhishek Sharma
+Abin Shahab
+Adam Avilla
+Adam Dobrawy
+Adam Eijdenberg
+Adam Kunk
+Adam Miller
+Adam Mills
+Adam Pointer
+Adam Singer
+Adam Walz
+Addam Hardy
+Aditi Rajagopal
+Aditya
+Adnan Khan
+Adolfo Ochagavía
+Adria Casas
+Adrian Moisey
+Adrian Mouat
+Adrian Oprea
+Adrien Folie
+Adrien Gallouët
+Ahmed Kamal
+Ahmet Alp Balkan
+Aidan Feldman
+Aidan Hobson Sayers
+AJ Bowen
+Ajey Charantimath
+ajneu
+Akash Gupta
+Akhil Mohan
+Akihiro Matsushima
+Akihiro Suda
+Akim Demaille
+Akira Koyasu
+Akshay Karle
+Al Tobey
+alambike
+Alan Hoyle
+Alan Scherger
+Alan Thompson
+Albert Callarisa
+Albert Zhang
+Albin Kerouanton
+Alejandro González Hevia
+Aleksa Sarai
+Aleksandrs Fadins
+Alena Prokharchyk
+Alessandro Boch
+Alessio Biancalana
+Alex Chan
+Alex Chen
+Alex Coventry
+Alex Crawford
+Alex Ellis
+Alex Gaynor
+Alex Goodman
+Alex Olshansky
+Alex Samorukov
+Alex Warhawk
+Alexander Artemenko
+Alexander Boyd
+Alexander Larsson
+Alexander Midlash
+Alexander Morozov
+Alexander Shopov
+Alexandre Beslic
+Alexandre Garnier
+Alexandre González
+Alexandre Jomin
+Alexandru Sfirlogea
+Alexei Margasov
+Alexey Guskov
+Alexey Kotlyarov
+Alexey Shamrin
+Alexis THOMAS
+Alfred Landrum
+Ali Dehghani
+Alicia Lauerman
+Alihan Demir
+Allen Madsen
+Allen Sun
+almoehi
+Alvaro Saurin
+Alvin Deng
+Alvin Richards
+amangoel
+Amen Belayneh
+Amir Goldstein
+Amit Bakshi
+Amit Krishnan
+Amit Shukla
+Amr Gawish
+Amy Lindburg
+Anand Patil
+AnandkumarPatel
+Anatoly Borodin
+Anca Iordache
+Anchal Agrawal
+Anda Xu
+Anders Janmyr
+Andre Dublin <81dublin@gmail.com>
+Andre Granovsky
+Andrea Denisse Gómez
+Andrea Luzzardi
+Andrea Turli
+Andreas Elvers
+Andreas Köhler
+Andreas Savvides
+Andreas Tiefenthaler
+Andrei Gherzan
+Andrei Vagin
+Andrew C. Bodine
+Andrew Clay Shafer
+Andrew Duckworth
+Andrew France
+Andrew Gerrand
+Andrew Guenther
+Andrew He
+Andrew Hsu
+Andrew Kuklewicz
+Andrew Macgregor
+Andrew Macpherson
+Andrew Martin
+Andrew McDonnell
+Andrew Munsell
+Andrew Pennebaker
+Andrew Po
+Andrew Weiss
+Andrew Williams
+Andrews Medina
+Andrey Kolomentsev
+Andrey Petrov
+Andrey Stolbovsky
+André Martins
+andy
+Andy Chambers
+andy diller
+Andy Goldstein
+Andy Kipp
+Andy Rothfusz
+Andy Smith
+Andy Wilson
+Anes Hasicic
+Anil Belur
+Anil Madhavapeddy
+Ankit Jain
+Ankush Agarwal
+Anonmily
+Anran Qiao
+Anshul Pundir
+Anthon van der Neut
+Anthony Baire
+Anthony Bishopric
+Anthony Dahanne
+Anthony Sottile
+Anton Löfgren
+Anton Nikitin
+Anton Polonskiy
+Anton Tiurin
+Antonio Murdaca
+Antonis Kalipetis
+Antony Messerli
+Anuj Bahuguna
+Anusha Ragunathan
+apocas
+Arash Deshmeh
+ArikaChen
+Arko Dasgupta
+Arnaud Lefebvre
+Arnaud Porterie
+Arnaud Rebillout
+Arthur Barr
+Arthur Gautier
+Artur Meyster
+Arun Gupta
+Asad Saeeduddin
+Asbjørn Enge
+averagehuman
+Avi Das
+Avi Kivity
+Avi Miller
+Avi Vaid
+ayoshitake
+Azat Khuyiyakhmetov
+Bardia Keyoumarsi
+Barnaby Gray
+Barry Allard
+Bartłomiej Piotrowski
+Bastiaan Bakker
+bdevloed
+Ben Bonnefoy
+Ben Firshman
+Ben Golub
+Ben Gould
+Ben Hall
+Ben Sargent
+Ben Severson
+Ben Toews
+Ben Wiklund
+Benjamin Atkin
+Benjamin Baker
+Benjamin Boudreau
+Benjamin Yolken
+Benny Ng
+Benoit Chesneau
+Bernerd Schaefer
+Bernhard M. Wiedemann
+Bert Goethals
+Bertrand Roussel
+Bevisy Zhang
+Bharath Thiruveedula
+Bhiraj Butala
+Bhumika Bayani
+Bilal Amarni
+Bill Wang
+Bily Zhang
+Bin Liu
+Bingshen Wang