diff --git a/.github/workflows/buf-ci.yaml b/.github/workflows/buf-ci.yaml
index 400071e..11ad119 100644
--- a/.github/workflows/buf-ci.yaml
+++ b/.github/workflows/buf-ci.yaml
@@ -13,5 +13,5 @@ jobs:
buf:
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- uses: bufbuild/buf-action@v1
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 7d9b009..f87262a 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.10.0"
+ ".": "0.15.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 12882ca..63758e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,87 @@
# Changelog
+## [0.15.0](https://github.com/openkcm/plugin-sdk/compare/v0.14.0...v0.15.0) (2026-08-18)
+
+
+### Features
+
+* add get key versions to keystore proto ([#172](https://github.com/openkcm/plugin-sdk/issues/172)) ([7f45e03](https://github.com/openkcm/plugin-sdk/commit/7f45e031d5a62bbfdb6ac89a3da504f015a9f6ef))
+
+
+### Bug Fixes
+
+* **deps:** bump buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go from 1.36.11-20260415201107-50325440f8f2.1 to 1.36.11-20260709200747-435963d16310.1 ([#169](https://github.com/openkcm/plugin-sdk/issues/169)) ([315b18c](https://github.com/openkcm/plugin-sdk/commit/315b18c71cc1b303d44e32561256dae6ca6e6f84))
+* **deps:** bump github.com/google/cel-go from 0.28.0 to 0.29.0 ([#170](https://github.com/openkcm/plugin-sdk/issues/170)) ([9a6cdc2](https://github.com/openkcm/plugin-sdk/commit/9a6cdc2227b6dce6a85bf65fccd88517959514ca))
+* **deps:** bump golang.org/x/net from 0.53.0 to 0.55.0 ([#166](https://github.com/openkcm/plugin-sdk/issues/166)) ([32bb58e](https://github.com/openkcm/plugin-sdk/commit/32bb58e9980cc7d8b130e50b4b27ba5fe54d6232))
+* **deps:** bump google.golang.org/grpc from 1.82.0 to 1.82.1 in the gomod-group group ([#168](https://github.com/openkcm/plugin-sdk/issues/168)) ([78856d9](https://github.com/openkcm/plugin-sdk/commit/78856d9edf71b65d3cb54d0db53e0238e76d23c3))
+* **deps:** bump the gomod-group group across 1 directory with 2 updates ([#167](https://github.com/openkcm/plugin-sdk/issues/167)) ([ea06ed6](https://github.com/openkcm/plugin-sdk/commit/ea06ed64c60d8f9e2a9a515d4240cb60ff34d46a))
+* **deps:** bump the gomod-group group across 1 directory with 4 updates ([#173](https://github.com/openkcm/plugin-sdk/issues/173)) ([45e950e](https://github.com/openkcm/plugin-sdk/commit/45e950e0d93ee237733563d80bfb73c1b6c07f3e))
+
+## [0.14.0](https://github.com/openkcm/plugin-sdk/compare/v0.13.0...v0.14.0) (2026-07-02)
+
+
+### Features
+
+* update keystore role ([#163](https://github.com/openkcm/plugin-sdk/issues/163)) ([48b567f](https://github.com/openkcm/plugin-sdk/commit/48b567f2056129749e4fba32432adea5b40d651b))
+
+
+### Bug Fixes
+
+* **deps:** bump actions/checkout from 6 to 7 ([#161](https://github.com/openkcm/plugin-sdk/issues/161)) ([8df5e9c](https://github.com/openkcm/plugin-sdk/commit/8df5e9c9fa635d0eb1982a6bd8295eb87a36add8))
+* **deps:** bump golang.org/x/sys from 0.45.0 to 0.46.0 in the gomod-group group ([#160](https://github.com/openkcm/plugin-sdk/issues/160)) ([e182aa6](https://github.com/openkcm/plugin-sdk/commit/e182aa69a7e08d6e7570bd03595b798a5026014e))
+
+## [0.13.0](https://github.com/openkcm/plugin-sdk/compare/v0.12.0...v0.13.0) (2026-06-09)
+
+
+### Features
+
+* add grant/remove trust for keystore management plugin ([#157](https://github.com/openkcm/plugin-sdk/issues/157)) ([24dc562](https://github.com/openkcm/plugin-sdk/commit/24dc562a8d7dbed36112992ad5d367a7a91e1ff2))
+
+
+### Bug Fixes
+
+* **deps:** bump the gomod-group group across 1 directory with 2 updates ([#156](https://github.com/openkcm/plugin-sdk/issues/156)) ([dc441bb](https://github.com/openkcm/plugin-sdk/commit/dc441bba13b1debdaf518c67c05cb32be6fffae1))
+
+## [0.12.0](https://github.com/openkcm/plugin-sdk/compare/v0.11.1...v0.12.0) (2026-05-22)
+
+
+### Features
+
+* generic key error ([#154](https://github.com/openkcm/plugin-sdk/issues/154)) ([63acb38](https://github.com/openkcm/plugin-sdk/commit/63acb3819240ea0c132ade82f670fd32fb70c8cf))
+
+
+### Bug Fixes
+
+* **deps:** bump the gomod-group group across 1 directory with 3 updates ([#152](https://github.com/openkcm/plugin-sdk/issues/152)) ([acdcf18](https://github.com/openkcm/plugin-sdk/commit/acdcf189790ef2f895f05f27f312c6f035e6a6e0))
+
+## [0.11.1](https://github.com/openkcm/plugin-sdk/compare/v0.11.0...v0.11.1) (2026-05-14)
+
+
+### Bug Fixes
+
+* **deps:** bump the gomod-group group across 1 directory with 2 updates ([#146](https://github.com/openkcm/plugin-sdk/issues/146)) ([db2696d](https://github.com/openkcm/plugin-sdk/commit/db2696db14dd763a999e3ef7c652ccbcebc88219))
+
+## [0.11.0](https://github.com/openkcm/plugin-sdk/compare/v0.10.2...v0.11.0) (2026-04-15)
+
+
+### Features
+
+* get user details on identity manager ([#144](https://github.com/openkcm/plugin-sdk/issues/144)) ([60a8a80](https://github.com/openkcm/plugin-sdk/commit/60a8a8097cf61645c782b9c77ba520f0b5db77c3))
+
+## [0.10.2](https://github.com/openkcm/plugin-sdk/compare/v0.10.1...v0.10.2) (2026-03-24)
+
+
+### Bug Fixes
+
+* revert managed keys ([#142](https://github.com/openkcm/plugin-sdk/issues/142)) ([5052979](https://github.com/openkcm/plugin-sdk/commit/5052979fa14ecfb4baaf2e499801ee9c98bb14ce))
+
+## [0.10.1](https://github.com/openkcm/plugin-sdk/compare/v0.10.0...v0.10.1) (2026-03-18)
+
+
+### Bug Fixes
+
+* **deps:** bump the gomod-group group with 2 updates ([#134](https://github.com/openkcm/plugin-sdk/issues/134)) ([d2a4eb9](https://github.com/openkcm/plugin-sdk/commit/d2a4eb9329ecf59d73df6414596be6ecf3027f00))
+
## [0.10.0](https://github.com/openkcm/plugin-sdk/compare/v0.9.9...v0.10.0) (2026-03-12)
diff --git a/Makefile b/Makefile
index e58ff57..7f82b3f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,35 +1,107 @@
.PHONY: generate
+generate: fetch-protos format-proto go-gen internal-go-gen
-generate: patch-swagger-doc format
- go mod tidy
- go mod vendor
+.PHONY: clean-proto
+clean-proto:
+ @find ./proto -type f -name '*.go' -exec rm {} +
-patch-swagger-doc: buf-gen internal-buf-gen
- #./scripts/update_swagger.sh docs/openapiv2/apidocs.swagger.json
+.PHONY: clean-proto-internal
+clean-proto-internal:
+ @find ./internal/proto -type f -name '*.go' -exec rm {} +
-init-git-hooks:
- git config --local core.hooksPath .githooks/
+.PHONY: fetch-protos
+fetch-protos:
+ @protofetch -o vendor-proto fetch
-buf-gen: init-git-hooks
- buf dep update
- ./buf.gen.yaml
- find . -name \*.go -not -path '.git/*' -exec goimports -local github.com/openkcm/plugin-sdk -w {} \;
+.PHONY: go-gen
+go-gen: clean-proto
+ @find ./proto -type f -iname '*.proto' -exec \
+ protoc -I./proto -I./vendor-proto \
+ --go_out=./proto \
+ --go_opt=paths=import \
+ --go_opt=module=github.com/openkcm/plugin-sdk/proto \
+ --go-grpc_out=./proto \
+ --go-grpc_opt=paths=import \
+ --go-grpc_opt=module=github.com/openkcm/plugin-sdk/proto \
+ --go-extension_out=./proto \
+ --go-extension_opt=module=github.com/openkcm/plugin-sdk/proto \
+ --go-extension_opt=submodule=github.com/openkcm/plugin-sdk/proto/service/common \
+ --go-extension_opt=kind=service \
+ --grpc-gateway_out=./proto \
+ --grpc-gateway_opt=paths=import \
+ --grpc-gateway_opt=module=github.com/openkcm/plugin-sdk/proto \
+ --grpc-gateway_opt=logtostderr=true \
+ {} +
-internal-buf-gen:
- buf dep update
- ./internal-buf.gen.yaml
+ @find ./proto -type f -iname '*.proto' -exec \
+ protoc -I./proto -I./vendor-proto \
+ --go-extension_out=./proto \
+ --go-extension_opt=module=github.com/openkcm/plugin-sdk/proto \
+ --go-extension_opt=submodule=github.com/openkcm/plugin-sdk/proto/plugin \
+ --go-extension_opt=kind=plugin \
+ {} +
-format: buf-gen
- buf format -w
+.PHONY: internal-go-gen
+internal-go-gen: clean-proto-internal
+ @find ./internal/proto -type f -iname '*.proto' -exec \
+ protoc -I./internal/proto -I./proto -I./vendor-proto \
+ --go_out=./internal/proto \
+ --go_opt=paths=import \
+ --go_opt=module=github.com/openkcm/plugin-sdk/internal/proto \
+ --go-grpc_out=./internal/proto \
+ --go-grpc_opt=paths=import \
+ --go-grpc_opt=module=github.com/openkcm/plugin-sdk/internal/proto \
+ --go-extension_out=./internal/proto \
+ --go-extension_opt=module=github.com/openkcm/plugin-sdk/internal/proto \
+ --go-extension_opt=submodule=github.com/openkcm/plugin-sdk/internal/proto/service \
+ --go-extension_opt=kind=service \
+ --grpc-gateway_out=./internal/proto \
+ --grpc-gateway_opt=paths=import \
+ --grpc-gateway_opt=module=github.com/openkcm/plugin-sdk/internal/proto \
+ --grpc-gateway_opt=logtostderr=true \
+ {} +
+.PHONY: format-proto
+format-proto:
+ @buf format -w
+
+.PHONY: format
+format: format-proto
+
+.PHONY: validate-proto
+validate-proto: format-proto lint-proto breaking
+
+.PHONY: lint-proto
+lint-proto:
+ @buf lint
+
+.PHONY: breaking
+breaking:
+ @buf breaking --against https://github.com/openkcm/plugin-sdk.git#branch=main
+
+.PHONY: install-proto-tools
+install-proto-tools:
+ brew install protobuf
+ go install \
+ google.golang.org/protobuf/cmd/protoc-gen-go@latest \
+ google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest \
+ github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest \
+ github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest \
+ ./cmd/protoc-gen-go-extension
+ brew install bufbuild/buf/buf
+ npm install -g @coralogix/protofetch
+
+.PHONY: lint-install
lint-install:
go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest
-lint:
+.PHONY: lint
+lint: lint-proto
golangci-lint run -v --fix
+.PHONY: goimports
goimports:
- find . -name \*.go -not -path '.git/*' -exec goimports -local github.com/openkcm/plugin-sdk -w {} \;
+ find ./ -name \*.go -not -path '.git/*' -exec goimports -local github.com/openkcm/plugin-sdk -w {} +
.PHONY: test
test:
diff --git a/README.md b/README.md
index 5331fd7..c042882 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,67 @@ External plugins are separate processes and use
KMS communicates with plugins over gRPC. As such, the various interfaces are defined via gRPC service definitions.
+## Pre-requisites
+
+Several tools are required to generate the code:
+
+1. **`protoc compiler`**: see the instruction on the official [web site](https://protobuf.dev/installation) or install using homebrew `brew install protobuf`.
+2. **`protoc-gen-go`**: install via `go install google.golang.org/protobuf/cmd/protoc-gen-go@latest`.
+3. **`protoc-gen-go-grpc`**: install via `go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest`.
+4. **`protoc-gen-grpc-gateway`**: install via `go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway`.
+5. **`protoc-gen-openapiv2`**: install via `go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2`.
+6. **`protofetch`**: download from the [releases page](https://github.com/coralogix/protofetch/releases/latest) of [the GitHub repository](https://github.com/coralogix/protofetch) or install via `cargo install protofetch` or `npm install -g @coralogix/protofetch`, or using any similar tool compatible with the npm registry.
+
+## Optional tools
+
+Optionally, the [`buf` CLI](https://github.com/bufbuild/buf) tool can be used to validate, detect breaking changes, and format `.proto` files:
+
+- **`buf breaking --against https://github.com/openkcm/api-sdk.git#branch=main`**: detect breaking changes against the main branch of the remote repository.
+- **`buf format -w`**: format `.proto` files.
+- **`buf lint`**: lint `.proto` files.
+
+## Makefile
+
+There are several `make` targets defined in the `Makefile`:
+
+- **`fetch-protos`**: download `.proto` dependencies using `protofetch`.
+- **`generate`**: fetches `.proto` dependencies, formats `.proto` files, and generates Go code.
+- **`install-proto-tools`**: installs the tools (including optional) from the following sources: Homebrew, Go registry (via `go install`), NPM registry (via `npm install -g`). See the target definition for the details.
+- **`validate-proto`**: formats and lints `.proto` files, detects breaking changes.
+
+For the rest `make` targets see `Makefile`.
+
+## Dependencies
+
+`.proto` dependencies are managed with the [`protofetch`](https://github.com/coralogix/protofetch) tool. This tool downloads `.proto` files from a specified location of a git repository and places them into the `vendor-proto` directory. The dependencies are specified in the `protofetch.toml` file.
+
+For instance, a dependency on the [`protovalidate`](https://github.com/bufbuild/protovalidate) proto definitions can be specified as follow:
+
+``` toml
+name = "github.com/openkcm/plugin-sdk"
+description = "Plugins SDK of the OpenKCM project"
+
+[protovalidate]
+url = "github.com/bufbuild/protovalidate"
+revision = "v1.1.1"
+content_roots = ["/proto/protovalidate"]
+allow_policies = ["buf/validate/*"]
+```
+
+In order to fetch dependencies, execute:
+
+``` sh
+$ protofetch -o vendor-proto fetch
+```
+
+## Generate Go code from the .proto definitions
+
+The code can be generated with executing the following Make target
+
+```sh
+$ make generate
+```
+
## Support, Feedback, Contributing
This project is open to feature requests/suggestions, bug reports etc. via [GitHub issues](https://github.com/openkcm/plugin-sdk/issues). Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our [Contribution Guidelines](CONTRIBUTING.md).
@@ -27,3 +88,5 @@ We as members, contributors, and leaders pledge to make participation in our com
## Licensing
Copyright 2025 SAP SE or an SAP affiliate company and OpenKCM contributors. Please see our [LICENSE](LICENSE) for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available [via the REUSE tool](https://api.reuse.software/info/github.com/openkcm/plugin-sdk).
+
+

diff --git a/Taskfile.yaml b/Taskfile.yaml
index ec102e2..d2e1149 100644
--- a/Taskfile.yaml
+++ b/Taskfile.yaml
@@ -5,5 +5,5 @@ includes:
taskfile: hack/common/Taskfile_library.yaml
flatten: true
vars:
- CODE_DIRS: '{{.ROOT_DIR}}/pkg/... {{.ROOT_DIR}}/proto/... {{.ROOT_DIR}}/internal/bootstrap/... {{.ROOT_DIR}}/internal/consts/... {{.ROOT_DIR}}/internal/slog2hclog/... {{.ROOT_DIR}}/api/...'
+ CODE_DIRS: '{{.ROOT_DIR}}/pkg/... {{.ROOT_DIR}}/internal/bootstrap/... {{.ROOT_DIR}}/internal/consts/... {{.ROOT_DIR}}/internal/slog2hclog/... {{.ROOT_DIR}}/api/...'
GENERATE_DOCS_INDEX: "false"
diff --git a/buf.gen.yaml b/buf.gen.yaml
deleted file mode 100755
index 3fef379..0000000
--- a/buf.gen.yaml
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env -S buf generate --template
----
-version: v2
-managed:
- enabled: true
- disable:
- - file_option: go_package
- module: buf.build/bufbuild/protovalidate
- override:
- - file_option: go_package_prefix
- value: github.com/openkcm/plugin-sdk/proto
-plugins:
- - local: [ "go", "run", "github.com/openkcm/plugin-sdk/cmd/protoc-gen-go-extension" ]
- out: proto
- opt:
- - module=github.com/openkcm/plugin-sdk/proto
- - submodule=github.com/openkcm/plugin-sdk/proto/service/common
- - kind=service
- - local: [ "go", "run", "github.com/openkcm/plugin-sdk/cmd/protoc-gen-go-extension" ]
- out: proto
- opt:
- - module=github.com/openkcm/plugin-sdk/proto
- - submodule=github.com/openkcm/plugin-sdk/proto/plugin
- - kind=plugin
- - remote: buf.build/protocolbuffers/go:v1.36.11
- out: proto
- opt:
- - paths=source_relative
- - remote: buf.build/grpc/go:v1.6.1
- out: proto
- opt:
- - paths=source_relative
- - remote: buf.build/bufbuild/validate-go:v1.3.0
- out: proto
- opt:
- - paths=source_relative
- - remote: buf.build/grpc-ecosystem/gateway:v2.27.7
- out: proto
- opt:
- - paths=source_relative
- - logtostderr=true
-inputs:
- - directory: proto
diff --git a/buf.lock b/buf.lock
deleted file mode 100644
index d15a117..0000000
--- a/buf.lock
+++ /dev/null
@@ -1,6 +0,0 @@
-# Generated by buf. DO NOT EDIT.
-version: v2
-deps:
- - name: buf.build/bufbuild/protovalidate
- commit: 80ab13bee0bf4272b6161a72bf7034e0
- digest: b5:1aa6a965be5d02d64e1d81954fa2e78ef9d1e33a0c30f92bc2626039006a94deb3a5b05f14ed8893f5c3ffce444ac008f7e968188ad225c4c29c813aa5f2daa1
diff --git a/buf.yaml b/buf.yaml
index 5cb8d78..4ee27ef 100644
--- a/buf.yaml
+++ b/buf.yaml
@@ -1,14 +1,15 @@
version: v2
-deps:
- - buf.build/bufbuild/protovalidate
modules:
- path: proto
- path: internal/proto
+ - path: vendor-proto
lint:
use:
- STANDARD
except:
- SERVICE_SUFFIX
+ ignore:
+ - vendor-proto
breaking:
use:
- FILE
diff --git a/cmd/protoc-gen-go-extension/main.go b/cmd/protoc-gen-go-extension/main.go
index 33dd7a6..da6e412 100644
--- a/cmd/protoc-gen-go-extension/main.go
+++ b/cmd/protoc-gen-go-extension/main.go
@@ -99,7 +99,7 @@ func generateServiceBridges(g *protogen.GeneratedFile, serviceName, serviceFullN
g.P()
g.P("const (")
if isPlugin {
- g.P(" Type = ", strconv.Quote(serviceName))
+ g.P(" Type = ", strconv.Quote(strings.TrimSuffix(serviceName, "Service")))
}
g.P(" GRPCServiceFullName = ", strconv.Quote(serviceFullName))
g.P(")")
diff --git a/go.mod b/go.mod
index 8f87269..17b6a45 100644
--- a/go.mod
+++ b/go.mod
@@ -2,34 +2,46 @@ module github.com/openkcm/plugin-sdk
go 1.25.4
+tool (
+ github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
+ github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
+ github.com/openkcm/plugin-sdk/cmd/protoc-gen-go-extension
+ google.golang.org/grpc/cmd/protoc-gen-go-grpc
+ google.golang.org/protobuf/cmd/protoc-gen-go
+)
+
require (
- buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1
- buf.build/go/protovalidate v1.1.3
+ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260709200747-435963d16310.1
+ buf.build/go/protovalidate v1.3.0
github.com/hashicorp/go-hclog v1.6.3
- github.com/hashicorp/go-plugin v1.7.0
+ github.com/hashicorp/go-plugin v1.8.0
github.com/stretchr/testify v1.11.1
github.com/zeebo/errs/v2 v2.0.5
- golang.org/x/sys v0.41.0
- google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217
- google.golang.org/grpc v1.79.1
- google.golang.org/protobuf v1.36.11
+ golang.org/x/sys v0.47.0
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa
+ google.golang.org/grpc v1.83.0
+ google.golang.org/protobuf v1.36.12
)
require (
- cel.dev/expr v0.25.1 // indirect
+ cel.dev/expr v0.25.2 // indirect
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/fatih/color v1.18.0 // indirect
+ github.com/fatih/color v1.19.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
- github.com/google/cel-go v0.27.0 // indirect
+ github.com/google/cel-go v0.30.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
- github.com/mattn/go-isatty v0.0.20 // indirect
- github.com/oklog/run v1.1.0 // indirect
+ github.com/mattn/go-isatty v0.0.21 // indirect
+ github.com/oklog/run v1.2.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 // indirect
- golang.org/x/net v0.48.0 // indirect
- golang.org/x/text v0.32.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
+ github.com/rogpeppe/go-internal v1.14.1 // indirect
+ go.yaml.in/yaml/v3 v3.0.4 // indirect
+ golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
+ golang.org/x/net v0.55.0 // indirect
+ golang.org/x/text v0.37.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect
+ google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
index 7291ec6..999914c 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,9 @@
-buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1 h1:PMmTMyvHScV9Mn8wc6ASge9uRcHy0jtqPd+fM35LmsQ=
-buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM=
-buf.build/go/protovalidate v1.1.3 h1:m2GVEgQWd7rk+vIoAZ+f0ygGjvQTuqPQapBBdcpWVPE=
-buf.build/go/protovalidate v1.1.3/go.mod h1:9XIuohWz+kj+9JVn3WQneHA5LZP50mjvneZMnbLkiIE=
-cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=
-cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260709200747-435963d16310.1 h1:6nlcxMOui23ZRVAfJM451duu79P1npA5JRdZqMilrrQ=
+buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.12-20260709200747-435963d16310.1/go.mod h1:TCt1lluMFnctISJXvkIQ4x3ABrPuUKCWKyjKdkJNBpw=
+buf.build/go/protovalidate v1.3.0 h1:8ITcnZGkAHx6TyhZvro+iET/AyqU8gEWQJK2WsT62ms=
+buf.build/go/protovalidate v1.3.0/go.mod h1:82s5g+rFRj1CZPiLv6OTA31jBu2fpq7mLXHwa9mZfEs=
+cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs=
+cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
github.com/brianvoe/gofakeit/v6 v6.28.0 h1:Xib46XXuQfmlLS2EXRuJpqcw8St6qSZz75OUo0tgAW4=
@@ -16,30 +16,32 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
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/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
-github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
-github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
+github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w=
+github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/cel-go v0.27.0 h1:e7ih85+4qVrBuqQWTW4FKSqZYokVuc3HnhH5keboFTo=
-github.com/google/cel-go v0.27.0/go.mod h1:tTJ11FWqnhw5KKpnWpvW9CJC3Y9GK4EIS0WXnBbebzw=
+github.com/google/cel-go v0.30.0 h1:ll54AkzKunWkBn9wSoiUXbFZXYZTkdJGNXTBXUoolGo=
+github.com/google/cel-go v0.30.0/go.mod h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c=
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
-github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA=
-github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8=
+github.com/hashicorp/go-plugin v1.8.0 h1:ie8S6RRY8RvB2usYZv+AAZ/wBvx2AU5p5QeP5j/FORs=
+github.com/hashicorp/go-plugin v1.8.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8=
github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94=
github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
@@ -48,14 +50,16 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
-github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
+github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs=
+github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
+github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E=
+github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk=
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/rodaine/protogofakeit v0.1.1 h1:ZKouljuRM3A+TArppfBqnH8tGZHOwM/pjvtXe9DaXH8=
github.com/rodaine/protogofakeit v0.1.1/go.mod h1:pXn/AstBYMaSfc1/RqH3N82pBuxtWgejz1AlYpY1mI0=
+github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
@@ -66,44 +70,45 @@ github.com/zeebo/errs/v2 v2.0.5 h1:edtyFoQq9OBBsNPcu0b0wHtRvA8haukAHrGyOfWQGNI=
github.com/zeebo/errs/v2 v2.0.5/go.mod h1:OKmvVZt4UqpyJrYFykDKm168ZquJ55pbbIVUICNmLN0=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
-go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=
-go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=
-go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
-go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=
-go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
-go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
-go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=
-go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=
-go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=
-go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
+go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
+go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
+go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
+go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
+go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
+go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
+go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
+go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
+go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
+go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 h1:SbTAbRFnd5kjQXbczszQ0hdk3ctwYf3qBNH9jIsGclE=
-golang.org/x/exp v0.0.0-20250813145105-42675adae3e6/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4=
-golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
-golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
+golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM=
+golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80=
+golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
+golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
-golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
-golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
-gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
-gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
-google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls=
-google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
-google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY=
-google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
-google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
-google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
+golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
+golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
+gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
+gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
+google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8=
+google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
+google.golang.org/grpc v1.83.0 h1:JeNZEKJFbQxArAMl+hiytHauacDNqJUllNfmIMmpqnQ=
+google.golang.org/grpc v1.83.0/go.mod h1:kDyl6SKsiHKt0uylY5gtn5cEjkrIOhQOGDgIc4JGwzQ=
+google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1 h1:/WILD1UcXj/ujCxgoL/DvRgt2CP3txG8+FwkUbb9110=
+google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1/go.mod h1:YNKnb2OAApgYn2oYY47Rn7alMr1zWjb2U8Q0aoGWiNc=
+google.golang.org/protobuf v1.36.12 h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc=
+google.golang.org/protobuf v1.36.12/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/internal-buf.gen.yaml b/internal-buf.gen.yaml
deleted file mode 100755
index 108fed9..0000000
--- a/internal-buf.gen.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env -S buf generate --template
----
-version: v2
-managed:
- enabled: true
- override:
- - file_option: go_package_prefix
- value: github.com/openkcm/plugin-sdk/internal/proto
-plugins:
- - local: [ "go", "run", "github.com/openkcm/plugin-sdk/cmd/protoc-gen-go-extension" ]
- out: internal/proto
- opt:
- - module=github.com/openkcm/plugin-sdk/internal/proto
- - submodule=github.com/openkcm/plugin-sdk/internal/proto/service
- - kind=service
- - remote: buf.build/protocolbuffers/go:v1.35.2
- out: internal/proto
- opt:
- - paths=source_relative
- - remote: buf.build/grpc/go:v1.3.0
- out: internal/proto
- opt:
- - paths=source_relative
- - remote: buf.build/bufbuild/validate-go:v1.1.0
- out: internal/proto
- opt:
- - paths=source_relative
- - remote: buf.build/grpc-ecosystem/gateway:v2.23.0
- out: internal/proto
- opt:
- - paths=source_relative
- - logtostderr=true
-inputs:
- - directory: internal/proto
diff --git a/internal/bootstrap/serve_test.go b/internal/bootstrap/serve_test.go
new file mode 100644
index 0000000..d5838b7
--- /dev/null
+++ b/internal/bootstrap/serve_test.go
@@ -0,0 +1,186 @@
+package bootstrap
+
+import (
+ "context"
+ "errors"
+ "testing"
+
+ "buf.build/go/protovalidate"
+ "github.com/hashicorp/go-hclog"
+ "github.com/stretchr/testify/assert"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+ "google.golang.org/protobuf/proto"
+
+ goplugin "github.com/hashicorp/go-plugin"
+
+ pluginerrors "github.com/openkcm/plugin-sdk/api/plugin-errors"
+ pluginoption "github.com/openkcm/plugin-sdk/api/plugin-option"
+ initv1 "github.com/openkcm/plugin-sdk/internal/proto/service/init/v1"
+)
+
+type mockValidator struct {
+ err error
+}
+
+func (v *mockValidator) Validate(_ proto.Message, _ ...protovalidate.ValidationOption) error {
+ return v.err
+}
+
+func cancelledTestConfig() *goplugin.ServeTestConfig {
+ // Create a context that is already cancelled to prevent the server from actually starting during tests.
+ ctx, cancel := context.WithCancel(context.Background())
+ cancel()
+ return &goplugin.ServeTestConfig{Context: ctx}
+}
+
+func TestServe_NoPluginServer(t *testing.T) {
+ err := Serve()
+ assert.ErrorIs(t, err, pluginerrors.ErrServerRequired)
+}
+
+func TestServe_WithValidationEnabled(t *testing.T) {
+ mock := &pluginMock{typ: "test"}
+
+ err := Serve(
+ pluginoption.WithPluginServer(mock),
+ pluginoption.EnableInputValidation(),
+ pluginoption.WithTestConfig(cancelledTestConfig()),
+ )
+ assert.NoError(t, err)
+
+ err = Serve(
+ pluginoption.WithPluginServer(mock),
+ pluginoption.EnableOutputValidation(),
+ pluginoption.WithTestConfig(cancelledTestConfig()),
+ )
+ assert.NoError(t, err)
+}
+
+func TestServe_WithValidationAndExistingServerOptions(t *testing.T) {
+ mock := &pluginMock{typ: "test"}
+ err := Serve(
+ pluginoption.WithPluginServer(mock),
+ pluginoption.SetServerOption(grpc.MaxRecvMsgSize(1024)),
+ pluginoption.EnableInputValidation(),
+ pluginoption.WithTestConfig(cancelledTestConfig()),
+ )
+ assert.NoError(t, err)
+}
+
+func TestHCServer_GRPCServer(t *testing.T) {
+ mock := &pluginMock{typ: "test"}
+ p := newHCPlugin(hclog.Default(), mock, nil)
+ srv := grpc.NewServer()
+ defer srv.Stop()
+
+ err := p.GRPCServer(nil, srv)
+ assert.NoError(t, err)
+}
+
+func TestCustomGRPCServer(t *testing.T) {
+ factory := customGRPCServer([]grpc.ServerOption{})
+ srv := factory([]grpc.ServerOption{})
+ assert.NotNil(t, srv)
+ srv.Stop()
+}
+
+func TestNewHCPlugin(t *testing.T) {
+ mock := &pluginMock{typ: "test"}
+ p := newHCPlugin(hclog.Default(), mock, nil)
+ assert.NotNil(t, p)
+ assert.Len(t, p.servers, 1)
+}
+
+func TestHCServer_GRPCClient(t *testing.T) {
+ p := &hcServer{}
+ result, err := p.GRPCClient(context.Background(), nil, nil)
+ assert.Nil(t, result)
+ assert.Error(t, err)
+}
+
+func TestHCDialer_DialHost_CachedConn(t *testing.T) {
+ mock := &mockClientConn{}
+ d := &hcDialer{conn: mock}
+
+ conn, err := d.DialHost(context.Background())
+ assert.NoError(t, err)
+ assert.Equal(t, mock, conn)
+}
+
+type mockClientConn struct {
+ grpc.ClientConnInterface
+}
+
+func TestValidationUnaryInterceptor_SkipsNonProtoRequest(t *testing.T) {
+ v := &mockValidator{err: errors.New("should not be called")}
+ interceptor := ValidationUnaryInterceptor(v, true, false)
+
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return "ok", nil
+ }
+
+ // Non-proto value: validation is skipped, handler is called.
+ resp, err := interceptor(context.Background(), "not-a-proto", nil, handler)
+ assert.NoError(t, err)
+ assert.Equal(t, "ok", resp)
+}
+
+func TestValidationUnaryInterceptor_HandlerError(t *testing.T) {
+ v := &mockValidator{}
+ interceptor := ValidationUnaryInterceptor(v, false, false)
+
+ handlerErr := errors.New("handler failed")
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return nil, handlerErr
+ }
+
+ _, err := interceptor(context.Background(), "req", nil, handler)
+ assert.ErrorIs(t, err, handlerErr)
+}
+
+func TestValidationUnaryInterceptor_NoValidation(t *testing.T) {
+ v := &mockValidator{}
+ interceptor := ValidationUnaryInterceptor(v, false, false)
+
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return "response", nil
+ }
+
+ resp, err := interceptor(context.Background(), "req", nil, handler)
+ assert.NoError(t, err)
+ assert.Equal(t, "response", resp)
+}
+
+func TestValidationUnaryInterceptor_RequestValidationFails(t *testing.T) {
+ v := &mockValidator{err: errors.New("bad request")}
+ interceptor := ValidationUnaryInterceptor(v, true, false)
+
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return "ok", nil
+ }
+
+ _, err := interceptor(context.Background(), &initv1.InitRequest{}, nil, handler)
+ assert.Error(t, err)
+
+ st, ok := status.FromError(err)
+ assert.True(t, ok, "expected gRPC status error")
+ assert.Equal(t, codes.InvalidArgument, st.Code())
+}
+
+func TestValidationUnaryInterceptor_ResponseValidationFails(t *testing.T) {
+ v := &mockValidator{err: errors.New("bad response")}
+ interceptor := ValidationUnaryInterceptor(v, false, true)
+
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return &initv1.InitRequest{}, nil
+ }
+
+ _, err := interceptor(context.Background(), "req", nil, handler)
+ assert.Error(t, err)
+
+ st, ok := status.FromError(err)
+ assert.True(t, ok, "expected gRPC status error")
+ assert.Equal(t, codes.Internal, st.Code())
+}
diff --git a/internal/proto/service/init/v1/init.pb.go b/internal/proto/service/init/v1/init.pb.go
index 9b50700..170c733 100644
--- a/internal/proto/service/init/v1/init.pb.go
+++ b/internal/proto/service/init/v1/init.pb.go
@@ -1,17 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.35.2
-// protoc (unknown)
+// protoc-gen-go v1.36.11
+// protoc v7.35.1
// source: service/init/v1/init.proto
package initv1
import (
- reflect "reflect"
- sync "sync"
-
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
)
const (
@@ -23,13 +23,12 @@ const (
// Init request parameters
type InitRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
+ state protoimpl.MessageState `protogen:"open.v1"`
// List of all the names of gRPC services implemented by the host.
// These names are the fully qualified gRPC service name.
HostServiceNames []string `protobuf:"bytes,1,rep,name=host_service_names,json=hostServiceNames,proto3" json:"host_service_names,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *InitRequest) Reset() {
@@ -71,13 +70,12 @@ func (x *InitRequest) GetHostServiceNames() []string {
// Init response parameters
type InitResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
+ state protoimpl.MessageState `protogen:"open.v1"`
// List of all the names of gRPC services implemented by the service. These
// names are the fully qualified gRPC service name.
PluginServiceNames []string `protobuf:"bytes,1,rep,name=plugin_service_names,json=pluginServiceNames,proto3" json:"plugin_service_names,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *InitResponse) Reset() {
@@ -119,9 +117,9 @@ func (x *InitResponse) GetPluginServiceNames() []string {
// Deinit request parameters
type DeinitRequest struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *DeinitRequest) Reset() {
@@ -156,9 +154,9 @@ func (*DeinitRequest) Descriptor() ([]byte, []int) {
// Deinit response parameters
type DeinitResponse struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *DeinitResponse) Reset() {
@@ -193,53 +191,27 @@ func (*DeinitResponse) Descriptor() ([]byte, []int) {
var File_service_init_v1_init_proto protoreflect.FileDescriptor
-var file_service_init_v1_init_proto_rawDesc = []byte{
- 0x0a, 0x1a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x76,
- 0x31, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x73, 0x65,
- 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x22, 0x3b, 0x0a,
- 0x0b, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12,
- 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x73, 0x74, 0x53, 0x65,
- 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x40, 0x0a, 0x0c, 0x49, 0x6e,
- 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x6c,
- 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e,
- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d,
- 0x44, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x10, 0x0a,
- 0x0e, 0x44, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32,
- 0x9b, 0x01, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x12, 0x43, 0x0a,
- 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
- 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x69, 0x6e,
- 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x44, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x12, 0x1e, 0x2e, 0x73,
- 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44,
- 0x65, 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73,
- 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44,
- 0x65, 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xc3, 0x01,
- 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x69, 0x6e,
- 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x09, 0x49, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f,
- 0x50, 0x01, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f,
- 0x70, 0x65, 0x6e, 0x6b, 0x63, 0x6d, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64,
- 0x6b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x76, 0x31,
- 0x3b, 0x69, 0x6e, 0x69, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x49, 0x58, 0xaa, 0x02, 0x0f,
- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca,
- 0x02, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x49, 0x6e, 0x69, 0x74, 0x5c, 0x56,
- 0x31, 0xe2, 0x02, 0x1b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x49, 0x6e, 0x69, 0x74,
- 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
- 0x02, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x3a, 0x49, 0x6e, 0x69, 0x74, 0x3a,
- 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
+const file_service_init_v1_init_proto_rawDesc = "" +
+ "\n" +
+ "\x1aservice/init/v1/init.proto\x12\x0fservice.init.v1\";\n" +
+ "\vInitRequest\x12,\n" +
+ "\x12host_service_names\x18\x01 \x03(\tR\x10hostServiceNames\"@\n" +
+ "\fInitResponse\x120\n" +
+ "\x14plugin_service_names\x18\x01 \x03(\tR\x12pluginServiceNames\"\x0f\n" +
+ "\rDeinitRequest\"\x10\n" +
+ "\x0eDeinitResponse2\x9b\x01\n" +
+ "\tBootstrap\x12C\n" +
+ "\x04Init\x12\x1c.service.init.v1.InitRequest\x1a\x1d.service.init.v1.InitResponse\x12I\n" +
+ "\x06Deinit\x12\x1e.service.init.v1.DeinitRequest\x1a\x1f.service.init.v1.DeinitResponseBEZCgithub.com/openkcm/plugin-sdk/internal/proto/service/init/v1;initv1b\x06proto3"
var (
file_service_init_v1_init_proto_rawDescOnce sync.Once
- file_service_init_v1_init_proto_rawDescData = file_service_init_v1_init_proto_rawDesc
+ file_service_init_v1_init_proto_rawDescData []byte
)
func file_service_init_v1_init_proto_rawDescGZIP() []byte {
file_service_init_v1_init_proto_rawDescOnce.Do(func() {
- file_service_init_v1_init_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_init_v1_init_proto_rawDescData)
+ file_service_init_v1_init_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_service_init_v1_init_proto_rawDesc), len(file_service_init_v1_init_proto_rawDesc)))
})
return file_service_init_v1_init_proto_rawDescData
}
@@ -272,7 +244,7 @@ func file_service_init_v1_init_proto_init() {
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_service_init_v1_init_proto_rawDesc,
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_service_init_v1_init_proto_rawDesc), len(file_service_init_v1_init_proto_rawDesc)),
NumEnums: 0,
NumMessages: 4,
NumExtensions: 0,
@@ -283,7 +255,6 @@ func file_service_init_v1_init_proto_init() {
MessageInfos: file_service_init_v1_init_proto_msgTypes,
}.Build()
File_service_init_v1_init_proto = out.File
- file_service_init_v1_init_proto_rawDesc = nil
file_service_init_v1_init_proto_goTypes = nil
file_service_init_v1_init_proto_depIdxs = nil
}
diff --git a/internal/proto/service/init/v1/init.pb.validate.go b/internal/proto/service/init/v1/init.pb.validate.go
deleted file mode 100644
index c748e43..0000000
--- a/internal/proto/service/init/v1/init.pb.validate.go
+++ /dev/null
@@ -1,434 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: service/init/v1/init.proto
-
-package initv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on InitRequest with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *InitRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on InitRequest with the rules defined in
-// the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in InitRequestMultiError, or
-// nil if none found.
-func (m *InitRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *InitRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return InitRequestMultiError(errors)
- }
-
- return nil
-}
-
-// InitRequestMultiError is an error wrapping multiple validation errors
-// returned by InitRequest.ValidateAll() if the designated constraints aren't met.
-type InitRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m InitRequestMultiError) Error() string {
- var msgs []string
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m InitRequestMultiError) AllErrors() []error { return m }
-
-// InitRequestValidationError is the validation error returned by
-// InitRequest.Validate if the designated constraints aren't met.
-type InitRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e InitRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e InitRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e InitRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e InitRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e InitRequestValidationError) ErrorName() string { return "InitRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e InitRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sInitRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = InitRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = InitRequestValidationError{}
-
-// Validate checks the field values on InitResponse with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *InitResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on InitResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in InitResponseMultiError, or
-// nil if none found.
-func (m *InitResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *InitResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return InitResponseMultiError(errors)
- }
-
- return nil
-}
-
-// InitResponseMultiError is an error wrapping multiple validation errors
-// returned by InitResponse.ValidateAll() if the designated constraints aren't met.
-type InitResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m InitResponseMultiError) Error() string {
- var msgs []string
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m InitResponseMultiError) AllErrors() []error { return m }
-
-// InitResponseValidationError is the validation error returned by
-// InitResponse.Validate if the designated constraints aren't met.
-type InitResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e InitResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e InitResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e InitResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e InitResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e InitResponseValidationError) ErrorName() string { return "InitResponseValidationError" }
-
-// Error satisfies the builtin error interface
-func (e InitResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sInitResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = InitResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = InitResponseValidationError{}
-
-// Validate checks the field values on DeinitRequest with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *DeinitRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DeinitRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in DeinitRequestMultiError, or
-// nil if none found.
-func (m *DeinitRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DeinitRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return DeinitRequestMultiError(errors)
- }
-
- return nil
-}
-
-// DeinitRequestMultiError is an error wrapping multiple validation errors
-// returned by DeinitRequest.ValidateAll() if the designated constraints
-// aren't met.
-type DeinitRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DeinitRequestMultiError) Error() string {
- var msgs []string
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DeinitRequestMultiError) AllErrors() []error { return m }
-
-// DeinitRequestValidationError is the validation error returned by
-// DeinitRequest.Validate if the designated constraints aren't met.
-type DeinitRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DeinitRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DeinitRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DeinitRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DeinitRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DeinitRequestValidationError) ErrorName() string { return "DeinitRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e DeinitRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDeinitRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DeinitRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DeinitRequestValidationError{}
-
-// Validate checks the field values on DeinitResponse with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *DeinitResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DeinitResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in DeinitResponseMultiError,
-// or nil if none found.
-func (m *DeinitResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DeinitResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return DeinitResponseMultiError(errors)
- }
-
- return nil
-}
-
-// DeinitResponseMultiError is an error wrapping multiple validation errors
-// returned by DeinitResponse.ValidateAll() if the designated constraints
-// aren't met.
-type DeinitResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DeinitResponseMultiError) Error() string {
- var msgs []string
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DeinitResponseMultiError) AllErrors() []error { return m }
-
-// DeinitResponseValidationError is the validation error returned by
-// DeinitResponse.Validate if the designated constraints aren't met.
-type DeinitResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DeinitResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DeinitResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DeinitResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DeinitResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DeinitResponseValidationError) ErrorName() string { return "DeinitResponseValidationError" }
-
-// Error satisfies the builtin error interface
-func (e DeinitResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDeinitResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DeinitResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DeinitResponseValidationError{}
diff --git a/internal/proto/service/init/v1/init.proto b/internal/proto/service/init/v1/init.proto
index e3de9ff..ab50128 100644
--- a/internal/proto/service/init/v1/init.proto
+++ b/internal/proto/service/init/v1/init.proto
@@ -2,6 +2,8 @@ syntax = "proto3";
package service.init.v1;
+option go_package = "github.com/openkcm/plugin-sdk/internal/proto/service/init/v1;initv1";
+
// Init is an internal service that the plugin framework uses to initialize
// a plugin after it has been loaded. Initialization takes place when the
// plugin client connects, since the client is responsible for hosting the
diff --git a/internal/proto/service/init/v1/init_ext_service.pb.go b/internal/proto/service/init/v1/init_ext_service.pb.go
index 2eb7c75..11b10a7 100644
--- a/internal/proto/service/init/v1/init_ext_service.pb.go
+++ b/internal/proto/service/init/v1/init_ext_service.pb.go
@@ -3,9 +3,8 @@
package initv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
diff --git a/internal/proto/service/init/v1/init_grpc.pb.go b/internal/proto/service/init/v1/init_grpc.pb.go
index f4f4276..8b3f379 100644
--- a/internal/proto/service/init/v1/init_grpc.pb.go
+++ b/internal/proto/service/init/v1/init_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.3.0
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: service/init/v1/init.proto
package initv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
@@ -16,8 +15,8 @@ import (
// 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
+// Requires gRPC-Go v1.64.0 or later.
+const _ = grpc.SupportPackageIsVersion9
const (
Bootstrap_Init_FullMethodName = "/service.init.v1.Bootstrap/Init"
@@ -27,6 +26,13 @@ const (
// BootstrapClient is the client API for Bootstrap 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.
+//
+// Init is an internal service that the plugin framework uses to initialize
+// a plugin after it has been loaded. Initialization takes place when the
+// plugin client connects, since the client is responsible for hosting the
+// broker that is used to provide host services. If we initialize before that,
+// there would be no broker available to connect to host services with.
+// The service is also used for graceful cleanup when the plugin is unloaded.
type BootstrapClient interface {
Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (*InitResponse, error)
Deinit(ctx context.Context, in *DeinitRequest, opts ...grpc.CallOption) (*DeinitResponse, error)
@@ -41,8 +47,9 @@ func NewBootstrapClient(cc grpc.ClientConnInterface) BootstrapClient {
}
func (c *bootstrapClient) Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (*InitResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(InitResponse)
- err := c.cc.Invoke(ctx, Bootstrap_Init_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bootstrap_Init_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -50,8 +57,9 @@ func (c *bootstrapClient) Init(ctx context.Context, in *InitRequest, opts ...grp
}
func (c *bootstrapClient) Deinit(ctx context.Context, in *DeinitRequest, opts ...grpc.CallOption) (*DeinitResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DeinitResponse)
- err := c.cc.Invoke(ctx, Bootstrap_Deinit_FullMethodName, in, out, opts...)
+ err := c.cc.Invoke(ctx, Bootstrap_Deinit_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@@ -60,24 +68,35 @@ func (c *bootstrapClient) Deinit(ctx context.Context, in *DeinitRequest, opts ..
// BootstrapServer is the server API for Bootstrap service.
// All implementations must embed UnimplementedBootstrapServer
-// for forward compatibility
+// for forward compatibility.
+//
+// Init is an internal service that the plugin framework uses to initialize
+// a plugin after it has been loaded. Initialization takes place when the
+// plugin client connects, since the client is responsible for hosting the
+// broker that is used to provide host services. If we initialize before that,
+// there would be no broker available to connect to host services with.
+// The service is also used for graceful cleanup when the plugin is unloaded.
type BootstrapServer interface {
Init(context.Context, *InitRequest) (*InitResponse, error)
Deinit(context.Context, *DeinitRequest) (*DeinitResponse, error)
mustEmbedUnimplementedBootstrapServer()
}
-// UnimplementedBootstrapServer must be embedded to have forward compatible implementations.
-type UnimplementedBootstrapServer struct {
-}
+// UnimplementedBootstrapServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedBootstrapServer struct{}
func (UnimplementedBootstrapServer) Init(context.Context, *InitRequest) (*InitResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Init not implemented")
+ return nil, status.Error(codes.Unimplemented, "method Init not implemented")
}
func (UnimplementedBootstrapServer) Deinit(context.Context, *DeinitRequest) (*DeinitResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Deinit not implemented")
+ return nil, status.Error(codes.Unimplemented, "method Deinit not implemented")
}
func (UnimplementedBootstrapServer) mustEmbedUnimplementedBootstrapServer() {}
+func (UnimplementedBootstrapServer) testEmbeddedByValue() {}
// UnsafeBootstrapServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to BootstrapServer will
@@ -87,6 +106,13 @@ type UnsafeBootstrapServer interface {
}
func RegisterBootstrapServer(s grpc.ServiceRegistrar, srv BootstrapServer) {
+ // If the following call panics, it indicates UnimplementedBootstrapServer was
+ // embedded by pointer and is nil. This will cause panics if an
+ // unimplemented method is ever invoked, so we test this at initialization
+ // time to prevent it from happening at runtime later due to I/O.
+ if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+ t.testEmbeddedByValue()
+ }
s.RegisterService(&Bootstrap_ServiceDesc, srv)
}
diff --git a/pkg/catalog/builtin.go b/pkg/catalog/builtin.go
index bd1014b..f359b1c 100644
--- a/pkg/catalog/builtin.go
+++ b/pkg/catalog/builtin.go
@@ -139,7 +139,7 @@ func (d *builtinDialer) DialHost(context.Context) (grpc.ClientConnInterface, err
if d.conn != nil {
return d.conn, nil
}
- server := newHostServer(d.log, d.pluginName)
+ server := newHostServer(d.log, d.pluginName, d.hostServices)
conn, err := startPipeServer(server, d.log)
if err != nil {
return nil, err
@@ -160,30 +160,24 @@ type pipeConn struct {
io.Closer
}
-func startPipeServer(server *grpc.Server, log *slog.Logger) (*pipeConn, error) {
+func startPipeServer(server *grpc.Server, log *slog.Logger) (_ *pipeConn, err error) {
+ var closers closerGroup
+
pipeNet := newPipeNet()
+ closers = append(closers, pipeNet)
var wg sync.WaitGroup
-
- var closers closerGroup
closers = append(closers, closerFunc(wg.Wait), closerFunc(func() {
if !gracefulStopWithTimeout(server, time.Minute) {
log.Warn("Forced timed-out plugin server to stop")
}
- }), closerFunc(func() {
- err := pipeNet.Close()
- if err != nil {
- return
- }
}))
- wg.Add(1)
- go func() {
- defer wg.Done()
+ wg.Go(func() {
if err := server.Serve(pipeNet); err != nil && !errors.Is(err, grpc.ErrServerStopped) {
log.Error("Pipe server unexpectedly failed to serve", "error", err)
}
- }()
+ })
// Dial the server
conn, err := grpc.NewClient(
diff --git a/pkg/catalog/host.go b/pkg/catalog/host.go
index dcc7e04..44ae4ec 100644
--- a/pkg/catalog/host.go
+++ b/pkg/catalog/host.go
@@ -6,12 +6,13 @@ import (
"log/slog"
"runtime/debug"
+ "github.com/openkcm/plugin-sdk/api"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
-func newHostServer(log *slog.Logger, pluginName string) *grpc.Server {
+func newHostServer(log *slog.Logger, pluginName string, hostServices []api.ServiceServer) *grpc.Server {
s := grpc.NewServer(
grpc.ChainStreamInterceptor(
streamPanicInterceptor(log),
@@ -22,6 +23,9 @@ func newHostServer(log *slog.Logger, pluginName string) *grpc.Server {
unaryPluginInterceptor(pluginName),
),
)
+ for _, hostService := range hostServices {
+ hostService.RegisterServer(s)
+ }
return s
}
diff --git a/pkg/catalog/plugin.go b/pkg/catalog/plugin.go
index 4343dca..e3dbc47 100644
--- a/pkg/catalog/plugin.go
+++ b/pkg/catalog/plugin.go
@@ -24,40 +24,21 @@ import (
type PluginConfigs []PluginConfig
type PluginConfig struct {
- // Name of the plugin
- Name string
-
- // Type is the plugin type
- Type string
-
- // Path is the path on disk to the plugin.
- Path string
-
- // Args are the command line arguments to supply to the plugin
- Args []string
-
- // Env is the environment variables to supply to the plugin
- Env map[string]string
-
- // Checksum is the hex-encoded SHA256 hash of the plugin binary.
- Checksum string
-
- Version uint32
-
- DataSource DataSource
-
- YamlConfiguration string
-
- LogLevel string
-
- Disabled bool
-
- Logger *slog.Logger
-
+ Name string `yaml:"name" json:"name"`
+ Type string `yaml:"type" json:"type"`
+ Path string `yaml:"path" json:"path"`
+ Args []string `yaml:"args" json:"args"`
+ Env map[string]string `yaml:"env" json:"env"`
+ Checksum string `yaml:"checksum" json:"checksum"`
+ Version uint32 `yaml:"version" json:"version"`
+ YamlConfiguration string `yaml:"yamlConfiguration" json:"yamlConfiguration"`
+ LogLevel string `yaml:"logLevel" json:"logLevel"`
+ Disabled bool `yaml:"disabled" json:"disabled"`
+ Tags []string `yaml:"tags" json:"tags"`
+
+ Logger *slog.Logger
+ DataSource DataSource
HostServices []api.ServiceServer
-
- // Tags are the metadata associated with a plugin these can be used to filter plugins later e.g. ['FeatureA'] on client side.
- Tags []string
}
func (c *PluginConfig) IsExternal() bool {
diff --git a/pkg/plugin/keystore/errors/errors.go b/pkg/plugin/keystore/errors/errors.go
index 9e65afc..875a4f5 100644
--- a/pkg/plugin/keystore/errors/errors.go
+++ b/pkg/plugin/keystore/errors/errors.go
@@ -36,6 +36,8 @@ var (
// StatusKeyNotFound indicates that the specified key was not found in the keystore provider.
StatusKeyNotFound = status.New(
codes.NotFound, "key not found in the keystore provider")
+
+ StatusKeyGenericErr = status.New(codes.Unknown, "failed to get key")
)
// NewGrpcErrorWithDetails creates a gRPC error with the given status and metadata mapping.
diff --git a/proto/plugin/certificate_issuer/v1/certificate_issuer.pb.go b/proto/plugin/certificate_issuer/v1/certificate_issuer.pb.go
index 56fd24d..745b2cc 100644
--- a/proto/plugin/certificate_issuer/v1/certificate_issuer.pb.go
+++ b/proto/plugin/certificate_issuer/v1/certificate_issuer.pb.go
@@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/certificate_issuer/v1/certificate_issuer.proto
package certificate_issuerv1
import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
@@ -308,8 +307,7 @@ const file_plugin_certificate_issuer_v1_certificate_issuer_proto_rawDesc = "" +
"\x14VALIDITY_TYPE_MONTHS\x10\x02\x12\x17\n" +
"\x13VALIDITY_TYPE_YEARS\x10\x032\x97\x01\n" +
"\x18CertificateIssuerService\x12{\n" +
- "\x0eGetCertificate\x123.plugin.certificate_issuer.v1.GetCertificateRequest\x1a4.plugin.certificate_issuer.v1.GetCertificateResponseB\x9f\x02\n" +
- " com.plugin.certificate_issuer.v1B\x16CertificateIssuerProtoP\x01ZUgithub.com/openkcm/plugin-sdk/proto/plugin/certificate_issuer/v1;certificate_issuerv1\xa2\x02\x03PCX\xaa\x02\x1bPlugin.CertificateIssuer.V1\xca\x02\x1bPlugin\\CertificateIssuer\\V1\xe2\x02'Plugin\\CertificateIssuer\\V1\\GPBMetadata\xea\x02\x1dPlugin::CertificateIssuer::V1b\x06proto3"
+ "\x0eGetCertificate\x123.plugin.certificate_issuer.v1.GetCertificateRequest\x1a4.plugin.certificate_issuer.v1.GetCertificateResponseBWZUgithub.com/openkcm/plugin-sdk/proto/plugin/certificate_issuer/v1;certificate_issuerv1b\x06proto3"
var (
file_plugin_certificate_issuer_v1_certificate_issuer_proto_rawDescOnce sync.Once
diff --git a/proto/plugin/certificate_issuer/v1/certificate_issuer.pb.validate.go b/proto/plugin/certificate_issuer/v1/certificate_issuer.pb.validate.go
deleted file mode 100644
index 12c10a0..0000000
--- a/proto/plugin/certificate_issuer/v1/certificate_issuer.pb.validate.go
+++ /dev/null
@@ -1,509 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/certificate_issuer/v1/certificate_issuer.proto
-
-package certificate_issuerv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on GetCertificateRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetCertificateRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetCertificateRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetCertificateRequestMultiError, or nil if none found.
-func (m *GetCertificateRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetCertificateRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for CommonName
-
- if all {
- switch v := interface{}(m.GetValidity()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetCertificateRequestValidationError{
- field: "Validity",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetCertificateRequestValidationError{
- field: "Validity",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetValidity()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetCertificateRequestValidationError{
- field: "Validity",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if all {
- switch v := interface{}(m.GetPrivateKey()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetCertificateRequestValidationError{
- field: "PrivateKey",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetCertificateRequestValidationError{
- field: "PrivateKey",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetPrivateKey()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetCertificateRequestValidationError{
- field: "PrivateKey",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetCertificateRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetCertificateRequestMultiError is an error wrapping multiple validation
-// errors returned by GetCertificateRequest.ValidateAll() if the designated
-// constraints aren't met.
-type GetCertificateRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetCertificateRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetCertificateRequestMultiError) AllErrors() []error { return m }
-
-// GetCertificateRequestValidationError is the validation error returned by
-// GetCertificateRequest.Validate if the designated constraints aren't met.
-type GetCertificateRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetCertificateRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetCertificateRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetCertificateRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetCertificateRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetCertificateRequestValidationError) ErrorName() string {
- return "GetCertificateRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetCertificateRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetCertificateRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetCertificateRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetCertificateRequestValidationError{}
-
-// Validate checks the field values on GetCertificateValidity with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetCertificateValidity) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetCertificateValidity with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetCertificateValidityMultiError, or nil if none found.
-func (m *GetCertificateValidity) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetCertificateValidity) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Value
-
- // no validation rules for Type
-
- if len(errors) > 0 {
- return GetCertificateValidityMultiError(errors)
- }
-
- return nil
-}
-
-// GetCertificateValidityMultiError is an error wrapping multiple validation
-// errors returned by GetCertificateValidity.ValidateAll() if the designated
-// constraints aren't met.
-type GetCertificateValidityMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetCertificateValidityMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetCertificateValidityMultiError) AllErrors() []error { return m }
-
-// GetCertificateValidityValidationError is the validation error returned by
-// GetCertificateValidity.Validate if the designated constraints aren't met.
-type GetCertificateValidityValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetCertificateValidityValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetCertificateValidityValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetCertificateValidityValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetCertificateValidityValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetCertificateValidityValidationError) ErrorName() string {
- return "GetCertificateValidityValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetCertificateValidityValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetCertificateValidity.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetCertificateValidityValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetCertificateValidityValidationError{}
-
-// Validate checks the field values on PrivateKey with the rules defined in the
-// proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *PrivateKey) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on PrivateKey with the rules defined in
-// the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in PrivateKeyMultiError, or
-// nil if none found.
-func (m *PrivateKey) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *PrivateKey) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Data
-
- if len(errors) > 0 {
- return PrivateKeyMultiError(errors)
- }
-
- return nil
-}
-
-// PrivateKeyMultiError is an error wrapping multiple validation errors
-// returned by PrivateKey.ValidateAll() if the designated constraints aren't met.
-type PrivateKeyMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m PrivateKeyMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m PrivateKeyMultiError) AllErrors() []error { return m }
-
-// PrivateKeyValidationError is the validation error returned by
-// PrivateKey.Validate if the designated constraints aren't met.
-type PrivateKeyValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e PrivateKeyValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e PrivateKeyValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e PrivateKeyValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e PrivateKeyValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e PrivateKeyValidationError) ErrorName() string { return "PrivateKeyValidationError" }
-
-// Error satisfies the builtin error interface
-func (e PrivateKeyValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sPrivateKey.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = PrivateKeyValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = PrivateKeyValidationError{}
-
-// Validate checks the field values on GetCertificateResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetCertificateResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetCertificateResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetCertificateResponseMultiError, or nil if none found.
-func (m *GetCertificateResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetCertificateResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for CertificateChain
-
- if len(errors) > 0 {
- return GetCertificateResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetCertificateResponseMultiError is an error wrapping multiple validation
-// errors returned by GetCertificateResponse.ValidateAll() if the designated
-// constraints aren't met.
-type GetCertificateResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetCertificateResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetCertificateResponseMultiError) AllErrors() []error { return m }
-
-// GetCertificateResponseValidationError is the validation error returned by
-// GetCertificateResponse.Validate if the designated constraints aren't met.
-type GetCertificateResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetCertificateResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetCertificateResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetCertificateResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetCertificateResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetCertificateResponseValidationError) ErrorName() string {
- return "GetCertificateResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetCertificateResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetCertificateResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetCertificateResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetCertificateResponseValidationError{}
diff --git a/proto/plugin/certificate_issuer/v1/certificate_issuer.proto b/proto/plugin/certificate_issuer/v1/certificate_issuer.proto
index 00448ee..563fde9 100644
--- a/proto/plugin/certificate_issuer/v1/certificate_issuer.proto
+++ b/proto/plugin/certificate_issuer/v1/certificate_issuer.proto
@@ -1,6 +1,8 @@
syntax = "proto3";
package plugin.certificate_issuer.v1;
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/certificate_issuer/v1;certificate_issuerv1";
+
service CertificateIssuerService {
rpc GetCertificate(GetCertificateRequest) returns (GetCertificateResponse);
}
diff --git a/proto/plugin/certificate_issuer/v1/certificate_issuer_ext_plugin.pb.go b/proto/plugin/certificate_issuer/v1/certificate_issuer_ext_plugin.pb.go
index dfe9e3a..f91b30e 100644
--- a/proto/plugin/certificate_issuer/v1/certificate_issuer_ext_plugin.pb.go
+++ b/proto/plugin/certificate_issuer/v1/certificate_issuer_ext_plugin.pb.go
@@ -3,13 +3,12 @@
package certificate_issuerv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
- Type = "CertificateIssuerService"
+ Type = "CertificateIssuer"
GRPCServiceFullName = "plugin.certificate_issuer.v1.CertificateIssuerService"
)
diff --git a/proto/plugin/certificate_issuer/v1/certificate_issuer_grpc.pb.go b/proto/plugin/certificate_issuer/v1/certificate_issuer_grpc.pb.go
index 21e8e15..636d3e9 100644
--- a/proto/plugin/certificate_issuer/v1/certificate_issuer_grpc.pb.go
+++ b/proto/plugin/certificate_issuer/v1/certificate_issuer_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: plugin/certificate_issuer/v1/certificate_issuer.proto
package certificate_issuerv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
diff --git a/proto/plugin/cipher_wrapper/v1/cipher_wrapper.pb.go b/proto/plugin/cipher_wrapper/v1/cipher_wrapper.pb.go
new file mode 100644
index 0000000..864f0b0
--- /dev/null
+++ b/proto/plugin/cipher_wrapper/v1/cipher_wrapper.pb.go
@@ -0,0 +1,515 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc (unknown)
+// source: plugin/cipher_wrapper/v1/cipher_wrapper.proto
+
+package cipher_wrapperv1
+
+import (
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+
+ _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+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)
+)
+
+// KeyReference identifies a specific key within an external KMS provider and
+// carries all routing config the plugin needs to reach it — address, engine path,
+// namespace, region, project, etc. — so no out-of-band registration is required.
+type KeyReference struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Primary external identifier: ARN, Vault transit path, Azure key URI,
+ // GCP resource name, PKCS#11 label.
+ KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"`
+ // Logical Krypton name — for providers that distinguish path from logical name
+ // and for audit log correlation.
+ KeyName *string `protobuf:"bytes,2,opt,name=key_name,json=keyName,proto3,oneof" json:"key_name,omitempty"`
+ // Specific version (for versioned providers: AWS KMS, Azure Key Vault).
+ Version *string `protobuf:"bytes,3,opt,name=version,proto3,oneof" json:"version,omitempty"`
+ // Provider-specific routing: address, engine_path, namespace, region, project_id …
+ // Always flat key-value — KMS addressing never needs nested structure.
+ Properties map[string]string `protobuf:"bytes,4,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *KeyReference) Reset() {
+ *x = KeyReference{}
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *KeyReference) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyReference) ProtoMessage() {}
+
+func (x *KeyReference) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyReference.ProtoReflect.Descriptor instead.
+func (*KeyReference) Descriptor() ([]byte, []int) {
+ return file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *KeyReference) GetKeyId() string {
+ if x != nil {
+ return x.KeyId
+ }
+ return ""
+}
+
+func (x *KeyReference) GetKeyName() string {
+ if x != nil && x.KeyName != nil {
+ return *x.KeyName
+ }
+ return ""
+}
+
+func (x *KeyReference) GetVersion() string {
+ if x != nil && x.Version != nil {
+ return *x.Version
+ }
+ return ""
+}
+
+func (x *KeyReference) GetProperties() map[string]string {
+ if x != nil {
+ return x.Properties
+ }
+ return nil
+}
+
+// EncryptedData pairs the ciphertext with the IV used during encryption.
+// Kept together so storage and retrieval are always atomic — a ciphertext
+// without its IV is unrecoverable.
+type EncryptedData struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Ciphertext []byte `protobuf:"bytes,1,opt,name=ciphertext,proto3" json:"ciphertext,omitempty"`
+ // OPTIONAL: Initialization Vector (IV) or Nonce.
+ // Must be provided if it was returned in the WrapResponse.
+ Iv []byte `protobuf:"bytes,2,opt,name=iv,proto3,oneof" json:"iv,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EncryptedData) Reset() {
+ *x = EncryptedData{}
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EncryptedData) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EncryptedData) ProtoMessage() {}
+
+func (x *EncryptedData) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EncryptedData.ProtoReflect.Descriptor instead.
+func (*EncryptedData) Descriptor() ([]byte, []int) {
+ return file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *EncryptedData) GetCiphertext() []byte {
+ if x != nil {
+ return x.Ciphertext
+ }
+ return nil
+}
+
+func (x *EncryptedData) GetIv() []byte {
+ if x != nil {
+ return x.Iv
+ }
+ return nil
+}
+
+type WrapRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // OPTIONAL/REQUIRED: The structured definition of the key to use.
+ Key *KeyReference `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+ // REQUIRED: The raw cryptographic material to be wrapped.
+ Plaintext []byte `protobuf:"bytes,2,opt,name=plaintext,proto3" json:"plaintext,omitempty"`
+ // OPTIONAL: Standard Additional Authenticated Data (AAD) byte buffer.
+ // Kept in proto because AAD often changes per request (e.g., binding to a specific Tenant ID).
+ Aad []byte `protobuf:"bytes,3,opt,name=aad,proto3,oneof" json:"aad,omitempty"`
+ // IV hint: only set when the CMK engine is dictating the IV to the HSM
+ // (deterministic-IV hardware modes). Left unset for all software KMS providers.
+ IvHint []byte `protobuf:"bytes,4,opt,name=iv_hint,json=ivHint,proto3,oneof" json:"iv_hint,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *WrapRequest) Reset() {
+ *x = WrapRequest{}
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *WrapRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WrapRequest) ProtoMessage() {}
+
+func (x *WrapRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WrapRequest.ProtoReflect.Descriptor instead.
+func (*WrapRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *WrapRequest) GetKey() *KeyReference {
+ if x != nil {
+ return x.Key
+ }
+ return nil
+}
+
+func (x *WrapRequest) GetPlaintext() []byte {
+ if x != nil {
+ return x.Plaintext
+ }
+ return nil
+}
+
+func (x *WrapRequest) GetAad() []byte {
+ if x != nil {
+ return x.Aad
+ }
+ return nil
+}
+
+func (x *WrapRequest) GetIvHint() []byte {
+ if x != nil {
+ return x.IvHint
+ }
+ return nil
+}
+
+// WrapResponse returns the provider-specific ciphertext and metadata.
+type WrapResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // REQUIRED: The opaque, vendor-specific ciphertext.
+ EncryptedData *EncryptedData `protobuf:"bytes,1,opt,name=encrypted_data,json=encryptedData,proto3" json:"encrypted_data,omitempty"`
+ // OPTIONAL: The exact key version ID used during the operation.
+ // Some providers (like HSMs) do not have a concept of version IDs.
+ KeyVersionId *string `protobuf:"bytes,2,opt,name=key_version_id,json=keyVersionId,proto3,oneof" json:"key_version_id,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *WrapResponse) Reset() {
+ *x = WrapResponse{}
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *WrapResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WrapResponse) ProtoMessage() {}
+
+func (x *WrapResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WrapResponse.ProtoReflect.Descriptor instead.
+func (*WrapResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *WrapResponse) GetEncryptedData() *EncryptedData {
+ if x != nil {
+ return x.EncryptedData
+ }
+ return nil
+}
+
+func (x *WrapResponse) GetKeyVersionId() string {
+ if x != nil && x.KeyVersionId != nil {
+ return *x.KeyVersionId
+ }
+ return ""
+}
+
+type UnwrapRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // REQUIRED: The structured definition of the key to use.
+ Key *KeyReference `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+ // REQUIRED: The opaque ciphertext retrieved from the CMK persistent storage.
+ EncryptedData *EncryptedData `protobuf:"bytes,2,opt,name=encrypted_data,json=encryptedData,proto3" json:"encrypted_data,omitempty"`
+ // OPTIONAL: Standard Additional Authenticated Data (AAD) byte buffer.
+ Aad []byte `protobuf:"bytes,3,opt,name=aad,proto3,oneof" json:"aad,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *UnwrapRequest) Reset() {
+ *x = UnwrapRequest{}
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *UnwrapRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UnwrapRequest) ProtoMessage() {}
+
+func (x *UnwrapRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use UnwrapRequest.ProtoReflect.Descriptor instead.
+func (*UnwrapRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *UnwrapRequest) GetKey() *KeyReference {
+ if x != nil {
+ return x.Key
+ }
+ return nil
+}
+
+func (x *UnwrapRequest) GetEncryptedData() *EncryptedData {
+ if x != nil {
+ return x.EncryptedData
+ }
+ return nil
+}
+
+func (x *UnwrapRequest) GetAad() []byte {
+ if x != nil {
+ return x.Aad
+ }
+ return nil
+}
+
+// UnwrapResponse returns the recovered raw cryptographic material.
+type UnwrapResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // REQUIRED: The recovered raw cryptographic material.
+ Plaintext []byte `protobuf:"bytes,1,opt,name=plaintext,proto3" json:"plaintext,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *UnwrapResponse) Reset() {
+ *x = UnwrapResponse{}
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *UnwrapResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UnwrapResponse) ProtoMessage() {}
+
+func (x *UnwrapResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use UnwrapResponse.ProtoReflect.Descriptor instead.
+func (*UnwrapResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *UnwrapResponse) GetPlaintext() []byte {
+ if x != nil {
+ return x.Plaintext
+ }
+ return nil
+}
+
+var File_plugin_cipher_wrapper_v1_cipher_wrapper_proto protoreflect.FileDescriptor
+
+const file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDesc = "" +
+ "\n" +
+ "-plugin/cipher_wrapper/v1/cipher_wrapper.proto\x12 krypton.plugin.cipher_wrapper.v1\x1a\x1bbuf/validate/validate.proto\"\xa5\x02\n" +
+ "\fKeyReference\x12\x1e\n" +
+ "\x06key_id\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x05keyId\x12\x1e\n" +
+ "\bkey_name\x18\x02 \x01(\tH\x00R\akeyName\x88\x01\x01\x12\x1d\n" +
+ "\aversion\x18\x03 \x01(\tH\x01R\aversion\x88\x01\x01\x12^\n" +
+ "\n" +
+ "properties\x18\x04 \x03(\v2>.krypton.plugin.cipher_wrapper.v1.KeyReference.PropertiesEntryR\n" +
+ "properties\x1a=\n" +
+ "\x0fPropertiesEntry\x12\x10\n" +
+ "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
+ "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B\v\n" +
+ "\t_key_nameB\n" +
+ "\n" +
+ "\b_version\"T\n" +
+ "\rEncryptedData\x12'\n" +
+ "\n" +
+ "ciphertext\x18\x01 \x01(\fB\a\xbaH\x04z\x02\x10\x01R\n" +
+ "ciphertext\x12\x13\n" +
+ "\x02iv\x18\x02 \x01(\fH\x00R\x02iv\x88\x01\x01B\x05\n" +
+ "\x03_iv\"\xca\x01\n" +
+ "\vWrapRequest\x12H\n" +
+ "\x03key\x18\x01 \x01(\v2..krypton.plugin.cipher_wrapper.v1.KeyReferenceB\x06\xbaH\x03\xc8\x01\x01R\x03key\x12(\n" +
+ "\tplaintext\x18\x02 \x01(\fB\n" +
+ "\xbaH\a\xc8\x01\x01z\x02\x10\x01R\tplaintext\x12\x15\n" +
+ "\x03aad\x18\x03 \x01(\fH\x00R\x03aad\x88\x01\x01\x12\x1c\n" +
+ "\aiv_hint\x18\x04 \x01(\fH\x01R\x06ivHint\x88\x01\x01B\x06\n" +
+ "\x04_aadB\n" +
+ "\n" +
+ "\b_iv_hint\"\xa4\x01\n" +
+ "\fWrapResponse\x12V\n" +
+ "\x0eencrypted_data\x18\x01 \x01(\v2/.krypton.plugin.cipher_wrapper.v1.EncryptedDataR\rencryptedData\x12)\n" +
+ "\x0ekey_version_id\x18\x02 \x01(\tH\x00R\fkeyVersionId\x88\x01\x01B\x11\n" +
+ "\x0f_key_version_id\"\xd8\x01\n" +
+ "\rUnwrapRequest\x12H\n" +
+ "\x03key\x18\x01 \x01(\v2..krypton.plugin.cipher_wrapper.v1.KeyReferenceB\x06\xbaH\x03\xc8\x01\x01R\x03key\x12^\n" +
+ "\x0eencrypted_data\x18\x02 \x01(\v2/.krypton.plugin.cipher_wrapper.v1.EncryptedDataB\x06\xbaH\x03\xc8\x01\x01R\rencryptedData\x12\x15\n" +
+ "\x03aad\x18\x03 \x01(\fH\x00R\x03aad\x88\x01\x01B\x06\n" +
+ "\x04_aad\".\n" +
+ "\x0eUnwrapResponse\x12\x1c\n" +
+ "\tplaintext\x18\x01 \x01(\fR\tplaintext2\xe3\x01\n" +
+ "\rCipherWrapper\x12e\n" +
+ "\x04Wrap\x12-.krypton.plugin.cipher_wrapper.v1.WrapRequest\x1a..krypton.plugin.cipher_wrapper.v1.WrapResponse\x12k\n" +
+ "\x06Unwrap\x12/.krypton.plugin.cipher_wrapper.v1.UnwrapRequest\x1a0.krypton.plugin.cipher_wrapper.v1.UnwrapResponseB\xa8\x02\n" +
+ "$com.krypton.plugin.cipher_wrapper.v1B\x12CipherWrapperProtoP\x01ZMgithub.com/openkcm/plugin-sdk/proto/plugin/cipher_wrapper/v1;cipher_wrapperv1\xa2\x02\x03KPC\xaa\x02\x1fKrypton.Plugin.CipherWrapper.V1\xca\x02\x1fKrypton\\Plugin\\CipherWrapper\\V1\xe2\x02+Krypton\\Plugin\\CipherWrapper\\V1\\GPBMetadata\xea\x02\"Krypton::Plugin::CipherWrapper::V1b\x06proto3"
+
+var (
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescOnce sync.Once
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescData []byte
+)
+
+func file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescGZIP() []byte {
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescOnce.Do(func() {
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDesc), len(file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDesc)))
+ })
+ return file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDescData
+}
+
+var file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_goTypes = []any{
+ (*KeyReference)(nil), // 0: krypton.plugin.cipher_wrapper.v1.KeyReference
+ (*EncryptedData)(nil), // 1: krypton.plugin.cipher_wrapper.v1.EncryptedData
+ (*WrapRequest)(nil), // 2: krypton.plugin.cipher_wrapper.v1.WrapRequest
+ (*WrapResponse)(nil), // 3: krypton.plugin.cipher_wrapper.v1.WrapResponse
+ (*UnwrapRequest)(nil), // 4: krypton.plugin.cipher_wrapper.v1.UnwrapRequest
+ (*UnwrapResponse)(nil), // 5: krypton.plugin.cipher_wrapper.v1.UnwrapResponse
+ nil, // 6: krypton.plugin.cipher_wrapper.v1.KeyReference.PropertiesEntry
+}
+var file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_depIdxs = []int32{
+ 6, // 0: krypton.plugin.cipher_wrapper.v1.KeyReference.properties:type_name -> krypton.plugin.cipher_wrapper.v1.KeyReference.PropertiesEntry
+ 0, // 1: krypton.plugin.cipher_wrapper.v1.WrapRequest.key:type_name -> krypton.plugin.cipher_wrapper.v1.KeyReference
+ 1, // 2: krypton.plugin.cipher_wrapper.v1.WrapResponse.encrypted_data:type_name -> krypton.plugin.cipher_wrapper.v1.EncryptedData
+ 0, // 3: krypton.plugin.cipher_wrapper.v1.UnwrapRequest.key:type_name -> krypton.plugin.cipher_wrapper.v1.KeyReference
+ 1, // 4: krypton.plugin.cipher_wrapper.v1.UnwrapRequest.encrypted_data:type_name -> krypton.plugin.cipher_wrapper.v1.EncryptedData
+ 2, // 5: krypton.plugin.cipher_wrapper.v1.CipherWrapper.Wrap:input_type -> krypton.plugin.cipher_wrapper.v1.WrapRequest
+ 4, // 6: krypton.plugin.cipher_wrapper.v1.CipherWrapper.Unwrap:input_type -> krypton.plugin.cipher_wrapper.v1.UnwrapRequest
+ 3, // 7: krypton.plugin.cipher_wrapper.v1.CipherWrapper.Wrap:output_type -> krypton.plugin.cipher_wrapper.v1.WrapResponse
+ 5, // 8: krypton.plugin.cipher_wrapper.v1.CipherWrapper.Unwrap:output_type -> krypton.plugin.cipher_wrapper.v1.UnwrapResponse
+ 7, // [7:9] is the sub-list for method output_type
+ 5, // [5:7] is the sub-list for method input_type
+ 5, // [5:5] is the sub-list for extension type_name
+ 5, // [5:5] is the sub-list for extension extendee
+ 0, // [0:5] is the sub-list for field type_name
+}
+
+func init() { file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_init() }
+func file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_init() {
+ if File_plugin_cipher_wrapper_v1_cipher_wrapper_proto != nil {
+ return
+ }
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[0].OneofWrappers = []any{}
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[1].OneofWrappers = []any{}
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[2].OneofWrappers = []any{}
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[3].OneofWrappers = []any{}
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes[4].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDesc), len(file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 7,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_goTypes,
+ DependencyIndexes: file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_depIdxs,
+ MessageInfos: file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_msgTypes,
+ }.Build()
+ File_plugin_cipher_wrapper_v1_cipher_wrapper_proto = out.File
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_goTypes = nil
+ file_plugin_cipher_wrapper_v1_cipher_wrapper_proto_depIdxs = nil
+}
diff --git a/proto/plugin/cipher_wrapper/v1/cipher_wrapper.pb.validate.go b/proto/plugin/cipher_wrapper/v1/cipher_wrapper.pb.validate.go
new file mode 100644
index 0000000..740744c
--- /dev/null
+++ b/proto/plugin/cipher_wrapper/v1/cipher_wrapper.pb.validate.go
@@ -0,0 +1,787 @@
+// Code generated by protoc-gen-validate. DO NOT EDIT.
+// source: plugin/cipher_wrapper/v1/cipher_wrapper.proto
+
+package cipher_wrapperv1
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "net"
+ "net/mail"
+ "net/url"
+ "regexp"
+ "sort"
+ "strings"
+ "time"
+ "unicode/utf8"
+
+ "google.golang.org/protobuf/types/known/anypb"
+)
+
+// ensure the imports are used
+var (
+ _ = bytes.MinRead
+ _ = errors.New("")
+ _ = fmt.Print
+ _ = utf8.UTFMax
+ _ = (*regexp.Regexp)(nil)
+ _ = (*strings.Reader)(nil)
+ _ = net.IPv4len
+ _ = time.Duration(0)
+ _ = (*url.URL)(nil)
+ _ = (*mail.Address)(nil)
+ _ = anypb.Any{}
+ _ = sort.Sort
+)
+
+// Validate checks the field values on KeyReference with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *KeyReference) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on KeyReference with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in KeyReferenceMultiError, or
+// nil if none found.
+func (m *KeyReference) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *KeyReference) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for KeyId
+
+ // no validation rules for Properties
+
+ if m.KeyName != nil {
+ // no validation rules for KeyName
+ }
+
+ if m.Version != nil {
+ // no validation rules for Version
+ }
+
+ if len(errors) > 0 {
+ return KeyReferenceMultiError(errors)
+ }
+
+ return nil
+}
+
+// KeyReferenceMultiError is an error wrapping multiple validation errors
+// returned by KeyReference.ValidateAll() if the designated constraints aren't met.
+type KeyReferenceMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m KeyReferenceMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m KeyReferenceMultiError) AllErrors() []error { return m }
+
+// KeyReferenceValidationError is the validation error returned by
+// KeyReference.Validate if the designated constraints aren't met.
+type KeyReferenceValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e KeyReferenceValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e KeyReferenceValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e KeyReferenceValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e KeyReferenceValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e KeyReferenceValidationError) ErrorName() string { return "KeyReferenceValidationError" }
+
+// Error satisfies the builtin error interface
+func (e KeyReferenceValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sKeyReference.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = KeyReferenceValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = KeyReferenceValidationError{}
+
+// Validate checks the field values on EncryptedData with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *EncryptedData) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on EncryptedData with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in EncryptedDataMultiError, or
+// nil if none found.
+func (m *EncryptedData) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *EncryptedData) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Ciphertext
+
+ if m.Iv != nil {
+ // no validation rules for Iv
+ }
+
+ if len(errors) > 0 {
+ return EncryptedDataMultiError(errors)
+ }
+
+ return nil
+}
+
+// EncryptedDataMultiError is an error wrapping multiple validation errors
+// returned by EncryptedData.ValidateAll() if the designated constraints
+// aren't met.
+type EncryptedDataMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m EncryptedDataMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m EncryptedDataMultiError) AllErrors() []error { return m }
+
+// EncryptedDataValidationError is the validation error returned by
+// EncryptedData.Validate if the designated constraints aren't met.
+type EncryptedDataValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e EncryptedDataValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e EncryptedDataValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e EncryptedDataValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e EncryptedDataValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e EncryptedDataValidationError) ErrorName() string { return "EncryptedDataValidationError" }
+
+// Error satisfies the builtin error interface
+func (e EncryptedDataValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sEncryptedData.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = EncryptedDataValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = EncryptedDataValidationError{}
+
+// Validate checks the field values on WrapRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *WrapRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on WrapRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in WrapRequestMultiError, or
+// nil if none found.
+func (m *WrapRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *WrapRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if all {
+ switch v := interface{}(m.GetKey()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, WrapRequestValidationError{
+ field: "Key",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, WrapRequestValidationError{
+ field: "Key",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetKey()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return WrapRequestValidationError{
+ field: "Key",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ // no validation rules for Plaintext
+
+ if m.Aad != nil {
+ // no validation rules for Aad
+ }
+
+ if m.IvHint != nil {
+ // no validation rules for IvHint
+ }
+
+ if len(errors) > 0 {
+ return WrapRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// WrapRequestMultiError is an error wrapping multiple validation errors
+// returned by WrapRequest.ValidateAll() if the designated constraints aren't met.
+type WrapRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m WrapRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m WrapRequestMultiError) AllErrors() []error { return m }
+
+// WrapRequestValidationError is the validation error returned by
+// WrapRequest.Validate if the designated constraints aren't met.
+type WrapRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e WrapRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e WrapRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e WrapRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e WrapRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e WrapRequestValidationError) ErrorName() string { return "WrapRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e WrapRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sWrapRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = WrapRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = WrapRequestValidationError{}
+
+// Validate checks the field values on WrapResponse with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *WrapResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on WrapResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in WrapResponseMultiError, or
+// nil if none found.
+func (m *WrapResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *WrapResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if all {
+ switch v := interface{}(m.GetEncryptedData()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, WrapResponseValidationError{
+ field: "EncryptedData",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, WrapResponseValidationError{
+ field: "EncryptedData",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetEncryptedData()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return WrapResponseValidationError{
+ field: "EncryptedData",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ if m.KeyVersionId != nil {
+ // no validation rules for KeyVersionId
+ }
+
+ if len(errors) > 0 {
+ return WrapResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// WrapResponseMultiError is an error wrapping multiple validation errors
+// returned by WrapResponse.ValidateAll() if the designated constraints aren't met.
+type WrapResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m WrapResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m WrapResponseMultiError) AllErrors() []error { return m }
+
+// WrapResponseValidationError is the validation error returned by
+// WrapResponse.Validate if the designated constraints aren't met.
+type WrapResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e WrapResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e WrapResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e WrapResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e WrapResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e WrapResponseValidationError) ErrorName() string { return "WrapResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e WrapResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sWrapResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = WrapResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = WrapResponseValidationError{}
+
+// Validate checks the field values on UnwrapRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *UnwrapRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on UnwrapRequest with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in UnwrapRequestMultiError, or
+// nil if none found.
+func (m *UnwrapRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *UnwrapRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if all {
+ switch v := interface{}(m.GetKey()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, UnwrapRequestValidationError{
+ field: "Key",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, UnwrapRequestValidationError{
+ field: "Key",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetKey()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return UnwrapRequestValidationError{
+ field: "Key",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ if all {
+ switch v := interface{}(m.GetEncryptedData()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, UnwrapRequestValidationError{
+ field: "EncryptedData",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, UnwrapRequestValidationError{
+ field: "EncryptedData",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetEncryptedData()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return UnwrapRequestValidationError{
+ field: "EncryptedData",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ if m.Aad != nil {
+ // no validation rules for Aad
+ }
+
+ if len(errors) > 0 {
+ return UnwrapRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// UnwrapRequestMultiError is an error wrapping multiple validation errors
+// returned by UnwrapRequest.ValidateAll() if the designated constraints
+// aren't met.
+type UnwrapRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m UnwrapRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m UnwrapRequestMultiError) AllErrors() []error { return m }
+
+// UnwrapRequestValidationError is the validation error returned by
+// UnwrapRequest.Validate if the designated constraints aren't met.
+type UnwrapRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e UnwrapRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e UnwrapRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e UnwrapRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e UnwrapRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e UnwrapRequestValidationError) ErrorName() string { return "UnwrapRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e UnwrapRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sUnwrapRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = UnwrapRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = UnwrapRequestValidationError{}
+
+// Validate checks the field values on UnwrapResponse with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *UnwrapResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on UnwrapResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in UnwrapResponseMultiError,
+// or nil if none found.
+func (m *UnwrapResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *UnwrapResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Plaintext
+
+ if len(errors) > 0 {
+ return UnwrapResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// UnwrapResponseMultiError is an error wrapping multiple validation errors
+// returned by UnwrapResponse.ValidateAll() if the designated constraints
+// aren't met.
+type UnwrapResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m UnwrapResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m UnwrapResponseMultiError) AllErrors() []error { return m }
+
+// UnwrapResponseValidationError is the validation error returned by
+// UnwrapResponse.Validate if the designated constraints aren't met.
+type UnwrapResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e UnwrapResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e UnwrapResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e UnwrapResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e UnwrapResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e UnwrapResponseValidationError) ErrorName() string { return "UnwrapResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e UnwrapResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sUnwrapResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = UnwrapResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = UnwrapResponseValidationError{}
diff --git a/proto/plugin/cipher_wrapper/v1/cipher_wrapper.proto b/proto/plugin/cipher_wrapper/v1/cipher_wrapper.proto
new file mode 100644
index 0000000..fe240ac
--- /dev/null
+++ b/proto/plugin/cipher_wrapper/v1/cipher_wrapper.proto
@@ -0,0 +1,95 @@
+syntax = "proto3";
+
+package krypton.plugin.cipher_wrapper.v1;
+
+import "buf/validate/validate.proto";
+
+// KeyWrapper defines the universal envelope encryption interface for CMK.
+// It allows the core engine to delegate cryptographic wrapping and unwrapping
+// to any external provider (AWS KMS, Google Cloud KMS, Azure Key Vault,
+// HashiCorp Vault, or hardware HSMs via PKCS#11) over a local gRPC socket.
+service CipherWrapper {
+ // Wrap encrypts the provided plaintext using the remote KMS provider.
+ rpc Wrap(WrapRequest) returns (WrapResponse);
+
+ // Unwrap decrypts the provided ciphertext using the remote KMS provider,
+ // returning the raw plaintext key material.
+ rpc Unwrap(UnwrapRequest) returns (UnwrapResponse);
+}
+
+// KeyReference identifies a specific key within an external KMS provider and
+// carries all routing config the plugin needs to reach it — address, engine path,
+// namespace, region, project, etc. — so no out-of-band registration is required.
+message KeyReference {
+ // Primary external identifier: ARN, Vault transit path, Azure key URI,
+ // GCP resource name, PKCS#11 label.
+ string key_id = 1 [(buf.validate.field).string.min_len = 1];
+
+ // Logical Krypton name — for providers that distinguish path from logical name
+ // and for audit log correlation.
+ optional string key_name = 2;
+
+ // Specific version (for versioned providers: AWS KMS, Azure Key Vault).
+ optional string version = 3;
+
+ // Provider-specific routing: address, engine_path, namespace, region, project_id …
+ // Always flat key-value — KMS addressing never needs nested structure.
+ map properties = 4;
+}
+
+// EncryptedData pairs the ciphertext with the IV used during encryption.
+// Kept together so storage and retrieval are always atomic — a ciphertext
+// without its IV is unrecoverable.
+message EncryptedData {
+ bytes ciphertext = 1 [(buf.validate.field).bytes.min_len = 1];
+
+ // OPTIONAL: Initialization Vector (IV) or Nonce.
+ // Must be provided if it was returned in the WrapResponse.
+ optional bytes iv = 2;
+}
+
+message WrapRequest {
+ // OPTIONAL/REQUIRED: The structured definition of the key to use.
+ KeyReference key = 1 [(buf.validate.field).required = true];
+
+ // REQUIRED: The raw cryptographic material to be wrapped.
+ bytes plaintext = 2 [
+ (buf.validate.field).required = true,
+ (buf.validate.field).bytes.min_len = 1
+ ];
+
+ // OPTIONAL: Standard Additional Authenticated Data (AAD) byte buffer.
+ // Kept in proto because AAD often changes per request (e.g., binding to a specific Tenant ID).
+ optional bytes aad = 3;
+
+ // IV hint: only set when the CMK engine is dictating the IV to the HSM
+ // (deterministic-IV hardware modes). Left unset for all software KMS providers.
+ optional bytes iv_hint = 4;
+}
+
+// WrapResponse returns the provider-specific ciphertext and metadata.
+message WrapResponse {
+ // REQUIRED: The opaque, vendor-specific ciphertext.
+ EncryptedData encrypted_data = 1;
+
+ // OPTIONAL: The exact key version ID used during the operation.
+ // Some providers (like HSMs) do not have a concept of version IDs.
+ optional string key_version_id = 2;
+}
+
+message UnwrapRequest {
+ // REQUIRED: The structured definition of the key to use.
+ KeyReference key = 1 [(buf.validate.field).required = true];
+
+ // REQUIRED: The opaque ciphertext retrieved from the CMK persistent storage.
+ EncryptedData encrypted_data = 2 [(buf.validate.field).required = true];
+
+ // OPTIONAL: Standard Additional Authenticated Data (AAD) byte buffer.
+ optional bytes aad = 3;
+}
+
+// UnwrapResponse returns the recovered raw cryptographic material.
+message UnwrapResponse {
+ // REQUIRED: The recovered raw cryptographic material.
+ bytes plaintext = 1;
+}
diff --git a/proto/plugin/cipher_wrapper/v1/cipher_wrapper_ext_plugin.pb.go b/proto/plugin/cipher_wrapper/v1/cipher_wrapper_ext_plugin.pb.go
new file mode 100644
index 0000000..62dc7bc
--- /dev/null
+++ b/proto/plugin/cipher_wrapper/v1/cipher_wrapper_ext_plugin.pb.go
@@ -0,0 +1,56 @@
+// Code generated by protoc-gen-go-extension. DO NOT EDIT.
+
+package cipher_wrapperv1
+
+import (
+ grpc "google.golang.org/grpc"
+
+ api "github.com/openkcm/plugin-sdk/api"
+)
+
+const (
+ Type = "CipherWrapper"
+ GRPCServiceFullName = "krypton.plugin.cipher_wrapper.v1.CipherWrapper"
+)
+
+func CipherWrapperPluginServer(server CipherWrapperServer) api.PluginServer {
+ return cipherWrapperPluginServer{CipherWrapperServer: server}
+}
+
+type cipherWrapperPluginServer struct {
+ CipherWrapperServer
+}
+
+func (s cipherWrapperPluginServer) Type() string {
+ return Type
+}
+
+func (s cipherWrapperPluginServer) GRPCServiceName() string {
+ return GRPCServiceFullName
+}
+
+func (s cipherWrapperPluginServer) RegisterServer(server *grpc.Server) any {
+ RegisterCipherWrapperServer(server, s.CipherWrapperServer)
+ return s.CipherWrapperServer
+}
+
+type CipherWrapperPluginClient struct {
+ CipherWrapperClient
+}
+
+func (s CipherWrapperPluginClient) Type() string {
+ return Type
+}
+
+func (c *CipherWrapperPluginClient) IsInitialized() bool {
+ return c.CipherWrapperClient != nil
+}
+
+func (c *CipherWrapperPluginClient) GRPCServiceName() string {
+ return GRPCServiceFullName
+}
+
+func (c *CipherWrapperPluginClient) InitClient(conn grpc.ClientConnInterface) any {
+ c.CipherWrapperClient = NewCipherWrapperClient(conn)
+ return c.CipherWrapperClient
+}
diff --git a/proto/plugin/cipher_wrapper/v1/cipher_wrapper_grpc.pb.go b/proto/plugin/cipher_wrapper/v1/cipher_wrapper_grpc.pb.go
new file mode 100644
index 0000000..f805cd3
--- /dev/null
+++ b/proto/plugin/cipher_wrapper/v1/cipher_wrapper_grpc.pb.go
@@ -0,0 +1,176 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.6.1
+// - protoc (unknown)
+// source: plugin/cipher_wrapper/v1/cipher_wrapper.proto
+
+package cipher_wrapperv1
+
+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.64.0 or later.
+const _ = grpc.SupportPackageIsVersion9
+
+const (
+ CipherWrapper_Wrap_FullMethodName = "/krypton.plugin.cipher_wrapper.v1.CipherWrapper/Wrap"
+ CipherWrapper_Unwrap_FullMethodName = "/krypton.plugin.cipher_wrapper.v1.CipherWrapper/Unwrap"
+)
+
+// CipherWrapperClient is the client API for CipherWrapper 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.
+//
+// KeyWrapper defines the universal envelope encryption interface for CMK.
+// It allows the core engine to delegate cryptographic wrapping and unwrapping
+// to any external provider (AWS KMS, Google Cloud KMS, Azure Key Vault,
+// HashiCorp Vault, or hardware HSMs via PKCS#11) over a local gRPC socket.
+type CipherWrapperClient interface {
+ // Wrap encrypts the provided plaintext using the remote KMS provider.
+ Wrap(ctx context.Context, in *WrapRequest, opts ...grpc.CallOption) (*WrapResponse, error)
+ // Unwrap decrypts the provided ciphertext using the remote KMS provider,
+ // returning the raw plaintext key material.
+ Unwrap(ctx context.Context, in *UnwrapRequest, opts ...grpc.CallOption) (*UnwrapResponse, error)
+}
+
+type cipherWrapperClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewCipherWrapperClient(cc grpc.ClientConnInterface) CipherWrapperClient {
+ return &cipherWrapperClient{cc}
+}
+
+func (c *cipherWrapperClient) Wrap(ctx context.Context, in *WrapRequest, opts ...grpc.CallOption) (*WrapResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(WrapResponse)
+ err := c.cc.Invoke(ctx, CipherWrapper_Wrap_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *cipherWrapperClient) Unwrap(ctx context.Context, in *UnwrapRequest, opts ...grpc.CallOption) (*UnwrapResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(UnwrapResponse)
+ err := c.cc.Invoke(ctx, CipherWrapper_Unwrap_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// CipherWrapperServer is the server API for CipherWrapper service.
+// All implementations must embed UnimplementedCipherWrapperServer
+// for forward compatibility.
+//
+// KeyWrapper defines the universal envelope encryption interface for CMK.
+// It allows the core engine to delegate cryptographic wrapping and unwrapping
+// to any external provider (AWS KMS, Google Cloud KMS, Azure Key Vault,
+// HashiCorp Vault, or hardware HSMs via PKCS#11) over a local gRPC socket.
+type CipherWrapperServer interface {
+ // Wrap encrypts the provided plaintext using the remote KMS provider.
+ Wrap(context.Context, *WrapRequest) (*WrapResponse, error)
+ // Unwrap decrypts the provided ciphertext using the remote KMS provider,
+ // returning the raw plaintext key material.
+ Unwrap(context.Context, *UnwrapRequest) (*UnwrapResponse, error)
+ mustEmbedUnimplementedCipherWrapperServer()
+}
+
+// UnimplementedCipherWrapperServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedCipherWrapperServer struct{}
+
+func (UnimplementedCipherWrapperServer) Wrap(context.Context, *WrapRequest) (*WrapResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method Wrap not implemented")
+}
+func (UnimplementedCipherWrapperServer) Unwrap(context.Context, *UnwrapRequest) (*UnwrapResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method Unwrap not implemented")
+}
+func (UnimplementedCipherWrapperServer) mustEmbedUnimplementedCipherWrapperServer() {}
+func (UnimplementedCipherWrapperServer) testEmbeddedByValue() {}
+
+// UnsafeCipherWrapperServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to CipherWrapperServer will
+// result in compilation errors.
+type UnsafeCipherWrapperServer interface {
+ mustEmbedUnimplementedCipherWrapperServer()
+}
+
+func RegisterCipherWrapperServer(s grpc.ServiceRegistrar, srv CipherWrapperServer) {
+ // If the following call panics, it indicates UnimplementedCipherWrapperServer was
+ // embedded by pointer and is nil. This will cause panics if an
+ // unimplemented method is ever invoked, so we test this at initialization
+ // time to prevent it from happening at runtime later due to I/O.
+ if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+ t.testEmbeddedByValue()
+ }
+ s.RegisterService(&CipherWrapper_ServiceDesc, srv)
+}
+
+func _CipherWrapper_Wrap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(WrapRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CipherWrapperServer).Wrap(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: CipherWrapper_Wrap_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CipherWrapperServer).Wrap(ctx, req.(*WrapRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _CipherWrapper_Unwrap_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(UnwrapRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(CipherWrapperServer).Unwrap(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: CipherWrapper_Unwrap_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(CipherWrapperServer).Unwrap(ctx, req.(*UnwrapRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// CipherWrapper_ServiceDesc is the grpc.ServiceDesc for CipherWrapper service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var CipherWrapper_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "krypton.plugin.cipher_wrapper.v1.CipherWrapper",
+ HandlerType: (*CipherWrapperServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Wrap",
+ Handler: _CipherWrapper_Wrap_Handler,
+ },
+ {
+ MethodName: "Unwrap",
+ Handler: _CipherWrapper_Unwrap_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "plugin/cipher_wrapper/v1/cipher_wrapper.proto",
+}
diff --git a/proto/plugin/identity_management/v1/identity_management.pb.go b/proto/plugin/identity_management/v1/identity_management.pb.go
index caf3355..c8f3619 100644
--- a/proto/plugin/identity_management/v1/identity_management.pb.go
+++ b/proto/plugin/identity_management/v1/identity_management.pb.go
@@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/identity_management/v1/identity_management.proto
package identity_managementv1
import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
@@ -66,6 +65,102 @@ func (x *AuthContext) GetData() map[string]string {
return nil
}
+type GetUserRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
+ AuthContext *AuthContext `protobuf:"bytes,99,opt,name=auth_context,json=authContext,proto3" json:"auth_context,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GetUserRequest) Reset() {
+ *x = GetUserRequest{}
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetUserRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetUserRequest) ProtoMessage() {}
+
+func (x *GetUserRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetUserRequest.ProtoReflect.Descriptor instead.
+func (*GetUserRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GetUserRequest) GetUserId() string {
+ if x != nil {
+ return x.UserId
+ }
+ return ""
+}
+
+func (x *GetUserRequest) GetAuthContext() *AuthContext {
+ if x != nil {
+ return x.AuthContext
+ }
+ return nil
+}
+
+type GetUserResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GetUserResponse) Reset() {
+ *x = GetUserResponse{}
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetUserResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetUserResponse) ProtoMessage() {}
+
+func (x *GetUserResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetUserResponse.ProtoReflect.Descriptor instead.
+func (*GetUserResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *GetUserResponse) GetUser() *User {
+ if x != nil {
+ return x.User
+ }
+ return nil
+}
+
type GetGroupRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
GroupName string `protobuf:"bytes,1,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"`
@@ -76,7 +171,7 @@ type GetGroupRequest struct {
func (x *GetGroupRequest) Reset() {
*x = GetGroupRequest{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[1]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -88,7 +183,7 @@ func (x *GetGroupRequest) String() string {
func (*GetGroupRequest) ProtoMessage() {}
func (x *GetGroupRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[1]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -101,7 +196,7 @@ func (x *GetGroupRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetGroupRequest.ProtoReflect.Descriptor instead.
func (*GetGroupRequest) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{1}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{3}
}
func (x *GetGroupRequest) GetGroupName() string {
@@ -127,7 +222,7 @@ type GetGroupResponse struct {
func (x *GetGroupResponse) Reset() {
*x = GetGroupResponse{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[2]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -139,7 +234,7 @@ func (x *GetGroupResponse) String() string {
func (*GetGroupResponse) ProtoMessage() {}
func (x *GetGroupResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[2]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -152,7 +247,7 @@ func (x *GetGroupResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetGroupResponse.ProtoReflect.Descriptor instead.
func (*GetGroupResponse) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{2}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{4}
}
func (x *GetGroupResponse) GetGroup() *Group {
@@ -171,7 +266,7 @@ type GetAllGroupsRequest struct {
func (x *GetAllGroupsRequest) Reset() {
*x = GetAllGroupsRequest{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[3]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -183,7 +278,7 @@ func (x *GetAllGroupsRequest) String() string {
func (*GetAllGroupsRequest) ProtoMessage() {}
func (x *GetAllGroupsRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[3]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -196,7 +291,7 @@ func (x *GetAllGroupsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetAllGroupsRequest.ProtoReflect.Descriptor instead.
func (*GetAllGroupsRequest) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{3}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{5}
}
func (x *GetAllGroupsRequest) GetAuthContext() *AuthContext {
@@ -215,7 +310,7 @@ type GetAllGroupsResponse struct {
func (x *GetAllGroupsResponse) Reset() {
*x = GetAllGroupsResponse{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[4]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -227,7 +322,7 @@ func (x *GetAllGroupsResponse) String() string {
func (*GetAllGroupsResponse) ProtoMessage() {}
func (x *GetAllGroupsResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[4]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -240,7 +335,7 @@ func (x *GetAllGroupsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetAllGroupsResponse.ProtoReflect.Descriptor instead.
func (*GetAllGroupsResponse) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{4}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{6}
}
func (x *GetAllGroupsResponse) GetGroups() []*Group {
@@ -260,7 +355,7 @@ type GetUsersForGroupRequest struct {
func (x *GetUsersForGroupRequest) Reset() {
*x = GetUsersForGroupRequest{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[5]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -272,7 +367,7 @@ func (x *GetUsersForGroupRequest) String() string {
func (*GetUsersForGroupRequest) ProtoMessage() {}
func (x *GetUsersForGroupRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[5]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -285,7 +380,7 @@ func (x *GetUsersForGroupRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUsersForGroupRequest.ProtoReflect.Descriptor instead.
func (*GetUsersForGroupRequest) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{5}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{7}
}
func (x *GetUsersForGroupRequest) GetGroupId() string {
@@ -311,7 +406,7 @@ type GetUsersForGroupResponse struct {
func (x *GetUsersForGroupResponse) Reset() {
*x = GetUsersForGroupResponse{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[6]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -323,7 +418,7 @@ func (x *GetUsersForGroupResponse) String() string {
func (*GetUsersForGroupResponse) ProtoMessage() {}
func (x *GetUsersForGroupResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[6]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -336,7 +431,7 @@ func (x *GetUsersForGroupResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUsersForGroupResponse.ProtoReflect.Descriptor instead.
func (*GetUsersForGroupResponse) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{6}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{8}
}
func (x *GetUsersForGroupResponse) GetUsers() []*User {
@@ -357,7 +452,7 @@ type User struct {
func (x *User) Reset() {
*x = User{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[7]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -369,7 +464,7 @@ func (x *User) String() string {
func (*User) ProtoMessage() {}
func (x *User) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[7]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -382,7 +477,7 @@ func (x *User) ProtoReflect() protoreflect.Message {
// Deprecated: Use User.ProtoReflect.Descriptor instead.
func (*User) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{7}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{9}
}
func (x *User) GetId() string {
@@ -416,7 +511,7 @@ type GetGroupsForUserRequest struct {
func (x *GetGroupsForUserRequest) Reset() {
*x = GetGroupsForUserRequest{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[8]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -428,7 +523,7 @@ func (x *GetGroupsForUserRequest) String() string {
func (*GetGroupsForUserRequest) ProtoMessage() {}
func (x *GetGroupsForUserRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[8]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -441,7 +536,7 @@ func (x *GetGroupsForUserRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetGroupsForUserRequest.ProtoReflect.Descriptor instead.
func (*GetGroupsForUserRequest) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{8}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{10}
}
func (x *GetGroupsForUserRequest) GetUserId() string {
@@ -467,7 +562,7 @@ type GetGroupsForUserResponse struct {
func (x *GetGroupsForUserResponse) Reset() {
*x = GetGroupsForUserResponse{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[9]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -479,7 +574,7 @@ func (x *GetGroupsForUserResponse) String() string {
func (*GetGroupsForUserResponse) ProtoMessage() {}
func (x *GetGroupsForUserResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[9]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -492,7 +587,7 @@ func (x *GetGroupsForUserResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetGroupsForUserResponse.ProtoReflect.Descriptor instead.
func (*GetGroupsForUserResponse) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{9}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{11}
}
func (x *GetGroupsForUserResponse) GetGroups() []*Group {
@@ -512,7 +607,7 @@ type Group struct {
func (x *Group) Reset() {
*x = Group{}
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[10]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -524,7 +619,7 @@ func (x *Group) String() string {
func (*Group) ProtoMessage() {}
func (x *Group) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[10]
+ mi := &file_plugin_identity_management_v1_identity_management_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -537,7 +632,7 @@ func (x *Group) ProtoReflect() protoreflect.Message {
// Deprecated: Use Group.ProtoReflect.Descriptor instead.
func (*Group) Descriptor() ([]byte, []int) {
- return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{10}
+ return file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP(), []int{12}
}
func (x *Group) GetId() string {
@@ -563,7 +658,12 @@ const file_plugin_identity_management_v1_identity_management_proto_rawDesc = ""
"\x04data\x18\x01 \x03(\v24.plugin.identity_management.v1.AuthContext.DataEntryR\x04data\x1a7\n" +
"\tDataEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
- "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x7f\n" +
+ "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"x\n" +
+ "\x0eGetUserRequest\x12\x17\n" +
+ "\auser_id\x18\x01 \x01(\tR\x06userId\x12M\n" +
+ "\fauth_context\x18c \x01(\v2*.plugin.identity_management.v1.AuthContextR\vauthContext\"J\n" +
+ "\x0fGetUserResponse\x127\n" +
+ "\x04user\x18\x01 \x01(\v2#.plugin.identity_management.v1.UserR\x04user\"\x7f\n" +
"\x0fGetGroupRequest\x12\x1d\n" +
"\n" +
"group_name\x18\x01 \x01(\tR\tgroupName\x12M\n" +
@@ -590,13 +690,13 @@ const file_plugin_identity_management_v1_identity_management_proto_rawDesc = ""
"\x06groups\x18\x01 \x03(\v2$.plugin.identity_management.v1.GroupR\x06groups\"+\n" +
"\x05Group\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
- "\x04name\x18\x02 \x01(\tR\x04name2\x8d\x04\n" +
- "\x19IdentityManagementService\x12k\n" +
+ "\x04name\x18\x02 \x01(\tR\x04name2\xf7\x04\n" +
+ "\x19IdentityManagementService\x12h\n" +
+ "\aGetUser\x12-.plugin.identity_management.v1.GetUserRequest\x1a..plugin.identity_management.v1.GetUserResponse\x12k\n" +
"\bGetGroup\x12..plugin.identity_management.v1.GetGroupRequest\x1a/.plugin.identity_management.v1.GetGroupResponse\x12w\n" +
"\fGetAllGroups\x122.plugin.identity_management.v1.GetAllGroupsRequest\x1a3.plugin.identity_management.v1.GetAllGroupsResponse\x12\x83\x01\n" +
"\x10GetUsersForGroup\x126.plugin.identity_management.v1.GetUsersForGroupRequest\x1a7.plugin.identity_management.v1.GetUsersForGroupResponse\x12\x83\x01\n" +
- "\x10GetGroupsForUser\x126.plugin.identity_management.v1.GetGroupsForUserRequest\x1a7.plugin.identity_management.v1.GetGroupsForUserResponseB\xa7\x02\n" +
- "!com.plugin.identity_management.v1B\x17IdentityManagementProtoP\x01ZWgithub.com/openkcm/plugin-sdk/proto/plugin/identity_management/v1;identity_managementv1\xa2\x02\x03PIX\xaa\x02\x1cPlugin.IdentityManagement.V1\xca\x02\x1cPlugin\\IdentityManagement\\V1\xe2\x02(Plugin\\IdentityManagement\\V1\\GPBMetadata\xea\x02\x1ePlugin::IdentityManagement::V1b\x06proto3"
+ "\x10GetGroupsForUser\x126.plugin.identity_management.v1.GetGroupsForUserRequest\x1a7.plugin.identity_management.v1.GetGroupsForUserResponseBYZWgithub.com/openkcm/plugin-sdk/proto/plugin/identity_management/v1;identity_managementv1b\x06proto3"
var (
file_plugin_identity_management_v1_identity_management_proto_rawDescOnce sync.Once
@@ -610,44 +710,50 @@ func file_plugin_identity_management_v1_identity_management_proto_rawDescGZIP()
return file_plugin_identity_management_v1_identity_management_proto_rawDescData
}
-var file_plugin_identity_management_v1_identity_management_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
+var file_plugin_identity_management_v1_identity_management_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_plugin_identity_management_v1_identity_management_proto_goTypes = []any{
(*AuthContext)(nil), // 0: plugin.identity_management.v1.AuthContext
- (*GetGroupRequest)(nil), // 1: plugin.identity_management.v1.GetGroupRequest
- (*GetGroupResponse)(nil), // 2: plugin.identity_management.v1.GetGroupResponse
- (*GetAllGroupsRequest)(nil), // 3: plugin.identity_management.v1.GetAllGroupsRequest
- (*GetAllGroupsResponse)(nil), // 4: plugin.identity_management.v1.GetAllGroupsResponse
- (*GetUsersForGroupRequest)(nil), // 5: plugin.identity_management.v1.GetUsersForGroupRequest
- (*GetUsersForGroupResponse)(nil), // 6: plugin.identity_management.v1.GetUsersForGroupResponse
- (*User)(nil), // 7: plugin.identity_management.v1.User
- (*GetGroupsForUserRequest)(nil), // 8: plugin.identity_management.v1.GetGroupsForUserRequest
- (*GetGroupsForUserResponse)(nil), // 9: plugin.identity_management.v1.GetGroupsForUserResponse
- (*Group)(nil), // 10: plugin.identity_management.v1.Group
- nil, // 11: plugin.identity_management.v1.AuthContext.DataEntry
+ (*GetUserRequest)(nil), // 1: plugin.identity_management.v1.GetUserRequest
+ (*GetUserResponse)(nil), // 2: plugin.identity_management.v1.GetUserResponse
+ (*GetGroupRequest)(nil), // 3: plugin.identity_management.v1.GetGroupRequest
+ (*GetGroupResponse)(nil), // 4: plugin.identity_management.v1.GetGroupResponse
+ (*GetAllGroupsRequest)(nil), // 5: plugin.identity_management.v1.GetAllGroupsRequest
+ (*GetAllGroupsResponse)(nil), // 6: plugin.identity_management.v1.GetAllGroupsResponse
+ (*GetUsersForGroupRequest)(nil), // 7: plugin.identity_management.v1.GetUsersForGroupRequest
+ (*GetUsersForGroupResponse)(nil), // 8: plugin.identity_management.v1.GetUsersForGroupResponse
+ (*User)(nil), // 9: plugin.identity_management.v1.User
+ (*GetGroupsForUserRequest)(nil), // 10: plugin.identity_management.v1.GetGroupsForUserRequest
+ (*GetGroupsForUserResponse)(nil), // 11: plugin.identity_management.v1.GetGroupsForUserResponse
+ (*Group)(nil), // 12: plugin.identity_management.v1.Group
+ nil, // 13: plugin.identity_management.v1.AuthContext.DataEntry
}
var file_plugin_identity_management_v1_identity_management_proto_depIdxs = []int32{
- 11, // 0: plugin.identity_management.v1.AuthContext.data:type_name -> plugin.identity_management.v1.AuthContext.DataEntry
- 0, // 1: plugin.identity_management.v1.GetGroupRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
- 10, // 2: plugin.identity_management.v1.GetGroupResponse.group:type_name -> plugin.identity_management.v1.Group
- 0, // 3: plugin.identity_management.v1.GetAllGroupsRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
- 10, // 4: plugin.identity_management.v1.GetAllGroupsResponse.groups:type_name -> plugin.identity_management.v1.Group
- 0, // 5: plugin.identity_management.v1.GetUsersForGroupRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
- 7, // 6: plugin.identity_management.v1.GetUsersForGroupResponse.users:type_name -> plugin.identity_management.v1.User
- 0, // 7: plugin.identity_management.v1.GetGroupsForUserRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
- 10, // 8: plugin.identity_management.v1.GetGroupsForUserResponse.groups:type_name -> plugin.identity_management.v1.Group
- 1, // 9: plugin.identity_management.v1.IdentityManagementService.GetGroup:input_type -> plugin.identity_management.v1.GetGroupRequest
- 3, // 10: plugin.identity_management.v1.IdentityManagementService.GetAllGroups:input_type -> plugin.identity_management.v1.GetAllGroupsRequest
- 5, // 11: plugin.identity_management.v1.IdentityManagementService.GetUsersForGroup:input_type -> plugin.identity_management.v1.GetUsersForGroupRequest
- 8, // 12: plugin.identity_management.v1.IdentityManagementService.GetGroupsForUser:input_type -> plugin.identity_management.v1.GetGroupsForUserRequest
- 2, // 13: plugin.identity_management.v1.IdentityManagementService.GetGroup:output_type -> plugin.identity_management.v1.GetGroupResponse
- 4, // 14: plugin.identity_management.v1.IdentityManagementService.GetAllGroups:output_type -> plugin.identity_management.v1.GetAllGroupsResponse
- 6, // 15: plugin.identity_management.v1.IdentityManagementService.GetUsersForGroup:output_type -> plugin.identity_management.v1.GetUsersForGroupResponse
- 9, // 16: plugin.identity_management.v1.IdentityManagementService.GetGroupsForUser:output_type -> plugin.identity_management.v1.GetGroupsForUserResponse
- 13, // [13:17] is the sub-list for method output_type
- 9, // [9:13] 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
+ 13, // 0: plugin.identity_management.v1.AuthContext.data:type_name -> plugin.identity_management.v1.AuthContext.DataEntry
+ 0, // 1: plugin.identity_management.v1.GetUserRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
+ 9, // 2: plugin.identity_management.v1.GetUserResponse.user:type_name -> plugin.identity_management.v1.User
+ 0, // 3: plugin.identity_management.v1.GetGroupRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
+ 12, // 4: plugin.identity_management.v1.GetGroupResponse.group:type_name -> plugin.identity_management.v1.Group
+ 0, // 5: plugin.identity_management.v1.GetAllGroupsRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
+ 12, // 6: plugin.identity_management.v1.GetAllGroupsResponse.groups:type_name -> plugin.identity_management.v1.Group
+ 0, // 7: plugin.identity_management.v1.GetUsersForGroupRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
+ 9, // 8: plugin.identity_management.v1.GetUsersForGroupResponse.users:type_name -> plugin.identity_management.v1.User
+ 0, // 9: plugin.identity_management.v1.GetGroupsForUserRequest.auth_context:type_name -> plugin.identity_management.v1.AuthContext
+ 12, // 10: plugin.identity_management.v1.GetGroupsForUserResponse.groups:type_name -> plugin.identity_management.v1.Group
+ 1, // 11: plugin.identity_management.v1.IdentityManagementService.GetUser:input_type -> plugin.identity_management.v1.GetUserRequest
+ 3, // 12: plugin.identity_management.v1.IdentityManagementService.GetGroup:input_type -> plugin.identity_management.v1.GetGroupRequest
+ 5, // 13: plugin.identity_management.v1.IdentityManagementService.GetAllGroups:input_type -> plugin.identity_management.v1.GetAllGroupsRequest
+ 7, // 14: plugin.identity_management.v1.IdentityManagementService.GetUsersForGroup:input_type -> plugin.identity_management.v1.GetUsersForGroupRequest
+ 10, // 15: plugin.identity_management.v1.IdentityManagementService.GetGroupsForUser:input_type -> plugin.identity_management.v1.GetGroupsForUserRequest
+ 2, // 16: plugin.identity_management.v1.IdentityManagementService.GetUser:output_type -> plugin.identity_management.v1.GetUserResponse
+ 4, // 17: plugin.identity_management.v1.IdentityManagementService.GetGroup:output_type -> plugin.identity_management.v1.GetGroupResponse
+ 6, // 18: plugin.identity_management.v1.IdentityManagementService.GetAllGroups:output_type -> plugin.identity_management.v1.GetAllGroupsResponse
+ 8, // 19: plugin.identity_management.v1.IdentityManagementService.GetUsersForGroup:output_type -> plugin.identity_management.v1.GetUsersForGroupResponse
+ 11, // 20: plugin.identity_management.v1.IdentityManagementService.GetGroupsForUser:output_type -> plugin.identity_management.v1.GetGroupsForUserResponse
+ 16, // [16:21] is the sub-list for method output_type
+ 11, // [11:16] is the sub-list for method input_type
+ 11, // [11:11] is the sub-list for extension type_name
+ 11, // [11:11] is the sub-list for extension extendee
+ 0, // [0:11] is the sub-list for field type_name
}
func init() { file_plugin_identity_management_v1_identity_management_proto_init() }
@@ -661,7 +767,7 @@ func file_plugin_identity_management_v1_identity_management_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_plugin_identity_management_v1_identity_management_proto_rawDesc), len(file_plugin_identity_management_v1_identity_management_proto_rawDesc)),
NumEnums: 0,
- NumMessages: 12,
+ NumMessages: 14,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/proto/plugin/identity_management/v1/identity_management.pb.validate.go b/proto/plugin/identity_management/v1/identity_management.pb.validate.go
deleted file mode 100644
index c72e3ef..0000000
--- a/proto/plugin/identity_management/v1/identity_management.pb.validate.go
+++ /dev/null
@@ -1,1408 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/identity_management/v1/identity_management.proto
-
-package identity_managementv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on AuthContext with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *AuthContext) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on AuthContext with the rules defined in
-// the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in AuthContextMultiError, or
-// nil if none found.
-func (m *AuthContext) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *AuthContext) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Data
-
- if len(errors) > 0 {
- return AuthContextMultiError(errors)
- }
-
- return nil
-}
-
-// AuthContextMultiError is an error wrapping multiple validation errors
-// returned by AuthContext.ValidateAll() if the designated constraints aren't met.
-type AuthContextMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m AuthContextMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m AuthContextMultiError) AllErrors() []error { return m }
-
-// AuthContextValidationError is the validation error returned by
-// AuthContext.Validate if the designated constraints aren't met.
-type AuthContextValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e AuthContextValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e AuthContextValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e AuthContextValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e AuthContextValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e AuthContextValidationError) ErrorName() string { return "AuthContextValidationError" }
-
-// Error satisfies the builtin error interface
-func (e AuthContextValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sAuthContext.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = AuthContextValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = AuthContextValidationError{}
-
-// Validate checks the field values on GetGroupRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *GetGroupRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetGroupRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetGroupRequestMultiError, or nil if none found.
-func (m *GetGroupRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetGroupRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for GroupName
-
- if all {
- switch v := interface{}(m.GetAuthContext()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetGroupRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetGroupRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetAuthContext()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetGroupRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetGroupRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetGroupRequestMultiError is an error wrapping multiple validation errors
-// returned by GetGroupRequest.ValidateAll() if the designated constraints
-// aren't met.
-type GetGroupRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetGroupRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetGroupRequestMultiError) AllErrors() []error { return m }
-
-// GetGroupRequestValidationError is the validation error returned by
-// GetGroupRequest.Validate if the designated constraints aren't met.
-type GetGroupRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetGroupRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetGroupRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetGroupRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetGroupRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetGroupRequestValidationError) ErrorName() string { return "GetGroupRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e GetGroupRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetGroupRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetGroupRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetGroupRequestValidationError{}
-
-// Validate checks the field values on GetGroupResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *GetGroupResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetGroupResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetGroupResponseMultiError, or nil if none found.
-func (m *GetGroupResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetGroupResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetGroup()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetGroupResponseValidationError{
- field: "Group",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetGroupResponseValidationError{
- field: "Group",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetGroupResponseValidationError{
- field: "Group",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetGroupResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetGroupResponseMultiError is an error wrapping multiple validation errors
-// returned by GetGroupResponse.ValidateAll() if the designated constraints
-// aren't met.
-type GetGroupResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetGroupResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetGroupResponseMultiError) AllErrors() []error { return m }
-
-// GetGroupResponseValidationError is the validation error returned by
-// GetGroupResponse.Validate if the designated constraints aren't met.
-type GetGroupResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetGroupResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetGroupResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetGroupResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetGroupResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetGroupResponseValidationError) ErrorName() string { return "GetGroupResponseValidationError" }
-
-// Error satisfies the builtin error interface
-func (e GetGroupResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetGroupResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetGroupResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetGroupResponseValidationError{}
-
-// Validate checks the field values on GetAllGroupsRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetAllGroupsRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetAllGroupsRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetAllGroupsRequestMultiError, or nil if none found.
-func (m *GetAllGroupsRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetAllGroupsRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetAuthContext()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetAllGroupsRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetAllGroupsRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetAuthContext()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetAllGroupsRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetAllGroupsRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetAllGroupsRequestMultiError is an error wrapping multiple validation
-// errors returned by GetAllGroupsRequest.ValidateAll() if the designated
-// constraints aren't met.
-type GetAllGroupsRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetAllGroupsRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetAllGroupsRequestMultiError) AllErrors() []error { return m }
-
-// GetAllGroupsRequestValidationError is the validation error returned by
-// GetAllGroupsRequest.Validate if the designated constraints aren't met.
-type GetAllGroupsRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetAllGroupsRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetAllGroupsRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetAllGroupsRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetAllGroupsRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetAllGroupsRequestValidationError) ErrorName() string {
- return "GetAllGroupsRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetAllGroupsRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetAllGroupsRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetAllGroupsRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetAllGroupsRequestValidationError{}
-
-// Validate checks the field values on GetAllGroupsResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetAllGroupsResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetAllGroupsResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetAllGroupsResponseMultiError, or nil if none found.
-func (m *GetAllGroupsResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetAllGroupsResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- for idx, item := range m.GetGroups() {
- _, _ = idx, item
-
- if all {
- switch v := interface{}(item).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetAllGroupsResponseValidationError{
- field: fmt.Sprintf("Groups[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetAllGroupsResponseValidationError{
- field: fmt.Sprintf("Groups[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetAllGroupsResponseValidationError{
- field: fmt.Sprintf("Groups[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- }
-
- if len(errors) > 0 {
- return GetAllGroupsResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetAllGroupsResponseMultiError is an error wrapping multiple validation
-// errors returned by GetAllGroupsResponse.ValidateAll() if the designated
-// constraints aren't met.
-type GetAllGroupsResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetAllGroupsResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetAllGroupsResponseMultiError) AllErrors() []error { return m }
-
-// GetAllGroupsResponseValidationError is the validation error returned by
-// GetAllGroupsResponse.Validate if the designated constraints aren't met.
-type GetAllGroupsResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetAllGroupsResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetAllGroupsResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetAllGroupsResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetAllGroupsResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetAllGroupsResponseValidationError) ErrorName() string {
- return "GetAllGroupsResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetAllGroupsResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetAllGroupsResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetAllGroupsResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetAllGroupsResponseValidationError{}
-
-// Validate checks the field values on GetUsersForGroupRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetUsersForGroupRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetUsersForGroupRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetUsersForGroupRequestMultiError, or nil if none found.
-func (m *GetUsersForGroupRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetUsersForGroupRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for GroupId
-
- if all {
- switch v := interface{}(m.GetAuthContext()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetUsersForGroupRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetUsersForGroupRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetAuthContext()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetUsersForGroupRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetUsersForGroupRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetUsersForGroupRequestMultiError is an error wrapping multiple validation
-// errors returned by GetUsersForGroupRequest.ValidateAll() if the designated
-// constraints aren't met.
-type GetUsersForGroupRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetUsersForGroupRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetUsersForGroupRequestMultiError) AllErrors() []error { return m }
-
-// GetUsersForGroupRequestValidationError is the validation error returned by
-// GetUsersForGroupRequest.Validate if the designated constraints aren't met.
-type GetUsersForGroupRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetUsersForGroupRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetUsersForGroupRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetUsersForGroupRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetUsersForGroupRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetUsersForGroupRequestValidationError) ErrorName() string {
- return "GetUsersForGroupRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetUsersForGroupRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetUsersForGroupRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetUsersForGroupRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetUsersForGroupRequestValidationError{}
-
-// Validate checks the field values on GetUsersForGroupResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetUsersForGroupResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetUsersForGroupResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetUsersForGroupResponseMultiError, or nil if none found.
-func (m *GetUsersForGroupResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetUsersForGroupResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- for idx, item := range m.GetUsers() {
- _, _ = idx, item
-
- if all {
- switch v := interface{}(item).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetUsersForGroupResponseValidationError{
- field: fmt.Sprintf("Users[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetUsersForGroupResponseValidationError{
- field: fmt.Sprintf("Users[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetUsersForGroupResponseValidationError{
- field: fmt.Sprintf("Users[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- }
-
- if len(errors) > 0 {
- return GetUsersForGroupResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetUsersForGroupResponseMultiError is an error wrapping multiple validation
-// errors returned by GetUsersForGroupResponse.ValidateAll() if the designated
-// constraints aren't met.
-type GetUsersForGroupResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetUsersForGroupResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetUsersForGroupResponseMultiError) AllErrors() []error { return m }
-
-// GetUsersForGroupResponseValidationError is the validation error returned by
-// GetUsersForGroupResponse.Validate if the designated constraints aren't met.
-type GetUsersForGroupResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetUsersForGroupResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetUsersForGroupResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetUsersForGroupResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetUsersForGroupResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetUsersForGroupResponseValidationError) ErrorName() string {
- return "GetUsersForGroupResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetUsersForGroupResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetUsersForGroupResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetUsersForGroupResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetUsersForGroupResponseValidationError{}
-
-// Validate checks the field values on User with the rules defined in the proto
-// definition for this message. If any rules are violated, the first error
-// encountered is returned, or nil if there are no violations.
-func (m *User) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on User with the rules defined in the
-// proto definition for this message. If any rules are violated, the result is
-// a list of violation errors wrapped in UserMultiError, or nil if none found.
-func (m *User) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *User) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Id
-
- // no validation rules for Name
-
- // no validation rules for Email
-
- if len(errors) > 0 {
- return UserMultiError(errors)
- }
-
- return nil
-}
-
-// UserMultiError is an error wrapping multiple validation errors returned by
-// User.ValidateAll() if the designated constraints aren't met.
-type UserMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m UserMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m UserMultiError) AllErrors() []error { return m }
-
-// UserValidationError is the validation error returned by User.Validate if the
-// designated constraints aren't met.
-type UserValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e UserValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e UserValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e UserValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e UserValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e UserValidationError) ErrorName() string { return "UserValidationError" }
-
-// Error satisfies the builtin error interface
-func (e UserValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sUser.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = UserValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = UserValidationError{}
-
-// Validate checks the field values on GetGroupsForUserRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetGroupsForUserRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetGroupsForUserRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetGroupsForUserRequestMultiError, or nil if none found.
-func (m *GetGroupsForUserRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetGroupsForUserRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for UserId
-
- if all {
- switch v := interface{}(m.GetAuthContext()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetGroupsForUserRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetGroupsForUserRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetAuthContext()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetGroupsForUserRequestValidationError{
- field: "AuthContext",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetGroupsForUserRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetGroupsForUserRequestMultiError is an error wrapping multiple validation
-// errors returned by GetGroupsForUserRequest.ValidateAll() if the designated
-// constraints aren't met.
-type GetGroupsForUserRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetGroupsForUserRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetGroupsForUserRequestMultiError) AllErrors() []error { return m }
-
-// GetGroupsForUserRequestValidationError is the validation error returned by
-// GetGroupsForUserRequest.Validate if the designated constraints aren't met.
-type GetGroupsForUserRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetGroupsForUserRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetGroupsForUserRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetGroupsForUserRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetGroupsForUserRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetGroupsForUserRequestValidationError) ErrorName() string {
- return "GetGroupsForUserRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetGroupsForUserRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetGroupsForUserRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetGroupsForUserRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetGroupsForUserRequestValidationError{}
-
-// Validate checks the field values on GetGroupsForUserResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetGroupsForUserResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetGroupsForUserResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetGroupsForUserResponseMultiError, or nil if none found.
-func (m *GetGroupsForUserResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetGroupsForUserResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- for idx, item := range m.GetGroups() {
- _, _ = idx, item
-
- if all {
- switch v := interface{}(item).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetGroupsForUserResponseValidationError{
- field: fmt.Sprintf("Groups[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetGroupsForUserResponseValidationError{
- field: fmt.Sprintf("Groups[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetGroupsForUserResponseValidationError{
- field: fmt.Sprintf("Groups[%v]", idx),
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- }
-
- if len(errors) > 0 {
- return GetGroupsForUserResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetGroupsForUserResponseMultiError is an error wrapping multiple validation
-// errors returned by GetGroupsForUserResponse.ValidateAll() if the designated
-// constraints aren't met.
-type GetGroupsForUserResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetGroupsForUserResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetGroupsForUserResponseMultiError) AllErrors() []error { return m }
-
-// GetGroupsForUserResponseValidationError is the validation error returned by
-// GetGroupsForUserResponse.Validate if the designated constraints aren't met.
-type GetGroupsForUserResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetGroupsForUserResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetGroupsForUserResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetGroupsForUserResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetGroupsForUserResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetGroupsForUserResponseValidationError) ErrorName() string {
- return "GetGroupsForUserResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetGroupsForUserResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetGroupsForUserResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetGroupsForUserResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetGroupsForUserResponseValidationError{}
-
-// Validate checks the field values on Group with the rules defined in the
-// proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *Group) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on Group with the rules defined in the
-// proto definition for this message. If any rules are violated, the result is
-// a list of violation errors wrapped in GroupMultiError, or nil if none found.
-func (m *Group) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *Group) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Id
-
- // no validation rules for Name
-
- if len(errors) > 0 {
- return GroupMultiError(errors)
- }
-
- return nil
-}
-
-// GroupMultiError is an error wrapping multiple validation errors returned by
-// Group.ValidateAll() if the designated constraints aren't met.
-type GroupMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GroupMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GroupMultiError) AllErrors() []error { return m }
-
-// GroupValidationError is the validation error returned by Group.Validate if
-// the designated constraints aren't met.
-type GroupValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GroupValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GroupValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GroupValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GroupValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GroupValidationError) ErrorName() string { return "GroupValidationError" }
-
-// Error satisfies the builtin error interface
-func (e GroupValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGroup.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GroupValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GroupValidationError{}
diff --git a/proto/plugin/identity_management/v1/identity_management.proto b/proto/plugin/identity_management/v1/identity_management.proto
index 1140035..81fd545 100644
--- a/proto/plugin/identity_management/v1/identity_management.proto
+++ b/proto/plugin/identity_management/v1/identity_management.proto
@@ -1,7 +1,10 @@
syntax = "proto3";
package plugin.identity_management.v1;
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/identity_management/v1;identity_managementv1";
+
service IdentityManagementService {
+ rpc GetUser(GetUserRequest) returns (GetUserResponse);
rpc GetGroup(GetGroupRequest) returns (GetGroupResponse);
rpc GetAllGroups(GetAllGroupsRequest) returns (GetAllGroupsResponse);
rpc GetUsersForGroup(GetUsersForGroupRequest) returns (GetUsersForGroupResponse);
@@ -12,6 +15,15 @@ message AuthContext {
map data = 1;
}
+message GetUserRequest {
+ string user_id = 1;
+ AuthContext auth_context = 99;
+}
+
+message GetUserResponse {
+ User user = 1;
+}
+
message GetGroupRequest {
string group_name = 1;
AuthContext auth_context = 99;
diff --git a/proto/plugin/identity_management/v1/identity_management_ext_plugin.pb.go b/proto/plugin/identity_management/v1/identity_management_ext_plugin.pb.go
index a047d65..f52395c 100644
--- a/proto/plugin/identity_management/v1/identity_management_ext_plugin.pb.go
+++ b/proto/plugin/identity_management/v1/identity_management_ext_plugin.pb.go
@@ -3,13 +3,12 @@
package identity_managementv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
- Type = "IdentityManagementService"
+ Type = "IdentityManagement"
GRPCServiceFullName = "plugin.identity_management.v1.IdentityManagementService"
)
diff --git a/proto/plugin/identity_management/v1/identity_management_grpc.pb.go b/proto/plugin/identity_management/v1/identity_management_grpc.pb.go
index 9adc1f9..f6da6c3 100644
--- a/proto/plugin/identity_management/v1/identity_management_grpc.pb.go
+++ b/proto/plugin/identity_management/v1/identity_management_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: plugin/identity_management/v1/identity_management.proto
package identity_managementv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
@@ -20,6 +19,7 @@ import (
const _ = grpc.SupportPackageIsVersion9
const (
+ IdentityManagementService_GetUser_FullMethodName = "/plugin.identity_management.v1.IdentityManagementService/GetUser"
IdentityManagementService_GetGroup_FullMethodName = "/plugin.identity_management.v1.IdentityManagementService/GetGroup"
IdentityManagementService_GetAllGroups_FullMethodName = "/plugin.identity_management.v1.IdentityManagementService/GetAllGroups"
IdentityManagementService_GetUsersForGroup_FullMethodName = "/plugin.identity_management.v1.IdentityManagementService/GetUsersForGroup"
@@ -30,6 +30,7 @@ const (
//
// 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 IdentityManagementServiceClient interface {
+ GetUser(ctx context.Context, in *GetUserRequest, opts ...grpc.CallOption) (*GetUserResponse, error)
GetGroup(ctx context.Context, in *GetGroupRequest, opts ...grpc.CallOption) (*GetGroupResponse, error)
GetAllGroups(ctx context.Context, in *GetAllGroupsRequest, opts ...grpc.CallOption) (*GetAllGroupsResponse, error)
GetUsersForGroup(ctx context.Context, in *GetUsersForGroupRequest, opts ...grpc.CallOption) (*GetUsersForGroupResponse, error)
@@ -44,6 +45,16 @@ func NewIdentityManagementServiceClient(cc grpc.ClientConnInterface) IdentityMan
return &identityManagementServiceClient{cc}
}
+func (c *identityManagementServiceClient) GetUser(ctx context.Context, in *GetUserRequest, opts ...grpc.CallOption) (*GetUserResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(GetUserResponse)
+ err := c.cc.Invoke(ctx, IdentityManagementService_GetUser_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *identityManagementServiceClient) GetGroup(ctx context.Context, in *GetGroupRequest, opts ...grpc.CallOption) (*GetGroupResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetGroupResponse)
@@ -88,6 +99,7 @@ func (c *identityManagementServiceClient) GetGroupsForUser(ctx context.Context,
// All implementations must embed UnimplementedIdentityManagementServiceServer
// for forward compatibility.
type IdentityManagementServiceServer interface {
+ GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error)
GetGroup(context.Context, *GetGroupRequest) (*GetGroupResponse, error)
GetAllGroups(context.Context, *GetAllGroupsRequest) (*GetAllGroupsResponse, error)
GetUsersForGroup(context.Context, *GetUsersForGroupRequest) (*GetUsersForGroupResponse, error)
@@ -102,6 +114,9 @@ type IdentityManagementServiceServer interface {
// pointer dereference when methods are called.
type UnimplementedIdentityManagementServiceServer struct{}
+func (UnimplementedIdentityManagementServiceServer) GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method GetUser not implemented")
+}
func (UnimplementedIdentityManagementServiceServer) GetGroup(context.Context, *GetGroupRequest) (*GetGroupResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetGroup not implemented")
}
@@ -136,6 +151,24 @@ func RegisterIdentityManagementServiceServer(s grpc.ServiceRegistrar, srv Identi
s.RegisterService(&IdentityManagementService_ServiceDesc, srv)
}
+func _IdentityManagementService_GetUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetUserRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IdentityManagementServiceServer).GetUser(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: IdentityManagementService_GetUser_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IdentityManagementServiceServer).GetUser(ctx, req.(*GetUserRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _IdentityManagementService_GetGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetGroupRequest)
if err := dec(in); err != nil {
@@ -215,6 +248,10 @@ var IdentityManagementService_ServiceDesc = grpc.ServiceDesc{
ServiceName: "plugin.identity_management.v1.IdentityManagementService",
HandlerType: (*IdentityManagementServiceServer)(nil),
Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetUser",
+ Handler: _IdentityManagementService_GetUser_Handler,
+ },
{
MethodName: "GetGroup",
Handler: _IdentityManagementService_GetGroup_Handler,
diff --git a/proto/plugin/key_material_storage/v1/key_material_storage.pb.go b/proto/plugin/key_material_storage/v1/key_material_storage.pb.go
new file mode 100644
index 0000000..3cf5438
--- /dev/null
+++ b/proto/plugin/key_material_storage/v1/key_material_storage.pb.go
@@ -0,0 +1,869 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc (unknown)
+// source: plugin/key_material_storage/v1/key_material_storage.proto
+
+package key_material_storagev1
+
+import (
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+
+ _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+)
+
+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)
+)
+
+// KeyMaterial represents a single unit of stored data.
+type KeyMaterial struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
+ Tags map[string]string `protobuf:"bytes,10,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *KeyMaterial) Reset() {
+ *x = KeyMaterial{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *KeyMaterial) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyMaterial) ProtoMessage() {}
+
+func (x *KeyMaterial) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyMaterial.ProtoReflect.Descriptor instead.
+func (*KeyMaterial) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *KeyMaterial) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *KeyMaterial) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *KeyMaterial) GetCreatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.CreatedAt
+ }
+ return nil
+}
+
+func (x *KeyMaterial) GetTags() map[string]string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+type Filter struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Id *Filter_StringMatch `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"`
+ // Filter by metadata tags (e.g., {"env": "prod"}).
+ // Match is typically performed as "contains all".
+ Tags map[string]string `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ CreatedAt *Filter_TimeRange `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3,oneof" json:"created_at,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Filter) Reset() {
+ *x = Filter{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Filter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Filter) ProtoMessage() {}
+
+func (x *Filter) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Filter.ProtoReflect.Descriptor instead.
+func (*Filter) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Filter) GetId() *Filter_StringMatch {
+ if x != nil {
+ return x.Id
+ }
+ return nil
+}
+
+func (x *Filter) GetTags() map[string]string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+func (x *Filter) GetCreatedAt() *Filter_TimeRange {
+ if x != nil {
+ return x.CreatedAt
+ }
+ return nil
+}
+
+type ListIDsRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+ Filter *Filter `protobuf:"bytes,2,opt,name=filter,proto3,oneof" json:"filter,omitempty"`
+ // Pagination support
+ PageSize uint32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
+ PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ListIDsRequest) Reset() {
+ *x = ListIDsRequest{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ListIDsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListIDsRequest) ProtoMessage() {}
+
+func (x *ListIDsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListIDsRequest.ProtoReflect.Descriptor instead.
+func (*ListIDsRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *ListIDsRequest) GetNamespace() string {
+ if x != nil {
+ return x.Namespace
+ }
+ return ""
+}
+
+func (x *ListIDsRequest) GetFilter() *Filter {
+ if x != nil {
+ return x.Filter
+ }
+ return nil
+}
+
+func (x *ListIDsRequest) GetPageSize() uint32 {
+ if x != nil {
+ return x.PageSize
+ }
+ return 0
+}
+
+func (x *ListIDsRequest) GetPageToken() string {
+ if x != nil {
+ return x.PageToken
+ }
+ return ""
+}
+
+type ListIDsResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"`
+ NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ListIDsResponse) Reset() {
+ *x = ListIDsResponse{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ListIDsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListIDsResponse) ProtoMessage() {}
+
+func (x *ListIDsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListIDsResponse.ProtoReflect.Descriptor instead.
+func (*ListIDsResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *ListIDsResponse) GetIds() []string {
+ if x != nil {
+ return x.Ids
+ }
+ return nil
+}
+
+func (x *ListIDsResponse) GetNextPageToken() string {
+ if x != nil {
+ return x.NextPageToken
+ }
+ return ""
+}
+
+type StoreRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+ KeyMaterial *KeyMaterial `protobuf:"bytes,2,opt,name=key_material,json=keyMaterial,proto3" json:"key_material,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StoreRequest) Reset() {
+ *x = StoreRequest{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[4]
+ 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_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[4]
+ if 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_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *StoreRequest) GetNamespace() string {
+ if x != nil {
+ return x.Namespace
+ }
+ return ""
+}
+
+func (x *StoreRequest) GetKeyMaterial() *KeyMaterial {
+ if x != nil {
+ return x.KeyMaterial
+ }
+ return nil
+}
+
+type StoreResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StoreResponse) Reset() {
+ *x = StoreResponse{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[5]
+ 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_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[5]
+ if 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_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{5}
+}
+
+type LoadRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+ Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LoadRequest) Reset() {
+ *x = LoadRequest{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LoadRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoadRequest) ProtoMessage() {}
+
+func (x *LoadRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LoadRequest.ProtoReflect.Descriptor instead.
+func (*LoadRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *LoadRequest) GetNamespace() string {
+ if x != nil {
+ return x.Namespace
+ }
+ return ""
+}
+
+func (x *LoadRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+type LoadResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ KeyMaterial *KeyMaterial `protobuf:"bytes,1,opt,name=key_material,json=keyMaterial,proto3" json:"key_material,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LoadResponse) Reset() {
+ *x = LoadResponse{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LoadResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LoadResponse) ProtoMessage() {}
+
+func (x *LoadResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[7]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LoadResponse.ProtoReflect.Descriptor instead.
+func (*LoadResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *LoadResponse) GetKeyMaterial() *KeyMaterial {
+ if x != nil {
+ return x.KeyMaterial
+ }
+ return nil
+}
+
+type DeleteRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+ Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeleteRequest) Reset() {
+ *x = DeleteRequest{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteRequest) ProtoMessage() {}
+
+func (x *DeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[8]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead.
+func (*DeleteRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *DeleteRequest) GetNamespace() string {
+ if x != nil {
+ return x.Namespace
+ }
+ return ""
+}
+
+func (x *DeleteRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+type DeleteResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeleteResponse) Reset() {
+ *x = DeleteResponse{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteResponse) ProtoMessage() {}
+
+func (x *DeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[9]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteResponse.ProtoReflect.Descriptor instead.
+func (*DeleteResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{9}
+}
+
+// Pattern-based matching for the primary Key ID.
+type Filter_StringMatch struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Type:
+ //
+ // *Filter_StringMatch_Prefix
+ // *Filter_StringMatch_Suffix
+ // *Filter_StringMatch_Contains
+ // *Filter_StringMatch_Exact
+ Type isFilter_StringMatch_Type `protobuf_oneof:"type"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Filter_StringMatch) Reset() {
+ *x = Filter_StringMatch{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Filter_StringMatch) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Filter_StringMatch) ProtoMessage() {}
+
+func (x *Filter_StringMatch) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[11]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Filter_StringMatch.ProtoReflect.Descriptor instead.
+func (*Filter_StringMatch) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{1, 0}
+}
+
+func (x *Filter_StringMatch) GetType() isFilter_StringMatch_Type {
+ if x != nil {
+ return x.Type
+ }
+ return nil
+}
+
+func (x *Filter_StringMatch) GetPrefix() string {
+ if x != nil {
+ if x, ok := x.Type.(*Filter_StringMatch_Prefix); ok {
+ return x.Prefix
+ }
+ }
+ return ""
+}
+
+func (x *Filter_StringMatch) GetSuffix() string {
+ if x != nil {
+ if x, ok := x.Type.(*Filter_StringMatch_Suffix); ok {
+ return x.Suffix
+ }
+ }
+ return ""
+}
+
+func (x *Filter_StringMatch) GetContains() string {
+ if x != nil {
+ if x, ok := x.Type.(*Filter_StringMatch_Contains); ok {
+ return x.Contains
+ }
+ }
+ return ""
+}
+
+func (x *Filter_StringMatch) GetExact() string {
+ if x != nil {
+ if x, ok := x.Type.(*Filter_StringMatch_Exact); ok {
+ return x.Exact
+ }
+ }
+ return ""
+}
+
+type isFilter_StringMatch_Type interface {
+ isFilter_StringMatch_Type()
+}
+
+type Filter_StringMatch_Prefix struct {
+ Prefix string `protobuf:"bytes,1,opt,name=prefix,proto3,oneof"`
+}
+
+type Filter_StringMatch_Suffix struct {
+ Suffix string `protobuf:"bytes,2,opt,name=suffix,proto3,oneof"`
+}
+
+type Filter_StringMatch_Contains struct {
+ Contains string `protobuf:"bytes,3,opt,name=contains,proto3,oneof"`
+}
+
+type Filter_StringMatch_Exact struct {
+ Exact string `protobuf:"bytes,4,opt,name=exact,proto3,oneof"`
+}
+
+func (*Filter_StringMatch_Prefix) isFilter_StringMatch_Type() {}
+
+func (*Filter_StringMatch_Suffix) isFilter_StringMatch_Type() {}
+
+func (*Filter_StringMatch_Contains) isFilter_StringMatch_Type() {}
+
+func (*Filter_StringMatch_Exact) isFilter_StringMatch_Type() {}
+
+// Filter by the time the key was created.
+type Filter_TimeRange struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ From *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"`
+ To *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=to,proto3" json:"to,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Filter_TimeRange) Reset() {
+ *x = Filter_TimeRange{}
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Filter_TimeRange) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Filter_TimeRange) ProtoMessage() {}
+
+func (x *Filter_TimeRange) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[13]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Filter_TimeRange.ProtoReflect.Descriptor instead.
+func (*Filter_TimeRange) Descriptor() ([]byte, []int) {
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP(), []int{1, 2}
+}
+
+func (x *Filter_TimeRange) GetFrom() *timestamppb.Timestamp {
+ if x != nil {
+ return x.From
+ }
+ return nil
+}
+
+func (x *Filter_TimeRange) GetTo() *timestamppb.Timestamp {
+ if x != nil {
+ return x.To
+ }
+ return nil
+}
+
+var File_plugin_key_material_storage_v1_key_material_storage_proto protoreflect.FileDescriptor
+
+const file_plugin_key_material_storage_v1_key_material_storage_proto_rawDesc = "" +
+ "\n" +
+ "9plugin/key_material_storage/v1/key_material_storage.proto\x12&krypton.plugin.key_material_storage.v1\x1a\x1bbuf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x8a\x02\n" +
+ "\vKeyMaterial\x12\x17\n" +
+ "\x02id\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x02id\x12\x1b\n" +
+ "\x04data\x18\x02 \x01(\fB\a\xbaH\x04z\x02\x10\x01R\x04data\x129\n" +
+ "\n" +
+ "created_at\x18\t \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x12Q\n" +
+ "\x04tags\x18\n" +
+ " \x03(\v2=.krypton.plugin.key_material_storage.v1.KeyMaterial.TagsEntryR\x04tags\x1a7\n" +
+ "\tTagsEntry\x12\x10\n" +
+ "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
+ "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xbe\x04\n" +
+ "\x06Filter\x12O\n" +
+ "\x02id\x18\x01 \x01(\v2:.krypton.plugin.key_material_storage.v1.Filter.StringMatchH\x00R\x02id\x88\x01\x01\x12L\n" +
+ "\x04tags\x18\x02 \x03(\v28.krypton.plugin.key_material_storage.v1.Filter.TagsEntryR\x04tags\x12\\\n" +
+ "\n" +
+ "created_at\x18\x04 \x01(\v28.krypton.plugin.key_material_storage.v1.Filter.TimeRangeH\x01R\tcreatedAt\x88\x01\x01\x1a\x7f\n" +
+ "\vStringMatch\x12\x18\n" +
+ "\x06prefix\x18\x01 \x01(\tH\x00R\x06prefix\x12\x18\n" +
+ "\x06suffix\x18\x02 \x01(\tH\x00R\x06suffix\x12\x1c\n" +
+ "\bcontains\x18\x03 \x01(\tH\x00R\bcontains\x12\x16\n" +
+ "\x05exact\x18\x04 \x01(\tH\x00R\x05exactB\x06\n" +
+ "\x04type\x1a7\n" +
+ "\tTagsEntry\x12\x10\n" +
+ "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
+ "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1ag\n" +
+ "\tTimeRange\x12.\n" +
+ "\x04from\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\x04from\x12*\n" +
+ "\x02to\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x02toB\x05\n" +
+ "\x03_idB\r\n" +
+ "\v_created_at\"\xcb\x01\n" +
+ "\x0eListIDsRequest\x12%\n" +
+ "\tnamespace\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\tnamespace\x12K\n" +
+ "\x06filter\x18\x02 \x01(\v2..krypton.plugin.key_material_storage.v1.FilterH\x00R\x06filter\x88\x01\x01\x12\x1b\n" +
+ "\tpage_size\x18\x03 \x01(\rR\bpageSize\x12\x1d\n" +
+ "\n" +
+ "page_token\x18\x04 \x01(\tR\tpageTokenB\t\n" +
+ "\a_filter\"K\n" +
+ "\x0fListIDsResponse\x12\x10\n" +
+ "\x03ids\x18\x01 \x03(\tR\x03ids\x12&\n" +
+ "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\x95\x01\n" +
+ "\fStoreRequest\x12%\n" +
+ "\tnamespace\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\tnamespace\x12^\n" +
+ "\fkey_material\x18\x02 \x01(\v23.krypton.plugin.key_material_storage.v1.KeyMaterialB\x06\xbaH\x03\xc8\x01\x01R\vkeyMaterial\"\x0f\n" +
+ "\rStoreResponse\"M\n" +
+ "\vLoadRequest\x12%\n" +
+ "\tnamespace\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\tnamespace\x12\x17\n" +
+ "\x02id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x02id\"f\n" +
+ "\fLoadResponse\x12V\n" +
+ "\fkey_material\x18\x01 \x01(\v23.krypton.plugin.key_material_storage.v1.KeyMaterialR\vkeyMaterial\"O\n" +
+ "\rDeleteRequest\x12%\n" +
+ "\tnamespace\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\tnamespace\x12\x17\n" +
+ "\x02id\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x02id\"\x10\n" +
+ "\x0eDeleteResponse2\xf4\x03\n" +
+ "\x12KeyMaterialStorage\x12t\n" +
+ "\x05Store\x124.krypton.plugin.key_material_storage.v1.StoreRequest\x1a5.krypton.plugin.key_material_storage.v1.StoreResponse\x12q\n" +
+ "\x04Load\x123.krypton.plugin.key_material_storage.v1.LoadRequest\x1a4.krypton.plugin.key_material_storage.v1.LoadResponse\x12w\n" +
+ "\x06Delete\x125.krypton.plugin.key_material_storage.v1.DeleteRequest\x1a6.krypton.plugin.key_material_storage.v1.DeleteResponse\x12|\n" +
+ "\aListIDs\x126.krypton.plugin.key_material_storage.v1.ListIDsRequest\x1a7.krypton.plugin.key_material_storage.v1.ListIDsResponse0\x01B\xd3\x02\n" +
+ "*com.krypton.plugin.key_material_storage.v1B\x17KeyMaterialStorageProtoP\x01ZYgithub.com/openkcm/plugin-sdk/proto/plugin/key_material_storage/v1;key_material_storagev1\xa2\x02\x03KPK\xaa\x02$Krypton.Plugin.KeyMaterialStorage.V1\xca\x02$Krypton\\Plugin\\KeyMaterialStorage\\V1\xe2\x020Krypton\\Plugin\\KeyMaterialStorage\\V1\\GPBMetadata\xea\x02'Krypton::Plugin::KeyMaterialStorage::V1b\x06proto3"
+
+var (
+ file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescOnce sync.Once
+ file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescData []byte
+)
+
+func file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescGZIP() []byte {
+ file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescOnce.Do(func() {
+ file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_plugin_key_material_storage_v1_key_material_storage_proto_rawDesc), len(file_plugin_key_material_storage_v1_key_material_storage_proto_rawDesc)))
+ })
+ return file_plugin_key_material_storage_v1_key_material_storage_proto_rawDescData
+}
+
+var file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
+var file_plugin_key_material_storage_v1_key_material_storage_proto_goTypes = []any{
+ (*KeyMaterial)(nil), // 0: krypton.plugin.key_material_storage.v1.KeyMaterial
+ (*Filter)(nil), // 1: krypton.plugin.key_material_storage.v1.Filter
+ (*ListIDsRequest)(nil), // 2: krypton.plugin.key_material_storage.v1.ListIDsRequest
+ (*ListIDsResponse)(nil), // 3: krypton.plugin.key_material_storage.v1.ListIDsResponse
+ (*StoreRequest)(nil), // 4: krypton.plugin.key_material_storage.v1.StoreRequest
+ (*StoreResponse)(nil), // 5: krypton.plugin.key_material_storage.v1.StoreResponse
+ (*LoadRequest)(nil), // 6: krypton.plugin.key_material_storage.v1.LoadRequest
+ (*LoadResponse)(nil), // 7: krypton.plugin.key_material_storage.v1.LoadResponse
+ (*DeleteRequest)(nil), // 8: krypton.plugin.key_material_storage.v1.DeleteRequest
+ (*DeleteResponse)(nil), // 9: krypton.plugin.key_material_storage.v1.DeleteResponse
+ nil, // 10: krypton.plugin.key_material_storage.v1.KeyMaterial.TagsEntry
+ (*Filter_StringMatch)(nil), // 11: krypton.plugin.key_material_storage.v1.Filter.StringMatch
+ nil, // 12: krypton.plugin.key_material_storage.v1.Filter.TagsEntry
+ (*Filter_TimeRange)(nil), // 13: krypton.plugin.key_material_storage.v1.Filter.TimeRange
+ (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp
+}
+var file_plugin_key_material_storage_v1_key_material_storage_proto_depIdxs = []int32{
+ 14, // 0: krypton.plugin.key_material_storage.v1.KeyMaterial.created_at:type_name -> google.protobuf.Timestamp
+ 10, // 1: krypton.plugin.key_material_storage.v1.KeyMaterial.tags:type_name -> krypton.plugin.key_material_storage.v1.KeyMaterial.TagsEntry
+ 11, // 2: krypton.plugin.key_material_storage.v1.Filter.id:type_name -> krypton.plugin.key_material_storage.v1.Filter.StringMatch
+ 12, // 3: krypton.plugin.key_material_storage.v1.Filter.tags:type_name -> krypton.plugin.key_material_storage.v1.Filter.TagsEntry
+ 13, // 4: krypton.plugin.key_material_storage.v1.Filter.created_at:type_name -> krypton.plugin.key_material_storage.v1.Filter.TimeRange
+ 1, // 5: krypton.plugin.key_material_storage.v1.ListIDsRequest.filter:type_name -> krypton.plugin.key_material_storage.v1.Filter
+ 0, // 6: krypton.plugin.key_material_storage.v1.StoreRequest.key_material:type_name -> krypton.plugin.key_material_storage.v1.KeyMaterial
+ 0, // 7: krypton.plugin.key_material_storage.v1.LoadResponse.key_material:type_name -> krypton.plugin.key_material_storage.v1.KeyMaterial
+ 14, // 8: krypton.plugin.key_material_storage.v1.Filter.TimeRange.from:type_name -> google.protobuf.Timestamp
+ 14, // 9: krypton.plugin.key_material_storage.v1.Filter.TimeRange.to:type_name -> google.protobuf.Timestamp
+ 4, // 10: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.Store:input_type -> krypton.plugin.key_material_storage.v1.StoreRequest
+ 6, // 11: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.Load:input_type -> krypton.plugin.key_material_storage.v1.LoadRequest
+ 8, // 12: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.Delete:input_type -> krypton.plugin.key_material_storage.v1.DeleteRequest
+ 2, // 13: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.ListIDs:input_type -> krypton.plugin.key_material_storage.v1.ListIDsRequest
+ 5, // 14: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.Store:output_type -> krypton.plugin.key_material_storage.v1.StoreResponse
+ 7, // 15: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.Load:output_type -> krypton.plugin.key_material_storage.v1.LoadResponse
+ 9, // 16: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.Delete:output_type -> krypton.plugin.key_material_storage.v1.DeleteResponse
+ 3, // 17: krypton.plugin.key_material_storage.v1.KeyMaterialStorage.ListIDs:output_type -> krypton.plugin.key_material_storage.v1.ListIDsResponse
+ 14, // [14:18] is the sub-list for method output_type
+ 10, // [10:14] is the sub-list for method input_type
+ 10, // [10:10] is the sub-list for extension type_name
+ 10, // [10:10] is the sub-list for extension extendee
+ 0, // [0:10] is the sub-list for field type_name
+}
+
+func init() { file_plugin_key_material_storage_v1_key_material_storage_proto_init() }
+func file_plugin_key_material_storage_v1_key_material_storage_proto_init() {
+ if File_plugin_key_material_storage_v1_key_material_storage_proto != nil {
+ return
+ }
+ file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[1].OneofWrappers = []any{}
+ file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[2].OneofWrappers = []any{}
+ file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes[11].OneofWrappers = []any{
+ (*Filter_StringMatch_Prefix)(nil),
+ (*Filter_StringMatch_Suffix)(nil),
+ (*Filter_StringMatch_Contains)(nil),
+ (*Filter_StringMatch_Exact)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_plugin_key_material_storage_v1_key_material_storage_proto_rawDesc), len(file_plugin_key_material_storage_v1_key_material_storage_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 14,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_plugin_key_material_storage_v1_key_material_storage_proto_goTypes,
+ DependencyIndexes: file_plugin_key_material_storage_v1_key_material_storage_proto_depIdxs,
+ MessageInfos: file_plugin_key_material_storage_v1_key_material_storage_proto_msgTypes,
+ }.Build()
+ File_plugin_key_material_storage_v1_key_material_storage_proto = out.File
+ file_plugin_key_material_storage_v1_key_material_storage_proto_goTypes = nil
+ file_plugin_key_material_storage_v1_key_material_storage_proto_depIdxs = nil
+}
diff --git a/proto/plugin/key_material_storage/v1/key_material_storage.pb.validate.go b/proto/plugin/key_material_storage/v1/key_material_storage.pb.validate.go
new file mode 100644
index 0000000..ae5a989
--- /dev/null
+++ b/proto/plugin/key_material_storage/v1/key_material_storage.pb.validate.go
@@ -0,0 +1,1555 @@
+// Code generated by protoc-gen-validate. DO NOT EDIT.
+// source: plugin/key_material_storage/v1/key_material_storage.proto
+
+package key_material_storagev1
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "net"
+ "net/mail"
+ "net/url"
+ "regexp"
+ "sort"
+ "strings"
+ "time"
+ "unicode/utf8"
+
+ "google.golang.org/protobuf/types/known/anypb"
+)
+
+// ensure the imports are used
+var (
+ _ = bytes.MinRead
+ _ = errors.New("")
+ _ = fmt.Print
+ _ = utf8.UTFMax
+ _ = (*regexp.Regexp)(nil)
+ _ = (*strings.Reader)(nil)
+ _ = net.IPv4len
+ _ = time.Duration(0)
+ _ = (*url.URL)(nil)
+ _ = (*mail.Address)(nil)
+ _ = anypb.Any{}
+ _ = sort.Sort
+)
+
+// Validate checks the field values on KeyMaterial with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *KeyMaterial) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on KeyMaterial with the rules defined in
+// the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in KeyMaterialMultiError, or
+// nil if none found.
+func (m *KeyMaterial) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *KeyMaterial) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Id
+
+ // no validation rules for Data
+
+ if all {
+ switch v := interface{}(m.GetCreatedAt()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, KeyMaterialValidationError{
+ field: "CreatedAt",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, KeyMaterialValidationError{
+ field: "CreatedAt",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return KeyMaterialValidationError{
+ field: "CreatedAt",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ // no validation rules for Tags
+
+ if len(errors) > 0 {
+ return KeyMaterialMultiError(errors)
+ }
+
+ return nil
+}
+
+// KeyMaterialMultiError is an error wrapping multiple validation errors
+// returned by KeyMaterial.ValidateAll() if the designated constraints aren't met.
+type KeyMaterialMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m KeyMaterialMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m KeyMaterialMultiError) AllErrors() []error { return m }
+
+// KeyMaterialValidationError is the validation error returned by
+// KeyMaterial.Validate if the designated constraints aren't met.
+type KeyMaterialValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e KeyMaterialValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e KeyMaterialValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e KeyMaterialValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e KeyMaterialValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e KeyMaterialValidationError) ErrorName() string { return "KeyMaterialValidationError" }
+
+// Error satisfies the builtin error interface
+func (e KeyMaterialValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sKeyMaterial.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = KeyMaterialValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = KeyMaterialValidationError{}
+
+// Validate checks the field values on Filter with the rules defined in the
+// proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *Filter) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on Filter with the rules defined in the
+// proto definition for this message. If any rules are violated, the result is
+// a list of violation errors wrapped in FilterMultiError, or nil if none found.
+func (m *Filter) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *Filter) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Tags
+
+ if m.Id != nil {
+
+ if all {
+ switch v := interface{}(m.GetId()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, FilterValidationError{
+ field: "Id",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, FilterValidationError{
+ field: "Id",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetId()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return FilterValidationError{
+ field: "Id",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ }
+
+ if m.CreatedAt != nil {
+
+ if all {
+ switch v := interface{}(m.GetCreatedAt()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, FilterValidationError{
+ field: "CreatedAt",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, FilterValidationError{
+ field: "CreatedAt",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetCreatedAt()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return FilterValidationError{
+ field: "CreatedAt",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ }
+
+ if len(errors) > 0 {
+ return FilterMultiError(errors)
+ }
+
+ return nil
+}
+
+// FilterMultiError is an error wrapping multiple validation errors returned by
+// Filter.ValidateAll() if the designated constraints aren't met.
+type FilterMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m FilterMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m FilterMultiError) AllErrors() []error { return m }
+
+// FilterValidationError is the validation error returned by Filter.Validate if
+// the designated constraints aren't met.
+type FilterValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e FilterValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e FilterValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e FilterValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e FilterValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e FilterValidationError) ErrorName() string { return "FilterValidationError" }
+
+// Error satisfies the builtin error interface
+func (e FilterValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sFilter.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = FilterValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = FilterValidationError{}
+
+// Validate checks the field values on ListIDsRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *ListIDsRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on ListIDsRequest with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in ListIDsRequestMultiError,
+// or nil if none found.
+func (m *ListIDsRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *ListIDsRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Namespace
+
+ // no validation rules for PageSize
+
+ // no validation rules for PageToken
+
+ if m.Filter != nil {
+
+ if all {
+ switch v := interface{}(m.GetFilter()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, ListIDsRequestValidationError{
+ field: "Filter",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, ListIDsRequestValidationError{
+ field: "Filter",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetFilter()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return ListIDsRequestValidationError{
+ field: "Filter",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ }
+
+ if len(errors) > 0 {
+ return ListIDsRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// ListIDsRequestMultiError is an error wrapping multiple validation errors
+// returned by ListIDsRequest.ValidateAll() if the designated constraints
+// aren't met.
+type ListIDsRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m ListIDsRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m ListIDsRequestMultiError) AllErrors() []error { return m }
+
+// ListIDsRequestValidationError is the validation error returned by
+// ListIDsRequest.Validate if the designated constraints aren't met.
+type ListIDsRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e ListIDsRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e ListIDsRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e ListIDsRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e ListIDsRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e ListIDsRequestValidationError) ErrorName() string { return "ListIDsRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e ListIDsRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sListIDsRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = ListIDsRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = ListIDsRequestValidationError{}
+
+// Validate checks the field values on ListIDsResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// first error encountered is returned, or nil if there are no violations.
+func (m *ListIDsResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on ListIDsResponse with the rules
+// defined in the proto definition for this message. If any rules are
+// violated, the result is a list of violation errors wrapped in
+// ListIDsResponseMultiError, or nil if none found.
+func (m *ListIDsResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *ListIDsResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for NextPageToken
+
+ if len(errors) > 0 {
+ return ListIDsResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// ListIDsResponseMultiError is an error wrapping multiple validation errors
+// returned by ListIDsResponse.ValidateAll() if the designated constraints
+// aren't met.
+type ListIDsResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m ListIDsResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m ListIDsResponseMultiError) AllErrors() []error { return m }
+
+// ListIDsResponseValidationError is the validation error returned by
+// ListIDsResponse.Validate if the designated constraints aren't met.
+type ListIDsResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e ListIDsResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e ListIDsResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e ListIDsResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e ListIDsResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e ListIDsResponseValidationError) ErrorName() string { return "ListIDsResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e ListIDsResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sListIDsResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = ListIDsResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = ListIDsResponseValidationError{}
+
+// Validate checks the field values on StoreRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *StoreRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on StoreRequest with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in StoreRequestMultiError, or
+// nil if none found.
+func (m *StoreRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *StoreRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Namespace
+
+ if all {
+ switch v := interface{}(m.GetKeyMaterial()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, StoreRequestValidationError{
+ field: "KeyMaterial",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, StoreRequestValidationError{
+ field: "KeyMaterial",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetKeyMaterial()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return StoreRequestValidationError{
+ field: "KeyMaterial",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ if len(errors) > 0 {
+ return StoreRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// StoreRequestMultiError is an error wrapping multiple validation errors
+// returned by StoreRequest.ValidateAll() if the designated constraints aren't met.
+type StoreRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m StoreRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m StoreRequestMultiError) AllErrors() []error { return m }
+
+// StoreRequestValidationError is the validation error returned by
+// StoreRequest.Validate if the designated constraints aren't met.
+type StoreRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e StoreRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e StoreRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e StoreRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e StoreRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e StoreRequestValidationError) ErrorName() string { return "StoreRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e StoreRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sStoreRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = StoreRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = StoreRequestValidationError{}
+
+// Validate checks the field values on StoreResponse with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *StoreResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on StoreResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in StoreResponseMultiError, or
+// nil if none found.
+func (m *StoreResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *StoreResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if len(errors) > 0 {
+ return StoreResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// StoreResponseMultiError is an error wrapping multiple validation errors
+// returned by StoreResponse.ValidateAll() if the designated constraints
+// aren't met.
+type StoreResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m StoreResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m StoreResponseMultiError) AllErrors() []error { return m }
+
+// StoreResponseValidationError is the validation error returned by
+// StoreResponse.Validate if the designated constraints aren't met.
+type StoreResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e StoreResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e StoreResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e StoreResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e StoreResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e StoreResponseValidationError) ErrorName() string { return "StoreResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e StoreResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sStoreResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = StoreResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = StoreResponseValidationError{}
+
+// Validate checks the field values on LoadRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *LoadRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on LoadRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in LoadRequestMultiError, or
+// nil if none found.
+func (m *LoadRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *LoadRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Namespace
+
+ // no validation rules for Id
+
+ if len(errors) > 0 {
+ return LoadRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// LoadRequestMultiError is an error wrapping multiple validation errors
+// returned by LoadRequest.ValidateAll() if the designated constraints aren't met.
+type LoadRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m LoadRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m LoadRequestMultiError) AllErrors() []error { return m }
+
+// LoadRequestValidationError is the validation error returned by
+// LoadRequest.Validate if the designated constraints aren't met.
+type LoadRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e LoadRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e LoadRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e LoadRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e LoadRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e LoadRequestValidationError) ErrorName() string { return "LoadRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e LoadRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sLoadRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = LoadRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = LoadRequestValidationError{}
+
+// Validate checks the field values on LoadResponse with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *LoadResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on LoadResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in LoadResponseMultiError, or
+// nil if none found.
+func (m *LoadResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *LoadResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if all {
+ switch v := interface{}(m.GetKeyMaterial()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, LoadResponseValidationError{
+ field: "KeyMaterial",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, LoadResponseValidationError{
+ field: "KeyMaterial",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetKeyMaterial()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return LoadResponseValidationError{
+ field: "KeyMaterial",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ if len(errors) > 0 {
+ return LoadResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// LoadResponseMultiError is an error wrapping multiple validation errors
+// returned by LoadResponse.ValidateAll() if the designated constraints aren't met.
+type LoadResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m LoadResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m LoadResponseMultiError) AllErrors() []error { return m }
+
+// LoadResponseValidationError is the validation error returned by
+// LoadResponse.Validate if the designated constraints aren't met.
+type LoadResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e LoadResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e LoadResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e LoadResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e LoadResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e LoadResponseValidationError) ErrorName() string { return "LoadResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e LoadResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sLoadResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = LoadResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = LoadResponseValidationError{}
+
+// Validate checks the field values on DeleteRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *DeleteRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on DeleteRequest with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in DeleteRequestMultiError, or
+// nil if none found.
+func (m *DeleteRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *DeleteRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Namespace
+
+ // no validation rules for Id
+
+ if len(errors) > 0 {
+ return DeleteRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// DeleteRequestMultiError is an error wrapping multiple validation errors
+// returned by DeleteRequest.ValidateAll() if the designated constraints
+// aren't met.
+type DeleteRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m DeleteRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m DeleteRequestMultiError) AllErrors() []error { return m }
+
+// DeleteRequestValidationError is the validation error returned by
+// DeleteRequest.Validate if the designated constraints aren't met.
+type DeleteRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e DeleteRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e DeleteRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e DeleteRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e DeleteRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e DeleteRequestValidationError) ErrorName() string { return "DeleteRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e DeleteRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sDeleteRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = DeleteRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = DeleteRequestValidationError{}
+
+// Validate checks the field values on DeleteResponse with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *DeleteResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on DeleteResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in DeleteResponseMultiError,
+// or nil if none found.
+func (m *DeleteResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *DeleteResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if len(errors) > 0 {
+ return DeleteResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// DeleteResponseMultiError is an error wrapping multiple validation errors
+// returned by DeleteResponse.ValidateAll() if the designated constraints
+// aren't met.
+type DeleteResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m DeleteResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m DeleteResponseMultiError) AllErrors() []error { return m }
+
+// DeleteResponseValidationError is the validation error returned by
+// DeleteResponse.Validate if the designated constraints aren't met.
+type DeleteResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e DeleteResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e DeleteResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e DeleteResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e DeleteResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e DeleteResponseValidationError) ErrorName() string { return "DeleteResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e DeleteResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sDeleteResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = DeleteResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = DeleteResponseValidationError{}
+
+// Validate checks the field values on Filter_StringMatch with the rules
+// defined in the proto definition for this message. If any rules are
+// violated, the first error encountered is returned, or nil if there are no violations.
+func (m *Filter_StringMatch) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on Filter_StringMatch with the rules
+// defined in the proto definition for this message. If any rules are
+// violated, the result is a list of violation errors wrapped in
+// Filter_StringMatchMultiError, or nil if none found.
+func (m *Filter_StringMatch) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *Filter_StringMatch) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ switch v := m.Type.(type) {
+ case *Filter_StringMatch_Prefix:
+ if v == nil {
+ err := Filter_StringMatchValidationError{
+ field: "Type",
+ reason: "oneof value cannot be a typed-nil",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+ // no validation rules for Prefix
+ case *Filter_StringMatch_Suffix:
+ if v == nil {
+ err := Filter_StringMatchValidationError{
+ field: "Type",
+ reason: "oneof value cannot be a typed-nil",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+ // no validation rules for Suffix
+ case *Filter_StringMatch_Contains:
+ if v == nil {
+ err := Filter_StringMatchValidationError{
+ field: "Type",
+ reason: "oneof value cannot be a typed-nil",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+ // no validation rules for Contains
+ case *Filter_StringMatch_Exact:
+ if v == nil {
+ err := Filter_StringMatchValidationError{
+ field: "Type",
+ reason: "oneof value cannot be a typed-nil",
+ }
+ if !all {
+ return err
+ }
+ errors = append(errors, err)
+ }
+ // no validation rules for Exact
+ default:
+ _ = v // ensures v is used
+ }
+
+ if len(errors) > 0 {
+ return Filter_StringMatchMultiError(errors)
+ }
+
+ return nil
+}
+
+// Filter_StringMatchMultiError is an error wrapping multiple validation errors
+// returned by Filter_StringMatch.ValidateAll() if the designated constraints
+// aren't met.
+type Filter_StringMatchMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m Filter_StringMatchMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m Filter_StringMatchMultiError) AllErrors() []error { return m }
+
+// Filter_StringMatchValidationError is the validation error returned by
+// Filter_StringMatch.Validate if the designated constraints aren't met.
+type Filter_StringMatchValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e Filter_StringMatchValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e Filter_StringMatchValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e Filter_StringMatchValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e Filter_StringMatchValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e Filter_StringMatchValidationError) ErrorName() string {
+ return "Filter_StringMatchValidationError"
+}
+
+// Error satisfies the builtin error interface
+func (e Filter_StringMatchValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sFilter_StringMatch.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = Filter_StringMatchValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = Filter_StringMatchValidationError{}
+
+// Validate checks the field values on Filter_TimeRange with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// first error encountered is returned, or nil if there are no violations.
+func (m *Filter_TimeRange) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on Filter_TimeRange with the rules
+// defined in the proto definition for this message. If any rules are
+// violated, the result is a list of violation errors wrapped in
+// Filter_TimeRangeMultiError, or nil if none found.
+func (m *Filter_TimeRange) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *Filter_TimeRange) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ if all {
+ switch v := interface{}(m.GetFrom()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, Filter_TimeRangeValidationError{
+ field: "From",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, Filter_TimeRangeValidationError{
+ field: "From",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetFrom()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return Filter_TimeRangeValidationError{
+ field: "From",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ if all {
+ switch v := interface{}(m.GetTo()).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, Filter_TimeRangeValidationError{
+ field: "To",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, Filter_TimeRangeValidationError{
+ field: "To",
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(m.GetTo()).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return Filter_TimeRangeValidationError{
+ field: "To",
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ if len(errors) > 0 {
+ return Filter_TimeRangeMultiError(errors)
+ }
+
+ return nil
+}
+
+// Filter_TimeRangeMultiError is an error wrapping multiple validation errors
+// returned by Filter_TimeRange.ValidateAll() if the designated constraints
+// aren't met.
+type Filter_TimeRangeMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m Filter_TimeRangeMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m Filter_TimeRangeMultiError) AllErrors() []error { return m }
+
+// Filter_TimeRangeValidationError is the validation error returned by
+// Filter_TimeRange.Validate if the designated constraints aren't met.
+type Filter_TimeRangeValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e Filter_TimeRangeValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e Filter_TimeRangeValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e Filter_TimeRangeValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e Filter_TimeRangeValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e Filter_TimeRangeValidationError) ErrorName() string { return "Filter_TimeRangeValidationError" }
+
+// Error satisfies the builtin error interface
+func (e Filter_TimeRangeValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sFilter_TimeRange.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = Filter_TimeRangeValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = Filter_TimeRangeValidationError{}
diff --git a/proto/plugin/key_material_storage/v1/key_material_storage.proto b/proto/plugin/key_material_storage/v1/key_material_storage.proto
new file mode 100644
index 0000000..23d353d
--- /dev/null
+++ b/proto/plugin/key_material_storage/v1/key_material_storage.proto
@@ -0,0 +1,91 @@
+syntax = "proto3";
+
+package krypton.plugin.key_material_storage.v1;
+
+import "buf/validate/validate.proto";
+import "google/protobuf/timestamp.proto";
+
+// KeyMaterialStorage defines the universal interface for persisting and
+// retrieving opaque blobs of data, typically wrapped key material.
+service KeyMaterialStorage {
+ rpc Store(StoreRequest) returns (StoreResponse);
+ rpc Load(LoadRequest) returns (LoadResponse);
+ rpc Delete(DeleteRequest) returns (DeleteResponse);
+
+ // ListIDs returns batches of IDs matching the criteria.
+ rpc ListIDs(ListIDsRequest) returns (stream ListIDsResponse);
+}
+
+// KeyMaterial represents a single unit of stored data.
+message KeyMaterial {
+ string id = 1 [(buf.validate.field).string.min_len = 1];
+ bytes data = 2 [(buf.validate.field).bytes.min_len = 1];
+
+ google.protobuf.Timestamp created_at = 9;
+ map tags = 10;
+}
+
+// --- Filter Refactor ---
+
+message Filter {
+ // Pattern-based matching for the primary Key ID.
+ message StringMatch {
+ oneof type {
+ string prefix = 1;
+ string suffix = 2;
+ string contains = 3;
+ string exact = 4;
+ }
+ }
+ optional StringMatch id = 1;
+
+ // Filter by metadata tags (e.g., {"env": "prod"}).
+ // Match is typically performed as "contains all".
+ map tags = 2;
+
+ // Filter by the time the key was created.
+ message TimeRange {
+ google.protobuf.Timestamp from = 1;
+ google.protobuf.Timestamp to = 2;
+ }
+ optional TimeRange created_at = 4;
+}
+
+// --- RPC Messages ---
+
+message ListIDsRequest {
+ string namespace = 1 [(buf.validate.field).string.min_len = 1];
+ optional Filter filter = 2;
+
+ // Pagination support
+ uint32 page_size = 3;
+ string page_token = 4;
+}
+
+message ListIDsResponse {
+ repeated string ids = 1;
+ string next_page_token = 2;
+}
+
+message StoreRequest {
+ string namespace = 1 [(buf.validate.field).string.min_len = 1];
+ KeyMaterial key_material = 2 [(buf.validate.field).required = true];
+}
+
+message StoreResponse {}
+
+message LoadRequest {
+ string namespace = 1 [(buf.validate.field).string.min_len = 1];
+ string id = 2 [(buf.validate.field).string.min_len = 1];
+}
+
+message LoadResponse {
+ KeyMaterial key_material = 1;
+}
+
+message DeleteRequest {
+ string namespace = 1 [(buf.validate.field).string.min_len = 1];
+ string id = 2 [(buf.validate.field).string.min_len = 1];
+}
+
+message DeleteResponse {}
diff --git a/proto/plugin/key_material_storage/v1/key_material_storage_ext_plugin.pb.go b/proto/plugin/key_material_storage/v1/key_material_storage_ext_plugin.pb.go
new file mode 100644
index 0000000..fbb9f20
--- /dev/null
+++ b/proto/plugin/key_material_storage/v1/key_material_storage_ext_plugin.pb.go
@@ -0,0 +1,56 @@
+// Code generated by protoc-gen-go-extension. DO NOT EDIT.
+
+package key_material_storagev1
+
+import (
+ grpc "google.golang.org/grpc"
+
+ api "github.com/openkcm/plugin-sdk/api"
+)
+
+const (
+ Type = "KeyMaterialStorage"
+ GRPCServiceFullName = "krypton.plugin.key_material_storage.v1.KeyMaterialStorage"
+)
+
+func KeyMaterialStoragePluginServer(server KeyMaterialStorageServer) api.PluginServer {
+ return keyMaterialStoragePluginServer{KeyMaterialStorageServer: server}
+}
+
+type keyMaterialStoragePluginServer struct {
+ KeyMaterialStorageServer
+}
+
+func (s keyMaterialStoragePluginServer) Type() string {
+ return Type
+}
+
+func (s keyMaterialStoragePluginServer) GRPCServiceName() string {
+ return GRPCServiceFullName
+}
+
+func (s keyMaterialStoragePluginServer) RegisterServer(server *grpc.Server) any {
+ RegisterKeyMaterialStorageServer(server, s.KeyMaterialStorageServer)
+ return s.KeyMaterialStorageServer
+}
+
+type KeyMaterialStoragePluginClient struct {
+ KeyMaterialStorageClient
+}
+
+func (s KeyMaterialStoragePluginClient) Type() string {
+ return Type
+}
+
+func (c *KeyMaterialStoragePluginClient) IsInitialized() bool {
+ return c.KeyMaterialStorageClient != nil
+}
+
+func (c *KeyMaterialStoragePluginClient) GRPCServiceName() string {
+ return GRPCServiceFullName
+}
+
+func (c *KeyMaterialStoragePluginClient) InitClient(conn grpc.ClientConnInterface) any {
+ c.KeyMaterialStorageClient = NewKeyMaterialStorageClient(conn)
+ return c.KeyMaterialStorageClient
+}
diff --git a/proto/plugin/key_material_storage/v1/key_material_storage_grpc.pb.go b/proto/plugin/key_material_storage/v1/key_material_storage_grpc.pb.go
new file mode 100644
index 0000000..064b571
--- /dev/null
+++ b/proto/plugin/key_material_storage/v1/key_material_storage_grpc.pb.go
@@ -0,0 +1,248 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.6.1
+// - protoc (unknown)
+// source: plugin/key_material_storage/v1/key_material_storage.proto
+
+package key_material_storagev1
+
+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.64.0 or later.
+const _ = grpc.SupportPackageIsVersion9
+
+const (
+ KeyMaterialStorage_Store_FullMethodName = "/krypton.plugin.key_material_storage.v1.KeyMaterialStorage/Store"
+ KeyMaterialStorage_Load_FullMethodName = "/krypton.plugin.key_material_storage.v1.KeyMaterialStorage/Load"
+ KeyMaterialStorage_Delete_FullMethodName = "/krypton.plugin.key_material_storage.v1.KeyMaterialStorage/Delete"
+ KeyMaterialStorage_ListIDs_FullMethodName = "/krypton.plugin.key_material_storage.v1.KeyMaterialStorage/ListIDs"
+)
+
+// KeyMaterialStorageClient is the client API for KeyMaterialStorage 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.
+//
+// KeyMaterialStorage defines the universal interface for persisting and
+// retrieving opaque blobs of data, typically wrapped key material.
+type KeyMaterialStorageClient interface {
+ Store(ctx context.Context, in *StoreRequest, opts ...grpc.CallOption) (*StoreResponse, error)
+ Load(ctx context.Context, in *LoadRequest, opts ...grpc.CallOption) (*LoadResponse, error)
+ Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error)
+ // ListIDs returns batches of IDs matching the criteria.
+ ListIDs(ctx context.Context, in *ListIDsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ListIDsResponse], error)
+}
+
+type keyMaterialStorageClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewKeyMaterialStorageClient(cc grpc.ClientConnInterface) KeyMaterialStorageClient {
+ return &keyMaterialStorageClient{cc}
+}
+
+func (c *keyMaterialStorageClient) Store(ctx context.Context, in *StoreRequest, opts ...grpc.CallOption) (*StoreResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(StoreResponse)
+ err := c.cc.Invoke(ctx, KeyMaterialStorage_Store_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *keyMaterialStorageClient) Load(ctx context.Context, in *LoadRequest, opts ...grpc.CallOption) (*LoadResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(LoadResponse)
+ err := c.cc.Invoke(ctx, KeyMaterialStorage_Load_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *keyMaterialStorageClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(DeleteResponse)
+ err := c.cc.Invoke(ctx, KeyMaterialStorage_Delete_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *keyMaterialStorageClient) ListIDs(ctx context.Context, in *ListIDsRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ListIDsResponse], error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ stream, err := c.cc.NewStream(ctx, &KeyMaterialStorage_ServiceDesc.Streams[0], KeyMaterialStorage_ListIDs_FullMethodName, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &grpc.GenericClientStream[ListIDsRequest, ListIDsResponse]{ClientStream: 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
+}
+
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type KeyMaterialStorage_ListIDsClient = grpc.ServerStreamingClient[ListIDsResponse]
+
+// KeyMaterialStorageServer is the server API for KeyMaterialStorage service.
+// All implementations must embed UnimplementedKeyMaterialStorageServer
+// for forward compatibility.
+//
+// KeyMaterialStorage defines the universal interface for persisting and
+// retrieving opaque blobs of data, typically wrapped key material.
+type KeyMaterialStorageServer interface {
+ Store(context.Context, *StoreRequest) (*StoreResponse, error)
+ Load(context.Context, *LoadRequest) (*LoadResponse, error)
+ Delete(context.Context, *DeleteRequest) (*DeleteResponse, error)
+ // ListIDs returns batches of IDs matching the criteria.
+ ListIDs(*ListIDsRequest, grpc.ServerStreamingServer[ListIDsResponse]) error
+ mustEmbedUnimplementedKeyMaterialStorageServer()
+}
+
+// UnimplementedKeyMaterialStorageServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedKeyMaterialStorageServer struct{}
+
+func (UnimplementedKeyMaterialStorageServer) Store(context.Context, *StoreRequest) (*StoreResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method Store not implemented")
+}
+func (UnimplementedKeyMaterialStorageServer) Load(context.Context, *LoadRequest) (*LoadResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method Load not implemented")
+}
+func (UnimplementedKeyMaterialStorageServer) Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedKeyMaterialStorageServer) ListIDs(*ListIDsRequest, grpc.ServerStreamingServer[ListIDsResponse]) error {
+ return status.Error(codes.Unimplemented, "method ListIDs not implemented")
+}
+func (UnimplementedKeyMaterialStorageServer) mustEmbedUnimplementedKeyMaterialStorageServer() {}
+func (UnimplementedKeyMaterialStorageServer) testEmbeddedByValue() {}
+
+// UnsafeKeyMaterialStorageServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to KeyMaterialStorageServer will
+// result in compilation errors.
+type UnsafeKeyMaterialStorageServer interface {
+ mustEmbedUnimplementedKeyMaterialStorageServer()
+}
+
+func RegisterKeyMaterialStorageServer(s grpc.ServiceRegistrar, srv KeyMaterialStorageServer) {
+ // If the following call panics, it indicates UnimplementedKeyMaterialStorageServer was
+ // embedded by pointer and is nil. This will cause panics if an
+ // unimplemented method is ever invoked, so we test this at initialization
+ // time to prevent it from happening at runtime later due to I/O.
+ if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+ t.testEmbeddedByValue()
+ }
+ s.RegisterService(&KeyMaterialStorage_ServiceDesc, srv)
+}
+
+func _KeyMaterialStorage_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.(KeyMaterialStorageServer).Store(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: KeyMaterialStorage_Store_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeyMaterialStorageServer).Store(ctx, req.(*StoreRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _KeyMaterialStorage_Load_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(LoadRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(KeyMaterialStorageServer).Load(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: KeyMaterialStorage_Load_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeyMaterialStorageServer).Load(ctx, req.(*LoadRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _KeyMaterialStorage_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(KeyMaterialStorageServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: KeyMaterialStorage_Delete_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeyMaterialStorageServer).Delete(ctx, req.(*DeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _KeyMaterialStorage_ListIDs_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(ListIDsRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(KeyMaterialStorageServer).ListIDs(m, &grpc.GenericServerStream[ListIDsRequest, ListIDsResponse]{ServerStream: stream})
+}
+
+// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
+type KeyMaterialStorage_ListIDsServer = grpc.ServerStreamingServer[ListIDsResponse]
+
+// KeyMaterialStorage_ServiceDesc is the grpc.ServiceDesc for KeyMaterialStorage service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var KeyMaterialStorage_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "krypton.plugin.key_material_storage.v1.KeyMaterialStorage",
+ HandlerType: (*KeyMaterialStorageServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Store",
+ Handler: _KeyMaterialStorage_Store_Handler,
+ },
+ {
+ MethodName: "Load",
+ Handler: _KeyMaterialStorage_Load_Handler,
+ },
+ {
+ MethodName: "Delete",
+ Handler: _KeyMaterialStorage_Delete_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "ListIDs",
+ Handler: _KeyMaterialStorage_ListIDs_Handler,
+ ServerStreams: true,
+ },
+ },
+ Metadata: "plugin/key_material_storage/v1/key_material_storage.proto",
+}
diff --git a/proto/plugin/keystore/common/v1/common.pb.go b/proto/plugin/keystore/common/v1/common.pb.go
index 5012e42..4386c2a 100644
--- a/proto/plugin/keystore/common/v1/common.pb.go
+++ b/proto/plugin/keystore/common/v1/common.pb.go
@@ -1,19 +1,18 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/keystore/common/v1/common.proto
package commonv1
import (
- reflect "reflect"
- sync "sync"
- unsafe "unsafe"
-
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"
+ unsafe "unsafe"
)
const (
@@ -75,8 +74,7 @@ const file_plugin_keystore_common_v1_common_proto_rawDesc = "" +
"\n" +
"&plugin/keystore/common/v1/common.proto\x12\x19plugin.keystore.common.v1\x1a\x1cgoogle/protobuf/struct.proto\"I\n" +
"\x16KeystoreInstanceConfig\x12/\n" +
- "\x06values\x18\x01 \x01(\v2\x17.google.protobuf.StructR\x06valuesB\xfb\x01\n" +
- "\x1dcom.plugin.keystore.common.v1B\vCommonProtoP\x01ZFgithub.com/openkcm/plugin-sdk/proto/plugin/keystore/common/v1;commonv1\xa2\x02\x03PKC\xaa\x02\x19Plugin.Keystore.Common.V1\xca\x02\x19Plugin\\Keystore\\Common\\V1\xe2\x02%Plugin\\Keystore\\Common\\V1\\GPBMetadata\xea\x02\x1cPlugin::Keystore::Common::V1b\x06proto3"
+ "\x06values\x18\x01 \x01(\v2\x17.google.protobuf.StructR\x06valuesBHZFgithub.com/openkcm/plugin-sdk/proto/plugin/keystore/common/v1;commonv1b\x06proto3"
var (
file_plugin_keystore_common_v1_common_proto_rawDescOnce sync.Once
diff --git a/proto/plugin/keystore/common/v1/common.pb.validate.go b/proto/plugin/keystore/common/v1/common.pb.validate.go
deleted file mode 100644
index 738dab4..0000000
--- a/proto/plugin/keystore/common/v1/common.pb.validate.go
+++ /dev/null
@@ -1,167 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/keystore/common/v1/common.proto
-
-package commonv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on KeystoreInstanceConfig with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *KeystoreInstanceConfig) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on KeystoreInstanceConfig with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// KeystoreInstanceConfigMultiError, or nil if none found.
-func (m *KeystoreInstanceConfig) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *KeystoreInstanceConfig) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetValues()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, KeystoreInstanceConfigValidationError{
- field: "Values",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, KeystoreInstanceConfigValidationError{
- field: "Values",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetValues()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return KeystoreInstanceConfigValidationError{
- field: "Values",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return KeystoreInstanceConfigMultiError(errors)
- }
-
- return nil
-}
-
-// KeystoreInstanceConfigMultiError is an error wrapping multiple validation
-// errors returned by KeystoreInstanceConfig.ValidateAll() if the designated
-// constraints aren't met.
-type KeystoreInstanceConfigMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m KeystoreInstanceConfigMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m KeystoreInstanceConfigMultiError) AllErrors() []error { return m }
-
-// KeystoreInstanceConfigValidationError is the validation error returned by
-// KeystoreInstanceConfig.Validate if the designated constraints aren't met.
-type KeystoreInstanceConfigValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e KeystoreInstanceConfigValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e KeystoreInstanceConfigValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e KeystoreInstanceConfigValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e KeystoreInstanceConfigValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e KeystoreInstanceConfigValidationError) ErrorName() string {
- return "KeystoreInstanceConfigValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e KeystoreInstanceConfigValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sKeystoreInstanceConfig.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = KeystoreInstanceConfigValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = KeystoreInstanceConfigValidationError{}
diff --git a/proto/plugin/keystore/common/v1/common.proto b/proto/plugin/keystore/common/v1/common.proto
index d0171f1..eb1926a 100644
--- a/proto/plugin/keystore/common/v1/common.proto
+++ b/proto/plugin/keystore/common/v1/common.proto
@@ -3,6 +3,8 @@ package plugin.keystore.common.v1;
import "google/protobuf/struct.proto";
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/keystore/common/v1;commonv1";
+
// KeystoreInstanceConfig represents the configuration for a key store instance
// This is shared between management and operations plugins
message KeystoreInstanceConfig {
diff --git a/proto/plugin/keystore/management/v1/management.pb.go b/proto/plugin/keystore/management/v1/management.pb.go
index 4c2ff7d..8de0533 100644
--- a/proto/plugin/keystore/management/v1/management.pb.go
+++ b/proto/plugin/keystore/management/v1/management.pb.go
@@ -1,21 +1,19 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/keystore/management/v1/management.proto
package managementv1
import (
- reflect "reflect"
- sync "sync"
- unsafe "unsafe"
-
+ v1 "github.com/openkcm/plugin-sdk/proto/plugin/keystore/common/v1"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
structpb "google.golang.org/protobuf/types/known/structpb"
-
- v1 "github.com/openkcm/plugin-sdk/proto/plugin/keystore/common/v1"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
)
const (
@@ -25,6 +23,173 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
+// TrustType specifies whether a management or crypto role should be created.
+type TrustType int32
+
+const (
+ TrustType_TRUST_TYPE_UNSPECIFIED TrustType = 0
+ TrustType_TRUST_TYPE_MANAGEMENT TrustType = 1
+ TrustType_TRUST_TYPE_CRYPTO TrustType = 2
+)
+
+// Enum value maps for TrustType.
+var (
+ TrustType_name = map[int32]string{
+ 0: "TRUST_TYPE_UNSPECIFIED",
+ 1: "TRUST_TYPE_MANAGEMENT",
+ 2: "TRUST_TYPE_CRYPTO",
+ }
+ TrustType_value = map[string]int32{
+ "TRUST_TYPE_UNSPECIFIED": 0,
+ "TRUST_TYPE_MANAGEMENT": 1,
+ "TRUST_TYPE_CRYPTO": 2,
+ }
+)
+
+func (x TrustType) Enum() *TrustType {
+ p := new(TrustType)
+ *p = x
+ return p
+}
+
+func (x TrustType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (TrustType) Descriptor() protoreflect.EnumDescriptor {
+ return file_plugin_keystore_management_v1_management_proto_enumTypes[0].Descriptor()
+}
+
+func (TrustType) Type() protoreflect.EnumType {
+ return &file_plugin_keystore_management_v1_management_proto_enumTypes[0]
+}
+
+func (x TrustType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use TrustType.Descriptor instead.
+func (TrustType) EnumDescriptor() ([]byte, []int) {
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{0}
+}
+
+// SupportedRegion represents a region where the keystore can be created or accessed.
+type SupportedRegion struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ TechnicalName string `protobuf:"bytes,2,opt,name=technical_name,json=technicalName,proto3" json:"technical_name,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SupportedRegion) Reset() {
+ *x = SupportedRegion{}
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SupportedRegion) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SupportedRegion) ProtoMessage() {}
+
+func (x *SupportedRegion) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SupportedRegion.ProtoReflect.Descriptor instead.
+func (*SupportedRegion) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *SupportedRegion) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *SupportedRegion) GetTechnicalName() string {
+ if x != nil {
+ return x.TechnicalName
+ }
+ return ""
+}
+
+// ManagementConfig represents the configuration details for the management role of a keystore instance.
+type ManagementConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ LocalityId string `protobuf:"bytes,1,opt,name=locality_id,json=localityId,proto3" json:"locality_id,omitempty"`
+ CommonName string `protobuf:"bytes,2,opt,name=common_name,json=commonName,proto3" json:"common_name,omitempty"`
+ AccessData *v1.KeystoreInstanceConfig `protobuf:"bytes,3,opt,name=access_data,json=accessData,proto3" json:"access_data,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ManagementConfig) Reset() {
+ *x = ManagementConfig{}
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ManagementConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ManagementConfig) ProtoMessage() {}
+
+func (x *ManagementConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ManagementConfig.ProtoReflect.Descriptor instead.
+func (*ManagementConfig) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *ManagementConfig) GetLocalityId() string {
+ if x != nil {
+ return x.LocalityId
+ }
+ return ""
+}
+
+func (x *ManagementConfig) GetCommonName() string {
+ if x != nil {
+ return x.CommonName
+ }
+ return ""
+}
+
+func (x *ManagementConfig) GetAccessData() *v1.KeystoreInstanceConfig {
+ if x != nil {
+ return x.AccessData
+ }
+ return nil
+}
+
+// CreateKeystoreRequest represents the request to create a new keystore instance.
+// The values field contains the necessary parameters for creating the keystore,
+// which can vary depending on the implementation and requirements of the keystore provider.
type CreateKeystoreRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Values *structpb.Struct `protobuf:"bytes,1,opt,name=values,proto3" json:"values,omitempty"`
@@ -34,7 +199,7 @@ type CreateKeystoreRequest struct {
func (x *CreateKeystoreRequest) Reset() {
*x = CreateKeystoreRequest{}
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[0]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -46,7 +211,7 @@ func (x *CreateKeystoreRequest) String() string {
func (*CreateKeystoreRequest) ProtoMessage() {}
func (x *CreateKeystoreRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[0]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -59,7 +224,7 @@ func (x *CreateKeystoreRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeystoreRequest.ProtoReflect.Descriptor instead.
func (*CreateKeystoreRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{0}
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{2}
}
func (x *CreateKeystoreRequest) GetValues() *structpb.Struct {
@@ -69,16 +234,23 @@ func (x *CreateKeystoreRequest) GetValues() *structpb.Struct {
return nil
}
+// CreateKeystoreResponse represents the response after creating a new keystore instance.
+// - The config field (deprecated) contains the configuration details of the created keystore instance,
+// including fields: locality_id, common_name, management_access_data, and supported_regions.
type CreateKeystoreResponse struct {
- state protoimpl.MessageState `protogen:"open.v1"`
- Config *v1.KeystoreInstanceConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Deprecated: Marked as deprecated in plugin/keystore/management/v1/management.proto.
+ Config *v1.KeystoreInstanceConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+ RoleManagementConfig *ManagementConfig `protobuf:"bytes,2,opt,name=role_management_config,json=roleManagementConfig,proto3" json:"role_management_config,omitempty"`
+ KeyManagementConfig *ManagementConfig `protobuf:"bytes,3,opt,name=key_management_config,json=keyManagementConfig,proto3" json:"key_management_config,omitempty"`
+ SupportedRegions []*SupportedRegion `protobuf:"bytes,4,rep,name=supported_regions,json=supportedRegions,proto3" json:"supported_regions,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *CreateKeystoreResponse) Reset() {
*x = CreateKeystoreResponse{}
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[1]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -90,7 +262,7 @@ func (x *CreateKeystoreResponse) String() string {
func (*CreateKeystoreResponse) ProtoMessage() {}
func (x *CreateKeystoreResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[1]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -103,9 +275,10 @@ func (x *CreateKeystoreResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeystoreResponse.ProtoReflect.Descriptor instead.
func (*CreateKeystoreResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{1}
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{3}
}
+// Deprecated: Marked as deprecated in plugin/keystore/management/v1/management.proto.
func (x *CreateKeystoreResponse) GetConfig() *v1.KeystoreInstanceConfig {
if x != nil {
return x.Config
@@ -113,6 +286,27 @@ func (x *CreateKeystoreResponse) GetConfig() *v1.KeystoreInstanceConfig {
return nil
}
+func (x *CreateKeystoreResponse) GetRoleManagementConfig() *ManagementConfig {
+ if x != nil {
+ return x.RoleManagementConfig
+ }
+ return nil
+}
+
+func (x *CreateKeystoreResponse) GetKeyManagementConfig() *ManagementConfig {
+ if x != nil {
+ return x.KeyManagementConfig
+ }
+ return nil
+}
+
+func (x *CreateKeystoreResponse) GetSupportedRegions() []*SupportedRegion {
+ if x != nil {
+ return x.SupportedRegions
+ }
+ return nil
+}
+
type DeleteKeystoreRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Config *v1.KeystoreInstanceConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
@@ -122,7 +316,7 @@ type DeleteKeystoreRequest struct {
func (x *DeleteKeystoreRequest) Reset() {
*x = DeleteKeystoreRequest{}
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[2]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -134,7 +328,7 @@ func (x *DeleteKeystoreRequest) String() string {
func (*DeleteKeystoreRequest) ProtoMessage() {}
func (x *DeleteKeystoreRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[2]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -147,7 +341,7 @@ func (x *DeleteKeystoreRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteKeystoreRequest.ProtoReflect.Descriptor instead.
func (*DeleteKeystoreRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{2}
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{4}
}
func (x *DeleteKeystoreRequest) GetConfig() *v1.KeystoreInstanceConfig {
@@ -165,7 +359,7 @@ type DeleteKeystoreResponse struct {
func (x *DeleteKeystoreResponse) Reset() {
*x = DeleteKeystoreResponse{}
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[3]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -177,7 +371,7 @@ func (x *DeleteKeystoreResponse) String() string {
func (*DeleteKeystoreResponse) ProtoMessage() {}
func (x *DeleteKeystoreResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[3]
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -190,25 +384,271 @@ func (x *DeleteKeystoreResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteKeystoreResponse.ProtoReflect.Descriptor instead.
func (*DeleteKeystoreResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{3}
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{5}
+}
+
+// GrantTrustRequest represents the request to grant trust to a client certificate subject pattern
+// for accessing a keystore instance from the crypto layer.
+// - The config field contains the authentication configuration of the role management role for the keystore instance,
+// which is used to authenticate the request to grant trust.
+// - The subject field contains the client certificate subject to grant trust to
+// - The region field specifies the logical region for which the trust is being granted
+// - The type field specifies whether to create a management or crypto role
+type GrantTrustRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Config *v1.KeystoreInstanceConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+ Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"`
+ Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"`
+ Type TrustType `protobuf:"varint,4,opt,name=type,proto3,enum=plugin.keystore.management.v1.TrustType" json:"type,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GrantTrustRequest) Reset() {
+ *x = GrantTrustRequest{}
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GrantTrustRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrantTrustRequest) ProtoMessage() {}
+
+func (x *GrantTrustRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrantTrustRequest.ProtoReflect.Descriptor instead.
+func (*GrantTrustRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *GrantTrustRequest) GetConfig() *v1.KeystoreInstanceConfig {
+ if x != nil {
+ return x.Config
+ }
+ return nil
+}
+
+func (x *GrantTrustRequest) GetSubject() string {
+ if x != nil {
+ return x.Subject
+ }
+ return ""
+}
+
+func (x *GrantTrustRequest) GetRegion() string {
+ if x != nil {
+ return x.Region
+ }
+ return ""
+}
+
+func (x *GrantTrustRequest) GetType() TrustType {
+ if x != nil {
+ return x.Type
+ }
+ return TrustType_TRUST_TYPE_UNSPECIFIED
+}
+
+// GrantTrustResponse represents the response after granting trust to a client certificate subject pattern
+// for accessing a keystore instance. Returns the access data of the configured trust
+type GrantTrustResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ AccessData *structpb.Struct `protobuf:"bytes,1,opt,name=access_data,json=accessData,proto3" json:"access_data,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GrantTrustResponse) Reset() {
+ *x = GrantTrustResponse{}
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GrantTrustResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrantTrustResponse) ProtoMessage() {}
+
+func (x *GrantTrustResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[7]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrantTrustResponse.ProtoReflect.Descriptor instead.
+func (*GrantTrustResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *GrantTrustResponse) GetAccessData() *structpb.Struct {
+ if x != nil {
+ return x.AccessData
+ }
+ return nil
+}
+
+// RemoveTrustRequest represents the request to remove trust for a client certificate subject pattern
+// to revoke access to a keystore instance.
+// - The config field contains the authentication configuration of the role management role for the keystore instance,
+// which is used to authenticate the request to remove trust.
+// - The access_data field contains the access data of the trust to be removed
+type RemoveTrustRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Config *v1.KeystoreInstanceConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+ AccessData *structpb.Struct `protobuf:"bytes,2,opt,name=access_data,json=accessData,proto3" json:"access_data,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *RemoveTrustRequest) Reset() {
+ *x = RemoveTrustRequest{}
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *RemoveTrustRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveTrustRequest) ProtoMessage() {}
+
+func (x *RemoveTrustRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[8]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RemoveTrustRequest.ProtoReflect.Descriptor instead.
+func (*RemoveTrustRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *RemoveTrustRequest) GetConfig() *v1.KeystoreInstanceConfig {
+ if x != nil {
+ return x.Config
+ }
+ return nil
+}
+
+func (x *RemoveTrustRequest) GetAccessData() *structpb.Struct {
+ if x != nil {
+ return x.AccessData
+ }
+ return nil
+}
+
+type RemoveTrustResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *RemoveTrustResponse) Reset() {
+ *x = RemoveTrustResponse{}
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *RemoveTrustResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoveTrustResponse) ProtoMessage() {}
+
+func (x *RemoveTrustResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_management_v1_management_proto_msgTypes[9]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RemoveTrustResponse.ProtoReflect.Descriptor instead.
+func (*RemoveTrustResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_management_v1_management_proto_rawDescGZIP(), []int{9}
}
var File_plugin_keystore_management_v1_management_proto protoreflect.FileDescriptor
const file_plugin_keystore_management_v1_management_proto_rawDesc = "" +
"\n" +
- ".plugin/keystore/management/v1/management.proto\x12\x1dplugin.keystore.management.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a&plugin/keystore/common/v1/common.proto\"H\n" +
+ ".plugin/keystore/management/v1/management.proto\x12\x1dplugin.keystore.management.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a&plugin/keystore/common/v1/common.proto\"L\n" +
+ "\x0fSupportedRegion\x12\x12\n" +
+ "\x04name\x18\x01 \x01(\tR\x04name\x12%\n" +
+ "\x0etechnical_name\x18\x02 \x01(\tR\rtechnicalName\"\xa8\x01\n" +
+ "\x10ManagementConfig\x12\x1f\n" +
+ "\vlocality_id\x18\x01 \x01(\tR\n" +
+ "localityId\x12\x1f\n" +
+ "\vcommon_name\x18\x02 \x01(\tR\n" +
+ "commonName\x12R\n" +
+ "\vaccess_data\x18\x03 \x01(\v21.plugin.keystore.common.v1.KeystoreInstanceConfigR\n" +
+ "accessData\"H\n" +
"\x15CreateKeystoreRequest\x12/\n" +
- "\x06values\x18\x01 \x01(\v2\x17.google.protobuf.StructR\x06values\"c\n" +
- "\x16CreateKeystoreResponse\x12I\n" +
- "\x06config\x18\x01 \x01(\v21.plugin.keystore.common.v1.KeystoreInstanceConfigR\x06config\"b\n" +
+ "\x06values\x18\x01 \x01(\v2\x17.google.protobuf.StructR\x06values\"\x90\x03\n" +
+ "\x16CreateKeystoreResponse\x12M\n" +
+ "\x06config\x18\x01 \x01(\v21.plugin.keystore.common.v1.KeystoreInstanceConfigB\x02\x18\x01R\x06config\x12e\n" +
+ "\x16role_management_config\x18\x02 \x01(\v2/.plugin.keystore.management.v1.ManagementConfigR\x14roleManagementConfig\x12c\n" +
+ "\x15key_management_config\x18\x03 \x01(\v2/.plugin.keystore.management.v1.ManagementConfigR\x13keyManagementConfig\x12[\n" +
+ "\x11supported_regions\x18\x04 \x03(\v2..plugin.keystore.management.v1.SupportedRegionR\x10supportedRegions\"b\n" +
"\x15DeleteKeystoreRequest\x12I\n" +
"\x06config\x18\x01 \x01(\v21.plugin.keystore.common.v1.KeystoreInstanceConfigR\x06config\"\x18\n" +
- "\x16DeleteKeystoreResponse2\x90\x02\n" +
+ "\x16DeleteKeystoreResponse\"\xce\x01\n" +
+ "\x11GrantTrustRequest\x12I\n" +
+ "\x06config\x18\x01 \x01(\v21.plugin.keystore.common.v1.KeystoreInstanceConfigR\x06config\x12\x18\n" +
+ "\asubject\x18\x02 \x01(\tR\asubject\x12\x16\n" +
+ "\x06region\x18\x03 \x01(\tR\x06region\x12<\n" +
+ "\x04type\x18\x04 \x01(\x0e2(.plugin.keystore.management.v1.TrustTypeR\x04type\"N\n" +
+ "\x12GrantTrustResponse\x128\n" +
+ "\vaccess_data\x18\x01 \x01(\v2\x17.google.protobuf.StructR\n" +
+ "accessData\"\x99\x01\n" +
+ "\x12RemoveTrustRequest\x12I\n" +
+ "\x06config\x18\x01 \x01(\v21.plugin.keystore.common.v1.KeystoreInstanceConfigR\x06config\x128\n" +
+ "\vaccess_data\x18\x02 \x01(\v2\x17.google.protobuf.StructR\n" +
+ "accessData\"\x15\n" +
+ "\x13RemoveTrustResponse*Y\n" +
+ "\tTrustType\x12\x1a\n" +
+ "\x16TRUST_TYPE_UNSPECIFIED\x10\x00\x12\x19\n" +
+ "\x15TRUST_TYPE_MANAGEMENT\x10\x01\x12\x15\n" +
+ "\x11TRUST_TYPE_CRYPTO\x10\x022\xf9\x03\n" +
"\x10KeystoreProvider\x12}\n" +
"\x0eCreateKeystore\x124.plugin.keystore.management.v1.CreateKeystoreRequest\x1a5.plugin.keystore.management.v1.CreateKeystoreResponse\x12}\n" +
- "\x0eDeleteKeystore\x124.plugin.keystore.management.v1.DeleteKeystoreRequest\x1a5.plugin.keystore.management.v1.DeleteKeystoreResponseB\x9b\x02\n" +
- "!com.plugin.keystore.management.v1B\x0fManagementProtoP\x01ZNgithub.com/openkcm/plugin-sdk/proto/plugin/keystore/management/v1;managementv1\xa2\x02\x03PKM\xaa\x02\x1dPlugin.Keystore.Management.V1\xca\x02\x1dPlugin\\Keystore\\Management\\V1\xe2\x02)Plugin\\Keystore\\Management\\V1\\GPBMetadata\xea\x02 Plugin::Keystore::Management::V1b\x06proto3"
+ "\x0eDeleteKeystore\x124.plugin.keystore.management.v1.DeleteKeystoreRequest\x1a5.plugin.keystore.management.v1.DeleteKeystoreResponse\x12q\n" +
+ "\n" +
+ "GrantTrust\x120.plugin.keystore.management.v1.GrantTrustRequest\x1a1.plugin.keystore.management.v1.GrantTrustResponse\x12t\n" +
+ "\vRemoveTrust\x121.plugin.keystore.management.v1.RemoveTrustRequest\x1a2.plugin.keystore.management.v1.RemoveTrustResponseBPZNgithub.com/openkcm/plugin-sdk/proto/plugin/keystore/management/v1;managementv1b\x06proto3"
var (
file_plugin_keystore_management_v1_management_proto_rawDescOnce sync.Once
@@ -222,28 +662,49 @@ func file_plugin_keystore_management_v1_management_proto_rawDescGZIP() []byte {
return file_plugin_keystore_management_v1_management_proto_rawDescData
}
-var file_plugin_keystore_management_v1_management_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_plugin_keystore_management_v1_management_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_plugin_keystore_management_v1_management_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
var file_plugin_keystore_management_v1_management_proto_goTypes = []any{
- (*CreateKeystoreRequest)(nil), // 0: plugin.keystore.management.v1.CreateKeystoreRequest
- (*CreateKeystoreResponse)(nil), // 1: plugin.keystore.management.v1.CreateKeystoreResponse
- (*DeleteKeystoreRequest)(nil), // 2: plugin.keystore.management.v1.DeleteKeystoreRequest
- (*DeleteKeystoreResponse)(nil), // 3: plugin.keystore.management.v1.DeleteKeystoreResponse
- (*structpb.Struct)(nil), // 4: google.protobuf.Struct
- (*v1.KeystoreInstanceConfig)(nil), // 5: plugin.keystore.common.v1.KeystoreInstanceConfig
+ (TrustType)(0), // 0: plugin.keystore.management.v1.TrustType
+ (*SupportedRegion)(nil), // 1: plugin.keystore.management.v1.SupportedRegion
+ (*ManagementConfig)(nil), // 2: plugin.keystore.management.v1.ManagementConfig
+ (*CreateKeystoreRequest)(nil), // 3: plugin.keystore.management.v1.CreateKeystoreRequest
+ (*CreateKeystoreResponse)(nil), // 4: plugin.keystore.management.v1.CreateKeystoreResponse
+ (*DeleteKeystoreRequest)(nil), // 5: plugin.keystore.management.v1.DeleteKeystoreRequest
+ (*DeleteKeystoreResponse)(nil), // 6: plugin.keystore.management.v1.DeleteKeystoreResponse
+ (*GrantTrustRequest)(nil), // 7: plugin.keystore.management.v1.GrantTrustRequest
+ (*GrantTrustResponse)(nil), // 8: plugin.keystore.management.v1.GrantTrustResponse
+ (*RemoveTrustRequest)(nil), // 9: plugin.keystore.management.v1.RemoveTrustRequest
+ (*RemoveTrustResponse)(nil), // 10: plugin.keystore.management.v1.RemoveTrustResponse
+ (*v1.KeystoreInstanceConfig)(nil), // 11: plugin.keystore.common.v1.KeystoreInstanceConfig
+ (*structpb.Struct)(nil), // 12: google.protobuf.Struct
}
var file_plugin_keystore_management_v1_management_proto_depIdxs = []int32{
- 4, // 0: plugin.keystore.management.v1.CreateKeystoreRequest.values:type_name -> google.protobuf.Struct
- 5, // 1: plugin.keystore.management.v1.CreateKeystoreResponse.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
- 5, // 2: plugin.keystore.management.v1.DeleteKeystoreRequest.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
- 0, // 3: plugin.keystore.management.v1.KeystoreProvider.CreateKeystore:input_type -> plugin.keystore.management.v1.CreateKeystoreRequest
- 2, // 4: plugin.keystore.management.v1.KeystoreProvider.DeleteKeystore:input_type -> plugin.keystore.management.v1.DeleteKeystoreRequest
- 1, // 5: plugin.keystore.management.v1.KeystoreProvider.CreateKeystore:output_type -> plugin.keystore.management.v1.CreateKeystoreResponse
- 3, // 6: plugin.keystore.management.v1.KeystoreProvider.DeleteKeystore:output_type -> plugin.keystore.management.v1.DeleteKeystoreResponse
- 5, // [5:7] is the sub-list for method output_type
- 3, // [3:5] 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
+ 11, // 0: plugin.keystore.management.v1.ManagementConfig.access_data:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
+ 12, // 1: plugin.keystore.management.v1.CreateKeystoreRequest.values:type_name -> google.protobuf.Struct
+ 11, // 2: plugin.keystore.management.v1.CreateKeystoreResponse.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
+ 2, // 3: plugin.keystore.management.v1.CreateKeystoreResponse.role_management_config:type_name -> plugin.keystore.management.v1.ManagementConfig
+ 2, // 4: plugin.keystore.management.v1.CreateKeystoreResponse.key_management_config:type_name -> plugin.keystore.management.v1.ManagementConfig
+ 1, // 5: plugin.keystore.management.v1.CreateKeystoreResponse.supported_regions:type_name -> plugin.keystore.management.v1.SupportedRegion
+ 11, // 6: plugin.keystore.management.v1.DeleteKeystoreRequest.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
+ 11, // 7: plugin.keystore.management.v1.GrantTrustRequest.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
+ 0, // 8: plugin.keystore.management.v1.GrantTrustRequest.type:type_name -> plugin.keystore.management.v1.TrustType
+ 12, // 9: plugin.keystore.management.v1.GrantTrustResponse.access_data:type_name -> google.protobuf.Struct
+ 11, // 10: plugin.keystore.management.v1.RemoveTrustRequest.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
+ 12, // 11: plugin.keystore.management.v1.RemoveTrustRequest.access_data:type_name -> google.protobuf.Struct
+ 3, // 12: plugin.keystore.management.v1.KeystoreProvider.CreateKeystore:input_type -> plugin.keystore.management.v1.CreateKeystoreRequest
+ 5, // 13: plugin.keystore.management.v1.KeystoreProvider.DeleteKeystore:input_type -> plugin.keystore.management.v1.DeleteKeystoreRequest
+ 7, // 14: plugin.keystore.management.v1.KeystoreProvider.GrantTrust:input_type -> plugin.keystore.management.v1.GrantTrustRequest
+ 9, // 15: plugin.keystore.management.v1.KeystoreProvider.RemoveTrust:input_type -> plugin.keystore.management.v1.RemoveTrustRequest
+ 4, // 16: plugin.keystore.management.v1.KeystoreProvider.CreateKeystore:output_type -> plugin.keystore.management.v1.CreateKeystoreResponse
+ 6, // 17: plugin.keystore.management.v1.KeystoreProvider.DeleteKeystore:output_type -> plugin.keystore.management.v1.DeleteKeystoreResponse
+ 8, // 18: plugin.keystore.management.v1.KeystoreProvider.GrantTrust:output_type -> plugin.keystore.management.v1.GrantTrustResponse
+ 10, // 19: plugin.keystore.management.v1.KeystoreProvider.RemoveTrust:output_type -> plugin.keystore.management.v1.RemoveTrustResponse
+ 16, // [16:20] is the sub-list for method output_type
+ 12, // [12:16] is the sub-list for method input_type
+ 12, // [12:12] is the sub-list for extension type_name
+ 12, // [12:12] is the sub-list for extension extendee
+ 0, // [0:12] is the sub-list for field type_name
}
func init() { file_plugin_keystore_management_v1_management_proto_init() }
@@ -256,13 +717,14 @@ func file_plugin_keystore_management_v1_management_proto_init() {
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_plugin_keystore_management_v1_management_proto_rawDesc), len(file_plugin_keystore_management_v1_management_proto_rawDesc)),
- NumEnums: 0,
- NumMessages: 4,
+ NumEnums: 1,
+ NumMessages: 10,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_plugin_keystore_management_v1_management_proto_goTypes,
DependencyIndexes: file_plugin_keystore_management_v1_management_proto_depIdxs,
+ EnumInfos: file_plugin_keystore_management_v1_management_proto_enumTypes,
MessageInfos: file_plugin_keystore_management_v1_management_proto_msgTypes,
}.Build()
File_plugin_keystore_management_v1_management_proto = out.File
diff --git a/proto/plugin/keystore/management/v1/management.pb.validate.go b/proto/plugin/keystore/management/v1/management.pb.validate.go
deleted file mode 100644
index 1610df6..0000000
--- a/proto/plugin/keystore/management/v1/management.pb.validate.go
+++ /dev/null
@@ -1,531 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/keystore/management/v1/management.proto
-
-package managementv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on CreateKeystoreRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *CreateKeystoreRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on CreateKeystoreRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// CreateKeystoreRequestMultiError, or nil if none found.
-func (m *CreateKeystoreRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *CreateKeystoreRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetValues()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, CreateKeystoreRequestValidationError{
- field: "Values",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, CreateKeystoreRequestValidationError{
- field: "Values",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetValues()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return CreateKeystoreRequestValidationError{
- field: "Values",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return CreateKeystoreRequestMultiError(errors)
- }
-
- return nil
-}
-
-// CreateKeystoreRequestMultiError is an error wrapping multiple validation
-// errors returned by CreateKeystoreRequest.ValidateAll() if the designated
-// constraints aren't met.
-type CreateKeystoreRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m CreateKeystoreRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m CreateKeystoreRequestMultiError) AllErrors() []error { return m }
-
-// CreateKeystoreRequestValidationError is the validation error returned by
-// CreateKeystoreRequest.Validate if the designated constraints aren't met.
-type CreateKeystoreRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e CreateKeystoreRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e CreateKeystoreRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e CreateKeystoreRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e CreateKeystoreRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e CreateKeystoreRequestValidationError) ErrorName() string {
- return "CreateKeystoreRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e CreateKeystoreRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sCreateKeystoreRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = CreateKeystoreRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = CreateKeystoreRequestValidationError{}
-
-// Validate checks the field values on CreateKeystoreResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *CreateKeystoreResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on CreateKeystoreResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// CreateKeystoreResponseMultiError, or nil if none found.
-func (m *CreateKeystoreResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *CreateKeystoreResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetConfig()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, CreateKeystoreResponseValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, CreateKeystoreResponseValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return CreateKeystoreResponseValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return CreateKeystoreResponseMultiError(errors)
- }
-
- return nil
-}
-
-// CreateKeystoreResponseMultiError is an error wrapping multiple validation
-// errors returned by CreateKeystoreResponse.ValidateAll() if the designated
-// constraints aren't met.
-type CreateKeystoreResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m CreateKeystoreResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m CreateKeystoreResponseMultiError) AllErrors() []error { return m }
-
-// CreateKeystoreResponseValidationError is the validation error returned by
-// CreateKeystoreResponse.Validate if the designated constraints aren't met.
-type CreateKeystoreResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e CreateKeystoreResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e CreateKeystoreResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e CreateKeystoreResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e CreateKeystoreResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e CreateKeystoreResponseValidationError) ErrorName() string {
- return "CreateKeystoreResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e CreateKeystoreResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sCreateKeystoreResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = CreateKeystoreResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = CreateKeystoreResponseValidationError{}
-
-// Validate checks the field values on DeleteKeystoreRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *DeleteKeystoreRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DeleteKeystoreRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// DeleteKeystoreRequestMultiError, or nil if none found.
-func (m *DeleteKeystoreRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DeleteKeystoreRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetConfig()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, DeleteKeystoreRequestValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, DeleteKeystoreRequestValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return DeleteKeystoreRequestValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return DeleteKeystoreRequestMultiError(errors)
- }
-
- return nil
-}
-
-// DeleteKeystoreRequestMultiError is an error wrapping multiple validation
-// errors returned by DeleteKeystoreRequest.ValidateAll() if the designated
-// constraints aren't met.
-type DeleteKeystoreRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DeleteKeystoreRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DeleteKeystoreRequestMultiError) AllErrors() []error { return m }
-
-// DeleteKeystoreRequestValidationError is the validation error returned by
-// DeleteKeystoreRequest.Validate if the designated constraints aren't met.
-type DeleteKeystoreRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DeleteKeystoreRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DeleteKeystoreRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DeleteKeystoreRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DeleteKeystoreRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DeleteKeystoreRequestValidationError) ErrorName() string {
- return "DeleteKeystoreRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e DeleteKeystoreRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDeleteKeystoreRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DeleteKeystoreRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DeleteKeystoreRequestValidationError{}
-
-// Validate checks the field values on DeleteKeystoreResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *DeleteKeystoreResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DeleteKeystoreResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// DeleteKeystoreResponseMultiError, or nil if none found.
-func (m *DeleteKeystoreResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DeleteKeystoreResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return DeleteKeystoreResponseMultiError(errors)
- }
-
- return nil
-}
-
-// DeleteKeystoreResponseMultiError is an error wrapping multiple validation
-// errors returned by DeleteKeystoreResponse.ValidateAll() if the designated
-// constraints aren't met.
-type DeleteKeystoreResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DeleteKeystoreResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DeleteKeystoreResponseMultiError) AllErrors() []error { return m }
-
-// DeleteKeystoreResponseValidationError is the validation error returned by
-// DeleteKeystoreResponse.Validate if the designated constraints aren't met.
-type DeleteKeystoreResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DeleteKeystoreResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DeleteKeystoreResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DeleteKeystoreResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DeleteKeystoreResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DeleteKeystoreResponseValidationError) ErrorName() string {
- return "DeleteKeystoreResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e DeleteKeystoreResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDeleteKeystoreResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DeleteKeystoreResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DeleteKeystoreResponseValidationError{}
diff --git a/proto/plugin/keystore/management/v1/management.proto b/proto/plugin/keystore/management/v1/management.proto
index 22d90e0..93e5bfd 100644
--- a/proto/plugin/keystore/management/v1/management.proto
+++ b/proto/plugin/keystore/management/v1/management.proto
@@ -4,17 +4,47 @@ package plugin.keystore.management.v1;
import "google/protobuf/struct.proto";
import "plugin/keystore/common/v1/common.proto";
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/keystore/management/v1;managementv1";
+
service KeystoreProvider {
+ // Create a new keystore instance
rpc CreateKeystore(CreateKeystoreRequest) returns (CreateKeystoreResponse);
+ // Delete an existing keystore instance
rpc DeleteKeystore(DeleteKeystoreRequest) returns (DeleteKeystoreResponse);
+ // Grant trust to a client certificate subject pattern for accessing the keystore instance
+ rpc GrantTrust(GrantTrustRequest) returns (GrantTrustResponse);
+ // Remove trust for a client certificate subject pattern to revoke access to the keystore instance
+ rpc RemoveTrust(RemoveTrustRequest) returns (RemoveTrustResponse);
+}
+
+// SupportedRegion represents a region where the keystore can be created or accessed.
+message SupportedRegion {
+ string name = 1;
+ string technical_name = 2;
+}
+
+// ManagementConfig represents the configuration details for the management role of a keystore instance.
+message ManagementConfig {
+ string locality_id = 1;
+ string common_name = 2;
+ plugin.keystore.common.v1.KeystoreInstanceConfig access_data = 3;
}
+// CreateKeystoreRequest represents the request to create a new keystore instance.
+// The values field contains the necessary parameters for creating the keystore,
+// which can vary depending on the implementation and requirements of the keystore provider.
message CreateKeystoreRequest {
google.protobuf.Struct values = 1;
}
+// CreateKeystoreResponse represents the response after creating a new keystore instance.
+// - The config field (deprecated) contains the configuration details of the created keystore instance,
+// including fields: locality_id, common_name, management_access_data, and supported_regions.
message CreateKeystoreResponse {
- plugin.keystore.common.v1.KeystoreInstanceConfig config = 1;
+ plugin.keystore.common.v1.KeystoreInstanceConfig config = 1 [deprecated = true];
+ ManagementConfig role_management_config = 2;
+ ManagementConfig key_management_config = 3;
+ repeated SupportedRegion supported_regions = 4;
}
message DeleteKeystoreRequest {
@@ -22,3 +52,42 @@ message DeleteKeystoreRequest {
}
message DeleteKeystoreResponse {}
+
+// TrustType specifies whether a management or crypto role should be created.
+enum TrustType {
+ TRUST_TYPE_UNSPECIFIED = 0;
+ TRUST_TYPE_MANAGEMENT = 1;
+ TRUST_TYPE_CRYPTO = 2;
+}
+
+// GrantTrustRequest represents the request to grant trust to a client certificate subject pattern
+// for accessing a keystore instance from the crypto layer.
+// - The config field contains the authentication configuration of the role management role for the keystore instance,
+// which is used to authenticate the request to grant trust.
+// - The subject field contains the client certificate subject to grant trust to
+// - The region field specifies the logical region for which the trust is being granted
+// - The type field specifies whether to create a management or crypto role
+message GrantTrustRequest {
+ plugin.keystore.common.v1.KeystoreInstanceConfig config = 1;
+ string subject = 2;
+ string region = 3;
+ TrustType type = 4;
+}
+
+// GrantTrustResponse represents the response after granting trust to a client certificate subject pattern
+// for accessing a keystore instance. Returns the access data of the configured trust
+message GrantTrustResponse {
+ google.protobuf.Struct access_data = 1;
+}
+
+// RemoveTrustRequest represents the request to remove trust for a client certificate subject pattern
+// to revoke access to a keystore instance.
+// - The config field contains the authentication configuration of the role management role for the keystore instance,
+// which is used to authenticate the request to remove trust.
+// - The access_data field contains the access data of the trust to be removed
+message RemoveTrustRequest {
+ plugin.keystore.common.v1.KeystoreInstanceConfig config = 1;
+ google.protobuf.Struct access_data = 2;
+}
+
+message RemoveTrustResponse {}
diff --git a/proto/plugin/keystore/management/v1/management_ext_plugin.pb.go b/proto/plugin/keystore/management/v1/management_ext_plugin.pb.go
index 8241336..76ce1ab 100644
--- a/proto/plugin/keystore/management/v1/management_ext_plugin.pb.go
+++ b/proto/plugin/keystore/management/v1/management_ext_plugin.pb.go
@@ -3,9 +3,8 @@
package managementv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
diff --git a/proto/plugin/keystore/management/v1/management_grpc.pb.go b/proto/plugin/keystore/management/v1/management_grpc.pb.go
index 0f12e10..ec9b6a6 100644
--- a/proto/plugin/keystore/management/v1/management_grpc.pb.go
+++ b/proto/plugin/keystore/management/v1/management_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: plugin/keystore/management/v1/management.proto
package managementv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
@@ -22,14 +21,22 @@ const _ = grpc.SupportPackageIsVersion9
const (
KeystoreProvider_CreateKeystore_FullMethodName = "/plugin.keystore.management.v1.KeystoreProvider/CreateKeystore"
KeystoreProvider_DeleteKeystore_FullMethodName = "/plugin.keystore.management.v1.KeystoreProvider/DeleteKeystore"
+ KeystoreProvider_GrantTrust_FullMethodName = "/plugin.keystore.management.v1.KeystoreProvider/GrantTrust"
+ KeystoreProvider_RemoveTrust_FullMethodName = "/plugin.keystore.management.v1.KeystoreProvider/RemoveTrust"
)
// KeystoreProviderClient is the client API for KeystoreProvider 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 KeystoreProviderClient interface {
+ // Create a new keystore instance
CreateKeystore(ctx context.Context, in *CreateKeystoreRequest, opts ...grpc.CallOption) (*CreateKeystoreResponse, error)
+ // Delete an existing keystore instance
DeleteKeystore(ctx context.Context, in *DeleteKeystoreRequest, opts ...grpc.CallOption) (*DeleteKeystoreResponse, error)
+ // Grant trust to a client certificate subject pattern for accessing the keystore instance
+ GrantTrust(ctx context.Context, in *GrantTrustRequest, opts ...grpc.CallOption) (*GrantTrustResponse, error)
+ // Remove trust for a client certificate subject pattern to revoke access to the keystore instance
+ RemoveTrust(ctx context.Context, in *RemoveTrustRequest, opts ...grpc.CallOption) (*RemoveTrustResponse, error)
}
type keystoreProviderClient struct {
@@ -60,12 +67,38 @@ func (c *keystoreProviderClient) DeleteKeystore(ctx context.Context, in *DeleteK
return out, nil
}
+func (c *keystoreProviderClient) GrantTrust(ctx context.Context, in *GrantTrustRequest, opts ...grpc.CallOption) (*GrantTrustResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(GrantTrustResponse)
+ err := c.cc.Invoke(ctx, KeystoreProvider_GrantTrust_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *keystoreProviderClient) RemoveTrust(ctx context.Context, in *RemoveTrustRequest, opts ...grpc.CallOption) (*RemoveTrustResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(RemoveTrustResponse)
+ err := c.cc.Invoke(ctx, KeystoreProvider_RemoveTrust_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
// KeystoreProviderServer is the server API for KeystoreProvider service.
// All implementations must embed UnimplementedKeystoreProviderServer
// for forward compatibility.
type KeystoreProviderServer interface {
+ // Create a new keystore instance
CreateKeystore(context.Context, *CreateKeystoreRequest) (*CreateKeystoreResponse, error)
+ // Delete an existing keystore instance
DeleteKeystore(context.Context, *DeleteKeystoreRequest) (*DeleteKeystoreResponse, error)
+ // Grant trust to a client certificate subject pattern for accessing the keystore instance
+ GrantTrust(context.Context, *GrantTrustRequest) (*GrantTrustResponse, error)
+ // Remove trust for a client certificate subject pattern to revoke access to the keystore instance
+ RemoveTrust(context.Context, *RemoveTrustRequest) (*RemoveTrustResponse, error)
mustEmbedUnimplementedKeystoreProviderServer()
}
@@ -82,6 +115,12 @@ func (UnimplementedKeystoreProviderServer) CreateKeystore(context.Context, *Crea
func (UnimplementedKeystoreProviderServer) DeleteKeystore(context.Context, *DeleteKeystoreRequest) (*DeleteKeystoreResponse, error) {
return nil, status.Error(codes.Unimplemented, "method DeleteKeystore not implemented")
}
+func (UnimplementedKeystoreProviderServer) GrantTrust(context.Context, *GrantTrustRequest) (*GrantTrustResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method GrantTrust not implemented")
+}
+func (UnimplementedKeystoreProviderServer) RemoveTrust(context.Context, *RemoveTrustRequest) (*RemoveTrustResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method RemoveTrust not implemented")
+}
func (UnimplementedKeystoreProviderServer) mustEmbedUnimplementedKeystoreProviderServer() {}
func (UnimplementedKeystoreProviderServer) testEmbeddedByValue() {}
@@ -139,6 +178,42 @@ func _KeystoreProvider_DeleteKeystore_Handler(srv interface{}, ctx context.Conte
return interceptor(ctx, in, info, handler)
}
+func _KeystoreProvider_GrantTrust_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GrantTrustRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(KeystoreProviderServer).GrantTrust(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: KeystoreProvider_GrantTrust_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeystoreProviderServer).GrantTrust(ctx, req.(*GrantTrustRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _KeystoreProvider_RemoveTrust_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(RemoveTrustRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(KeystoreProviderServer).RemoveTrust(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: KeystoreProvider_RemoveTrust_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeystoreProviderServer).RemoveTrust(ctx, req.(*RemoveTrustRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
// KeystoreProvider_ServiceDesc is the grpc.ServiceDesc for KeystoreProvider service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -154,6 +229,14 @@ var KeystoreProvider_ServiceDesc = grpc.ServiceDesc{
MethodName: "DeleteKeystore",
Handler: _KeystoreProvider_DeleteKeystore_Handler,
},
+ {
+ MethodName: "GrantTrust",
+ Handler: _KeystoreProvider_GrantTrust_Handler,
+ },
+ {
+ MethodName: "RemoveTrust",
+ Handler: _KeystoreProvider_RemoveTrust_Handler,
+ },
},
Streams: []grpc.StreamDesc{},
Metadata: "plugin/keystore/management/v1/management.proto",
diff --git a/proto/plugin/keystore/operations/v1/operations.pb.go b/proto/plugin/keystore/operations/v1/operations.pb.go
index f067d4a..7c0ac53 100644
--- a/proto/plugin/keystore/operations/v1/operations.pb.go
+++ b/proto/plugin/keystore/operations/v1/operations.pb.go
@@ -1,22 +1,20 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/keystore/operations/v1/operations.proto
package operationsv1
import (
- reflect "reflect"
- sync "sync"
- unsafe "unsafe"
-
+ v1 "github.com/openkcm/plugin-sdk/proto/plugin/keystore/common/v1"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
structpb "google.golang.org/protobuf/types/known/structpb"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
-
- v1 "github.com/openkcm/plugin-sdk/proto/plugin/keystore/common/v1"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
)
const (
@@ -313,6 +311,94 @@ func (x *GetKeyResponse) GetLatestRotationTime() *timestamppb.Timestamp {
return nil
}
+type GetKeyVersionsRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Parameters *RequestParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GetKeyVersionsRequest) Reset() {
+ *x = GetKeyVersionsRequest{}
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetKeyVersionsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetKeyVersionsRequest) ProtoMessage() {}
+
+func (x *GetKeyVersionsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetKeyVersionsRequest.ProtoReflect.Descriptor instead.
+func (*GetKeyVersionsRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GetKeyVersionsRequest) GetParameters() *RequestParameters {
+ if x != nil {
+ return x.Parameters
+ }
+ return nil
+}
+
+type GetKeyVersionsResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Versions []*GetKeyVersionsResponse_KeyVersion `protobuf:"bytes,1,rep,name=versions,proto3" json:"versions,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GetKeyVersionsResponse) Reset() {
+ *x = GetKeyVersionsResponse{}
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetKeyVersionsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetKeyVersionsResponse) ProtoMessage() {}
+
+func (x *GetKeyVersionsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetKeyVersionsResponse.ProtoReflect.Descriptor instead.
+func (*GetKeyVersionsResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GetKeyVersionsResponse) GetVersions() []*GetKeyVersionsResponse_KeyVersion {
+ if x != nil {
+ return x.Versions
+ }
+ return nil
+}
+
// CreateKeyRequest contains parameters for key creation
type CreateKeyRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
@@ -327,7 +413,7 @@ type CreateKeyRequest struct {
func (x *CreateKeyRequest) Reset() {
*x = CreateKeyRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[3]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -339,7 +425,7 @@ func (x *CreateKeyRequest) String() string {
func (*CreateKeyRequest) ProtoMessage() {}
func (x *CreateKeyRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[3]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -352,7 +438,7 @@ func (x *CreateKeyRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeyRequest.ProtoReflect.Descriptor instead.
func (*CreateKeyRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{3}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{5}
}
func (x *CreateKeyRequest) GetConfig() *v1.KeystoreInstanceConfig {
@@ -400,7 +486,7 @@ type CreateKeyResponse struct {
func (x *CreateKeyResponse) Reset() {
*x = CreateKeyResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[4]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -412,7 +498,7 @@ func (x *CreateKeyResponse) String() string {
func (*CreateKeyResponse) ProtoMessage() {}
func (x *CreateKeyResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[4]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -425,7 +511,7 @@ func (x *CreateKeyResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateKeyResponse.ProtoReflect.Descriptor instead.
func (*CreateKeyResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{4}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{6}
}
func (x *CreateKeyResponse) GetKeyId() string {
@@ -453,7 +539,7 @@ type DeleteKeyRequest struct {
func (x *DeleteKeyRequest) Reset() {
*x = DeleteKeyRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[5]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -465,7 +551,7 @@ func (x *DeleteKeyRequest) String() string {
func (*DeleteKeyRequest) ProtoMessage() {}
func (x *DeleteKeyRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[5]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -478,7 +564,7 @@ func (x *DeleteKeyRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteKeyRequest.ProtoReflect.Descriptor instead.
func (*DeleteKeyRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{5}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{7}
}
func (x *DeleteKeyRequest) GetParameters() *RequestParameters {
@@ -503,7 +589,7 @@ type DeleteKeyResponse struct {
func (x *DeleteKeyResponse) Reset() {
*x = DeleteKeyResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[6]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -515,7 +601,7 @@ func (x *DeleteKeyResponse) String() string {
func (*DeleteKeyResponse) ProtoMessage() {}
func (x *DeleteKeyResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[6]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -528,7 +614,7 @@ func (x *DeleteKeyResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteKeyResponse.ProtoReflect.Descriptor instead.
func (*DeleteKeyResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{6}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{8}
}
// EnableKeyRequest contains parameters for key enablement
@@ -541,7 +627,7 @@ type EnableKeyRequest struct {
func (x *EnableKeyRequest) Reset() {
*x = EnableKeyRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[7]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -553,7 +639,7 @@ func (x *EnableKeyRequest) String() string {
func (*EnableKeyRequest) ProtoMessage() {}
func (x *EnableKeyRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[7]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -566,7 +652,7 @@ func (x *EnableKeyRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use EnableKeyRequest.ProtoReflect.Descriptor instead.
func (*EnableKeyRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{7}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{9}
}
func (x *EnableKeyRequest) GetParameters() *RequestParameters {
@@ -584,7 +670,7 @@ type EnableKeyResponse struct {
func (x *EnableKeyResponse) Reset() {
*x = EnableKeyResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[8]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -596,7 +682,7 @@ func (x *EnableKeyResponse) String() string {
func (*EnableKeyResponse) ProtoMessage() {}
func (x *EnableKeyResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[8]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -609,7 +695,7 @@ func (x *EnableKeyResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use EnableKeyResponse.ProtoReflect.Descriptor instead.
func (*EnableKeyResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{8}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{10}
}
// DisableKeyRequest contains parameters for key disablement
@@ -622,7 +708,7 @@ type DisableKeyRequest struct {
func (x *DisableKeyRequest) Reset() {
*x = DisableKeyRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[9]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -634,7 +720,7 @@ func (x *DisableKeyRequest) String() string {
func (*DisableKeyRequest) ProtoMessage() {}
func (x *DisableKeyRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[9]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -647,7 +733,7 @@ func (x *DisableKeyRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DisableKeyRequest.ProtoReflect.Descriptor instead.
func (*DisableKeyRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{9}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{11}
}
func (x *DisableKeyRequest) GetParameters() *RequestParameters {
@@ -665,7 +751,7 @@ type DisableKeyResponse struct {
func (x *DisableKeyResponse) Reset() {
*x = DisableKeyResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[10]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -677,7 +763,7 @@ func (x *DisableKeyResponse) String() string {
func (*DisableKeyResponse) ProtoMessage() {}
func (x *DisableKeyResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[10]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -690,7 +776,7 @@ func (x *DisableKeyResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DisableKeyResponse.ProtoReflect.Descriptor instead.
func (*DisableKeyResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{10}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{12}
}
// GetImportParametersRequest contains parameters for retrieving import parameters
@@ -704,7 +790,7 @@ type GetImportParametersRequest struct {
func (x *GetImportParametersRequest) Reset() {
*x = GetImportParametersRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[11]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -716,7 +802,7 @@ func (x *GetImportParametersRequest) String() string {
func (*GetImportParametersRequest) ProtoMessage() {}
func (x *GetImportParametersRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[11]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[13]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -729,7 +815,7 @@ func (x *GetImportParametersRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetImportParametersRequest.ProtoReflect.Descriptor instead.
func (*GetImportParametersRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{11}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{13}
}
func (x *GetImportParametersRequest) GetParameters() *RequestParameters {
@@ -757,7 +843,7 @@ type GetImportParametersResponse struct {
func (x *GetImportParametersResponse) Reset() {
*x = GetImportParametersResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[12]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -769,7 +855,7 @@ func (x *GetImportParametersResponse) String() string {
func (*GetImportParametersResponse) ProtoMessage() {}
func (x *GetImportParametersResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[12]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[14]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -782,7 +868,7 @@ func (x *GetImportParametersResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetImportParametersResponse.ProtoReflect.Descriptor instead.
func (*GetImportParametersResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{12}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{14}
}
func (x *GetImportParametersResponse) GetKeyId() string {
@@ -811,7 +897,7 @@ type ImportKeyMaterialRequest struct {
func (x *ImportKeyMaterialRequest) Reset() {
*x = ImportKeyMaterialRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[13]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -823,7 +909,7 @@ func (x *ImportKeyMaterialRequest) String() string {
func (*ImportKeyMaterialRequest) ProtoMessage() {}
func (x *ImportKeyMaterialRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[13]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[15]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -836,7 +922,7 @@ func (x *ImportKeyMaterialRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ImportKeyMaterialRequest.ProtoReflect.Descriptor instead.
func (*ImportKeyMaterialRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{13}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{15}
}
func (x *ImportKeyMaterialRequest) GetParameters() *RequestParameters {
@@ -869,7 +955,7 @@ type ImportKeyMaterialResponse struct {
func (x *ImportKeyMaterialResponse) Reset() {
*x = ImportKeyMaterialResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[14]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -881,7 +967,7 @@ func (x *ImportKeyMaterialResponse) String() string {
func (*ImportKeyMaterialResponse) ProtoMessage() {}
func (x *ImportKeyMaterialResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[14]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[16]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -894,7 +980,7 @@ func (x *ImportKeyMaterialResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ImportKeyMaterialResponse.ProtoReflect.Descriptor instead.
func (*ImportKeyMaterialResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{14}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{16}
}
// ValidateKeyRequest contains parameters for validating key attributes
@@ -910,7 +996,7 @@ type ValidateKeyRequest struct {
func (x *ValidateKeyRequest) Reset() {
*x = ValidateKeyRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[15]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -922,7 +1008,7 @@ func (x *ValidateKeyRequest) String() string {
func (*ValidateKeyRequest) ProtoMessage() {}
func (x *ValidateKeyRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[15]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[17]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -935,7 +1021,7 @@ func (x *ValidateKeyRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateKeyRequest.ProtoReflect.Descriptor instead.
func (*ValidateKeyRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{15}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{17}
}
func (x *ValidateKeyRequest) GetKeyType() KeyType {
@@ -977,7 +1063,7 @@ type ValidateKeyResponse struct {
func (x *ValidateKeyResponse) Reset() {
*x = ValidateKeyResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[16]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -989,7 +1075,7 @@ func (x *ValidateKeyResponse) String() string {
func (*ValidateKeyResponse) ProtoMessage() {}
func (x *ValidateKeyResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[16]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[18]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1002,7 +1088,7 @@ func (x *ValidateKeyResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateKeyResponse.ProtoReflect.Descriptor instead.
func (*ValidateKeyResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{16}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{18}
}
func (x *ValidateKeyResponse) GetIsValid() bool {
@@ -1030,7 +1116,7 @@ type ValidateKeyAccessDataRequest struct {
func (x *ValidateKeyAccessDataRequest) Reset() {
*x = ValidateKeyAccessDataRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[17]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1042,7 +1128,7 @@ func (x *ValidateKeyAccessDataRequest) String() string {
func (*ValidateKeyAccessDataRequest) ProtoMessage() {}
func (x *ValidateKeyAccessDataRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[17]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[19]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1055,7 +1141,7 @@ func (x *ValidateKeyAccessDataRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateKeyAccessDataRequest.ProtoReflect.Descriptor instead.
func (*ValidateKeyAccessDataRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{17}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{19}
}
func (x *ValidateKeyAccessDataRequest) GetManagement() *structpb.Struct {
@@ -1083,7 +1169,7 @@ type ValidateKeyAccessDataResponse struct {
func (x *ValidateKeyAccessDataResponse) Reset() {
*x = ValidateKeyAccessDataResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[18]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1095,7 +1181,7 @@ func (x *ValidateKeyAccessDataResponse) String() string {
func (*ValidateKeyAccessDataResponse) ProtoMessage() {}
func (x *ValidateKeyAccessDataResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[18]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[20]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1108,7 +1194,7 @@ func (x *ValidateKeyAccessDataResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateKeyAccessDataResponse.ProtoReflect.Descriptor instead.
func (*ValidateKeyAccessDataResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{18}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{20}
}
func (x *ValidateKeyAccessDataResponse) GetIsValid() bool {
@@ -1136,7 +1222,7 @@ type TransformCryptoAccessDataRequest struct {
func (x *TransformCryptoAccessDataRequest) Reset() {
*x = TransformCryptoAccessDataRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[19]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1148,7 +1234,7 @@ func (x *TransformCryptoAccessDataRequest) String() string {
func (*TransformCryptoAccessDataRequest) ProtoMessage() {}
func (x *TransformCryptoAccessDataRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[19]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[21]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1161,7 +1247,7 @@ func (x *TransformCryptoAccessDataRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use TransformCryptoAccessDataRequest.ProtoReflect.Descriptor instead.
func (*TransformCryptoAccessDataRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{19}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{21}
}
func (x *TransformCryptoAccessDataRequest) GetNativeKeyId() string {
@@ -1188,7 +1274,7 @@ type TransformCryptoAccessDataResponse struct {
func (x *TransformCryptoAccessDataResponse) Reset() {
*x = TransformCryptoAccessDataResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[20]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1200,7 +1286,7 @@ func (x *TransformCryptoAccessDataResponse) String() string {
func (*TransformCryptoAccessDataResponse) ProtoMessage() {}
func (x *TransformCryptoAccessDataResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[20]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[22]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1213,7 +1299,7 @@ func (x *TransformCryptoAccessDataResponse) ProtoReflect() protoreflect.Message
// Deprecated: Use TransformCryptoAccessDataResponse.ProtoReflect.Descriptor instead.
func (*TransformCryptoAccessDataResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{20}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{22}
}
func (x *TransformCryptoAccessDataResponse) GetTransformedAccessData() map[string][]byte {
@@ -1234,7 +1320,7 @@ type ExtractKeyRegionRequest struct {
func (x *ExtractKeyRegionRequest) Reset() {
*x = ExtractKeyRegionRequest{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[21]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1246,7 +1332,7 @@ func (x *ExtractKeyRegionRequest) String() string {
func (*ExtractKeyRegionRequest) ProtoMessage() {}
func (x *ExtractKeyRegionRequest) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[21]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[23]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1259,7 +1345,7 @@ func (x *ExtractKeyRegionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExtractKeyRegionRequest.ProtoReflect.Descriptor instead.
func (*ExtractKeyRegionRequest) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{21}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{23}
}
func (x *ExtractKeyRegionRequest) GetNativeKeyId() string {
@@ -1286,7 +1372,7 @@ type ExtractKeyRegionResponse struct {
func (x *ExtractKeyRegionResponse) Reset() {
*x = ExtractKeyRegionResponse{}
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[22]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1298,7 +1384,7 @@ func (x *ExtractKeyRegionResponse) String() string {
func (*ExtractKeyRegionResponse) ProtoMessage() {}
func (x *ExtractKeyRegionResponse) ProtoReflect() protoreflect.Message {
- mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[22]
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[24]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1311,7 +1397,7 @@ func (x *ExtractKeyRegionResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExtractKeyRegionResponse.ProtoReflect.Descriptor instead.
func (*ExtractKeyRegionResponse) Descriptor() ([]byte, []int) {
- return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{22}
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{24}
}
func (x *ExtractKeyRegionResponse) GetRegion() string {
@@ -1321,6 +1407,66 @@ func (x *ExtractKeyRegionResponse) GetRegion() string {
return ""
}
+type GetKeyVersionsResponse_KeyVersion struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
+ CreationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"`
+ Status *string `protobuf:"bytes,3,opt,name=status,proto3,oneof" json:"status,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GetKeyVersionsResponse_KeyVersion) Reset() {
+ *x = GetKeyVersionsResponse_KeyVersion{}
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GetKeyVersionsResponse_KeyVersion) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetKeyVersionsResponse_KeyVersion) ProtoMessage() {}
+
+func (x *GetKeyVersionsResponse_KeyVersion) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_keystore_operations_v1_operations_proto_msgTypes[25]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetKeyVersionsResponse_KeyVersion.ProtoReflect.Descriptor instead.
+func (*GetKeyVersionsResponse_KeyVersion) Descriptor() ([]byte, []int) {
+ return file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP(), []int{4, 0}
+}
+
+func (x *GetKeyVersionsResponse_KeyVersion) GetVersionId() string {
+ if x != nil {
+ return x.VersionId
+ }
+ return ""
+}
+
+func (x *GetKeyVersionsResponse_KeyVersion) GetCreationTime() *timestamppb.Timestamp {
+ if x != nil {
+ return x.CreationTime
+ }
+ return nil
+}
+
+func (x *GetKeyVersionsResponse_KeyVersion) GetStatus() string {
+ if x != nil && x.Status != nil {
+ return *x.Status
+ }
+ return ""
+}
+
var File_plugin_keystore_operations_v1_operations_proto protoreflect.FileDescriptor
const file_plugin_keystore_operations_v1_operations_proto_rawDesc = "" +
@@ -1340,7 +1486,20 @@ const file_plugin_keystore_operations_v1_operations_proto_rawDesc = "" +
"\x05usage\x18\x04 \x01(\tR\x05usage\x121\n" +
"\x15latest_key_version_id\x18\x05 \x01(\tR\x12latestKeyVersionId\x12Q\n" +
"\x14latest_rotation_time\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampH\x00R\x12latestRotationTime\x88\x01\x01B\x17\n" +
- "\x15_latest_rotation_time\"\x9f\x02\n" +
+ "\x15_latest_rotation_time\"i\n" +
+ "\x15GetKeyVersionsRequest\x12P\n" +
+ "\n" +
+ "parameters\x18\x01 \x01(\v20.plugin.keystore.operations.v1.RequestParametersR\n" +
+ "parameters\"\x8d\x02\n" +
+ "\x16GetKeyVersionsResponse\x12\\\n" +
+ "\bversions\x18\x01 \x03(\v2@.plugin.keystore.operations.v1.GetKeyVersionsResponse.KeyVersionR\bversions\x1a\x94\x01\n" +
+ "\n" +
+ "KeyVersion\x12\x1d\n" +
+ "\n" +
+ "version_id\x18\x01 \x01(\tR\tversionId\x12?\n" +
+ "\rcreation_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\fcreationTime\x12\x1b\n" +
+ "\x06status\x18\x03 \x01(\tH\x00R\x06status\x88\x01\x01B\t\n" +
+ "\a_status\"\x9f\x02\n" +
"\x10CreateKeyRequest\x12I\n" +
"\x06config\x18\x01 \x01(\v21.plugin.keystore.common.v1.KeystoreInstanceConfigR\x06config\x12I\n" +
"\talgorithm\x18\x02 \x01(\x0e2+.plugin.keystore.operations.v1.KeyAlgorithmR\talgorithm\x12\x13\n" +
@@ -1422,9 +1581,10 @@ const file_plugin_keystore_operations_v1_operations_proto_rawDesc = "" +
"\x14KEY_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n" +
"\x17KEY_TYPE_SYSTEM_MANAGED\x10\x01\x12\x11\n" +
"\rKEY_TYPE_BYOK\x10\x02\x12\x11\n" +
- "\rKEY_TYPE_HYOK\x10\x032\x92\v\n" +
+ "\rKEY_TYPE_HYOK\x10\x032\x91\f\n" +
"\x1cKeystoreInstanceKeyOperation\x12e\n" +
- "\x06GetKey\x12,.plugin.keystore.operations.v1.GetKeyRequest\x1a-.plugin.keystore.operations.v1.GetKeyResponse\x12n\n" +
+ "\x06GetKey\x12,.plugin.keystore.operations.v1.GetKeyRequest\x1a-.plugin.keystore.operations.v1.GetKeyResponse\x12}\n" +
+ "\x0eGetKeyVersions\x124.plugin.keystore.operations.v1.GetKeyVersionsRequest\x1a5.plugin.keystore.operations.v1.GetKeyVersionsResponse\x12n\n" +
"\tCreateKey\x12/.plugin.keystore.operations.v1.CreateKeyRequest\x1a0.plugin.keystore.operations.v1.CreateKeyResponse\x12n\n" +
"\tDeleteKey\x12/.plugin.keystore.operations.v1.DeleteKeyRequest\x1a0.plugin.keystore.operations.v1.DeleteKeyResponse\x12n\n" +
"\tEnableKey\x12/.plugin.keystore.operations.v1.EnableKeyRequest\x1a0.plugin.keystore.operations.v1.EnableKeyResponse\x12q\n" +
@@ -1435,8 +1595,7 @@ const file_plugin_keystore_operations_v1_operations_proto_rawDesc = "" +
"\vValidateKey\x121.plugin.keystore.operations.v1.ValidateKeyRequest\x1a2.plugin.keystore.operations.v1.ValidateKeyResponse\x12\x92\x01\n" +
"\x15ValidateKeyAccessData\x12;.plugin.keystore.operations.v1.ValidateKeyAccessDataRequest\x1a<.plugin.keystore.operations.v1.ValidateKeyAccessDataResponse\x12\x9e\x01\n" +
"\x19TransformCryptoAccessData\x12?.plugin.keystore.operations.v1.TransformCryptoAccessDataRequest\x1a@.plugin.keystore.operations.v1.TransformCryptoAccessDataResponse\x12\x83\x01\n" +
- "\x10ExtractKeyRegion\x126.plugin.keystore.operations.v1.ExtractKeyRegionRequest\x1a7.plugin.keystore.operations.v1.ExtractKeyRegionResponseB\x9b\x02\n" +
- "!com.plugin.keystore.operations.v1B\x0fOperationsProtoP\x01ZNgithub.com/openkcm/plugin-sdk/proto/plugin/keystore/operations/v1;operationsv1\xa2\x02\x03PKO\xaa\x02\x1dPlugin.Keystore.Operations.V1\xca\x02\x1dPlugin\\Keystore\\Operations\\V1\xe2\x02)Plugin\\Keystore\\Operations\\V1\\GPBMetadata\xea\x02 Plugin::Keystore::Operations::V1b\x06proto3"
+ "\x10ExtractKeyRegion\x126.plugin.keystore.operations.v1.ExtractKeyRegionRequest\x1a7.plugin.keystore.operations.v1.ExtractKeyRegionResponseBPZNgithub.com/openkcm/plugin-sdk/proto/plugin/keystore/operations/v1;operationsv1b\x06proto3"
var (
file_plugin_keystore_operations_v1_operations_proto_rawDescOnce sync.Once
@@ -1451,87 +1610,95 @@ func file_plugin_keystore_operations_v1_operations_proto_rawDescGZIP() []byte {
}
var file_plugin_keystore_operations_v1_operations_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_plugin_keystore_operations_v1_operations_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
+var file_plugin_keystore_operations_v1_operations_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
var file_plugin_keystore_operations_v1_operations_proto_goTypes = []any{
(KeyAlgorithm)(0), // 0: plugin.keystore.operations.v1.KeyAlgorithm
(KeyType)(0), // 1: plugin.keystore.operations.v1.KeyType
(*RequestParameters)(nil), // 2: plugin.keystore.operations.v1.RequestParameters
(*GetKeyRequest)(nil), // 3: plugin.keystore.operations.v1.GetKeyRequest
(*GetKeyResponse)(nil), // 4: plugin.keystore.operations.v1.GetKeyResponse
- (*CreateKeyRequest)(nil), // 5: plugin.keystore.operations.v1.CreateKeyRequest
- (*CreateKeyResponse)(nil), // 6: plugin.keystore.operations.v1.CreateKeyResponse
- (*DeleteKeyRequest)(nil), // 7: plugin.keystore.operations.v1.DeleteKeyRequest
- (*DeleteKeyResponse)(nil), // 8: plugin.keystore.operations.v1.DeleteKeyResponse
- (*EnableKeyRequest)(nil), // 9: plugin.keystore.operations.v1.EnableKeyRequest
- (*EnableKeyResponse)(nil), // 10: plugin.keystore.operations.v1.EnableKeyResponse
- (*DisableKeyRequest)(nil), // 11: plugin.keystore.operations.v1.DisableKeyRequest
- (*DisableKeyResponse)(nil), // 12: plugin.keystore.operations.v1.DisableKeyResponse
- (*GetImportParametersRequest)(nil), // 13: plugin.keystore.operations.v1.GetImportParametersRequest
- (*GetImportParametersResponse)(nil), // 14: plugin.keystore.operations.v1.GetImportParametersResponse
- (*ImportKeyMaterialRequest)(nil), // 15: plugin.keystore.operations.v1.ImportKeyMaterialRequest
- (*ImportKeyMaterialResponse)(nil), // 16: plugin.keystore.operations.v1.ImportKeyMaterialResponse
- (*ValidateKeyRequest)(nil), // 17: plugin.keystore.operations.v1.ValidateKeyRequest
- (*ValidateKeyResponse)(nil), // 18: plugin.keystore.operations.v1.ValidateKeyResponse
- (*ValidateKeyAccessDataRequest)(nil), // 19: plugin.keystore.operations.v1.ValidateKeyAccessDataRequest
- (*ValidateKeyAccessDataResponse)(nil), // 20: plugin.keystore.operations.v1.ValidateKeyAccessDataResponse
- (*TransformCryptoAccessDataRequest)(nil), // 21: plugin.keystore.operations.v1.TransformCryptoAccessDataRequest
- (*TransformCryptoAccessDataResponse)(nil), // 22: plugin.keystore.operations.v1.TransformCryptoAccessDataResponse
- (*ExtractKeyRegionRequest)(nil), // 23: plugin.keystore.operations.v1.ExtractKeyRegionRequest
- (*ExtractKeyRegionResponse)(nil), // 24: plugin.keystore.operations.v1.ExtractKeyRegionResponse
- nil, // 25: plugin.keystore.operations.v1.TransformCryptoAccessDataResponse.TransformedAccessDataEntry
- (*v1.KeystoreInstanceConfig)(nil), // 26: plugin.keystore.common.v1.KeystoreInstanceConfig
- (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp
- (*structpb.Struct)(nil), // 28: google.protobuf.Struct
+ (*GetKeyVersionsRequest)(nil), // 5: plugin.keystore.operations.v1.GetKeyVersionsRequest
+ (*GetKeyVersionsResponse)(nil), // 6: plugin.keystore.operations.v1.GetKeyVersionsResponse
+ (*CreateKeyRequest)(nil), // 7: plugin.keystore.operations.v1.CreateKeyRequest
+ (*CreateKeyResponse)(nil), // 8: plugin.keystore.operations.v1.CreateKeyResponse
+ (*DeleteKeyRequest)(nil), // 9: plugin.keystore.operations.v1.DeleteKeyRequest
+ (*DeleteKeyResponse)(nil), // 10: plugin.keystore.operations.v1.DeleteKeyResponse
+ (*EnableKeyRequest)(nil), // 11: plugin.keystore.operations.v1.EnableKeyRequest
+ (*EnableKeyResponse)(nil), // 12: plugin.keystore.operations.v1.EnableKeyResponse
+ (*DisableKeyRequest)(nil), // 13: plugin.keystore.operations.v1.DisableKeyRequest
+ (*DisableKeyResponse)(nil), // 14: plugin.keystore.operations.v1.DisableKeyResponse
+ (*GetImportParametersRequest)(nil), // 15: plugin.keystore.operations.v1.GetImportParametersRequest
+ (*GetImportParametersResponse)(nil), // 16: plugin.keystore.operations.v1.GetImportParametersResponse
+ (*ImportKeyMaterialRequest)(nil), // 17: plugin.keystore.operations.v1.ImportKeyMaterialRequest
+ (*ImportKeyMaterialResponse)(nil), // 18: plugin.keystore.operations.v1.ImportKeyMaterialResponse
+ (*ValidateKeyRequest)(nil), // 19: plugin.keystore.operations.v1.ValidateKeyRequest
+ (*ValidateKeyResponse)(nil), // 20: plugin.keystore.operations.v1.ValidateKeyResponse
+ (*ValidateKeyAccessDataRequest)(nil), // 21: plugin.keystore.operations.v1.ValidateKeyAccessDataRequest
+ (*ValidateKeyAccessDataResponse)(nil), // 22: plugin.keystore.operations.v1.ValidateKeyAccessDataResponse
+ (*TransformCryptoAccessDataRequest)(nil), // 23: plugin.keystore.operations.v1.TransformCryptoAccessDataRequest
+ (*TransformCryptoAccessDataResponse)(nil), // 24: plugin.keystore.operations.v1.TransformCryptoAccessDataResponse
+ (*ExtractKeyRegionRequest)(nil), // 25: plugin.keystore.operations.v1.ExtractKeyRegionRequest
+ (*ExtractKeyRegionResponse)(nil), // 26: plugin.keystore.operations.v1.ExtractKeyRegionResponse
+ (*GetKeyVersionsResponse_KeyVersion)(nil), // 27: plugin.keystore.operations.v1.GetKeyVersionsResponse.KeyVersion
+ nil, // 28: plugin.keystore.operations.v1.TransformCryptoAccessDataResponse.TransformedAccessDataEntry
+ (*v1.KeystoreInstanceConfig)(nil), // 29: plugin.keystore.common.v1.KeystoreInstanceConfig
+ (*timestamppb.Timestamp)(nil), // 30: google.protobuf.Timestamp
+ (*structpb.Struct)(nil), // 31: google.protobuf.Struct
}
var file_plugin_keystore_operations_v1_operations_proto_depIdxs = []int32{
- 26, // 0: plugin.keystore.operations.v1.RequestParameters.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
+ 29, // 0: plugin.keystore.operations.v1.RequestParameters.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
2, // 1: plugin.keystore.operations.v1.GetKeyRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
0, // 2: plugin.keystore.operations.v1.GetKeyResponse.algorithm:type_name -> plugin.keystore.operations.v1.KeyAlgorithm
- 27, // 3: plugin.keystore.operations.v1.GetKeyResponse.latest_rotation_time:type_name -> google.protobuf.Timestamp
- 26, // 4: plugin.keystore.operations.v1.CreateKeyRequest.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
- 0, // 5: plugin.keystore.operations.v1.CreateKeyRequest.algorithm:type_name -> plugin.keystore.operations.v1.KeyAlgorithm
- 1, // 6: plugin.keystore.operations.v1.CreateKeyRequest.key_type:type_name -> plugin.keystore.operations.v1.KeyType
- 2, // 7: plugin.keystore.operations.v1.DeleteKeyRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
- 2, // 8: plugin.keystore.operations.v1.EnableKeyRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
- 2, // 9: plugin.keystore.operations.v1.DisableKeyRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
- 2, // 10: plugin.keystore.operations.v1.GetImportParametersRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
- 0, // 11: plugin.keystore.operations.v1.GetImportParametersRequest.algorithm:type_name -> plugin.keystore.operations.v1.KeyAlgorithm
- 28, // 12: plugin.keystore.operations.v1.GetImportParametersResponse.import_parameters:type_name -> google.protobuf.Struct
- 2, // 13: plugin.keystore.operations.v1.ImportKeyMaterialRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
- 28, // 14: plugin.keystore.operations.v1.ImportKeyMaterialRequest.import_parameters:type_name -> google.protobuf.Struct
- 1, // 15: plugin.keystore.operations.v1.ValidateKeyRequest.key_type:type_name -> plugin.keystore.operations.v1.KeyType
- 0, // 16: plugin.keystore.operations.v1.ValidateKeyRequest.algorithm:type_name -> plugin.keystore.operations.v1.KeyAlgorithm
- 28, // 17: plugin.keystore.operations.v1.ValidateKeyAccessDataRequest.management:type_name -> google.protobuf.Struct
- 28, // 18: plugin.keystore.operations.v1.ValidateKeyAccessDataRequest.crypto:type_name -> google.protobuf.Struct
- 25, // 19: plugin.keystore.operations.v1.TransformCryptoAccessDataResponse.transformed_access_data:type_name -> plugin.keystore.operations.v1.TransformCryptoAccessDataResponse.TransformedAccessDataEntry
- 28, // 20: plugin.keystore.operations.v1.ExtractKeyRegionRequest.management_access_data:type_name -> google.protobuf.Struct
- 3, // 21: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetKey:input_type -> plugin.keystore.operations.v1.GetKeyRequest
- 5, // 22: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.CreateKey:input_type -> plugin.keystore.operations.v1.CreateKeyRequest
- 7, // 23: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DeleteKey:input_type -> plugin.keystore.operations.v1.DeleteKeyRequest
- 9, // 24: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.EnableKey:input_type -> plugin.keystore.operations.v1.EnableKeyRequest
- 11, // 25: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DisableKey:input_type -> plugin.keystore.operations.v1.DisableKeyRequest
- 13, // 26: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetImportParameters:input_type -> plugin.keystore.operations.v1.GetImportParametersRequest
- 15, // 27: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ImportKeyMaterial:input_type -> plugin.keystore.operations.v1.ImportKeyMaterialRequest
- 17, // 28: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKey:input_type -> plugin.keystore.operations.v1.ValidateKeyRequest
- 19, // 29: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKeyAccessData:input_type -> plugin.keystore.operations.v1.ValidateKeyAccessDataRequest
- 21, // 30: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.TransformCryptoAccessData:input_type -> plugin.keystore.operations.v1.TransformCryptoAccessDataRequest
- 23, // 31: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ExtractKeyRegion:input_type -> plugin.keystore.operations.v1.ExtractKeyRegionRequest
- 4, // 32: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetKey:output_type -> plugin.keystore.operations.v1.GetKeyResponse
- 6, // 33: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.CreateKey:output_type -> plugin.keystore.operations.v1.CreateKeyResponse
- 8, // 34: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DeleteKey:output_type -> plugin.keystore.operations.v1.DeleteKeyResponse
- 10, // 35: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.EnableKey:output_type -> plugin.keystore.operations.v1.EnableKeyResponse
- 12, // 36: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DisableKey:output_type -> plugin.keystore.operations.v1.DisableKeyResponse
- 14, // 37: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetImportParameters:output_type -> plugin.keystore.operations.v1.GetImportParametersResponse
- 16, // 38: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ImportKeyMaterial:output_type -> plugin.keystore.operations.v1.ImportKeyMaterialResponse
- 18, // 39: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKey:output_type -> plugin.keystore.operations.v1.ValidateKeyResponse
- 20, // 40: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKeyAccessData:output_type -> plugin.keystore.operations.v1.ValidateKeyAccessDataResponse
- 22, // 41: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.TransformCryptoAccessData:output_type -> plugin.keystore.operations.v1.TransformCryptoAccessDataResponse
- 24, // 42: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ExtractKeyRegion:output_type -> plugin.keystore.operations.v1.ExtractKeyRegionResponse
- 32, // [32:43] is the sub-list for method output_type
- 21, // [21:32] is the sub-list for method input_type
- 21, // [21:21] is the sub-list for extension type_name
- 21, // [21:21] is the sub-list for extension extendee
- 0, // [0:21] is the sub-list for field type_name
+ 30, // 3: plugin.keystore.operations.v1.GetKeyResponse.latest_rotation_time:type_name -> google.protobuf.Timestamp
+ 2, // 4: plugin.keystore.operations.v1.GetKeyVersionsRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
+ 27, // 5: plugin.keystore.operations.v1.GetKeyVersionsResponse.versions:type_name -> plugin.keystore.operations.v1.GetKeyVersionsResponse.KeyVersion
+ 29, // 6: plugin.keystore.operations.v1.CreateKeyRequest.config:type_name -> plugin.keystore.common.v1.KeystoreInstanceConfig
+ 0, // 7: plugin.keystore.operations.v1.CreateKeyRequest.algorithm:type_name -> plugin.keystore.operations.v1.KeyAlgorithm
+ 1, // 8: plugin.keystore.operations.v1.CreateKeyRequest.key_type:type_name -> plugin.keystore.operations.v1.KeyType
+ 2, // 9: plugin.keystore.operations.v1.DeleteKeyRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
+ 2, // 10: plugin.keystore.operations.v1.EnableKeyRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
+ 2, // 11: plugin.keystore.operations.v1.DisableKeyRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
+ 2, // 12: plugin.keystore.operations.v1.GetImportParametersRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
+ 0, // 13: plugin.keystore.operations.v1.GetImportParametersRequest.algorithm:type_name -> plugin.keystore.operations.v1.KeyAlgorithm
+ 31, // 14: plugin.keystore.operations.v1.GetImportParametersResponse.import_parameters:type_name -> google.protobuf.Struct
+ 2, // 15: plugin.keystore.operations.v1.ImportKeyMaterialRequest.parameters:type_name -> plugin.keystore.operations.v1.RequestParameters
+ 31, // 16: plugin.keystore.operations.v1.ImportKeyMaterialRequest.import_parameters:type_name -> google.protobuf.Struct
+ 1, // 17: plugin.keystore.operations.v1.ValidateKeyRequest.key_type:type_name -> plugin.keystore.operations.v1.KeyType
+ 0, // 18: plugin.keystore.operations.v1.ValidateKeyRequest.algorithm:type_name -> plugin.keystore.operations.v1.KeyAlgorithm
+ 31, // 19: plugin.keystore.operations.v1.ValidateKeyAccessDataRequest.management:type_name -> google.protobuf.Struct
+ 31, // 20: plugin.keystore.operations.v1.ValidateKeyAccessDataRequest.crypto:type_name -> google.protobuf.Struct
+ 28, // 21: plugin.keystore.operations.v1.TransformCryptoAccessDataResponse.transformed_access_data:type_name -> plugin.keystore.operations.v1.TransformCryptoAccessDataResponse.TransformedAccessDataEntry
+ 31, // 22: plugin.keystore.operations.v1.ExtractKeyRegionRequest.management_access_data:type_name -> google.protobuf.Struct
+ 30, // 23: plugin.keystore.operations.v1.GetKeyVersionsResponse.KeyVersion.creation_time:type_name -> google.protobuf.Timestamp
+ 3, // 24: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetKey:input_type -> plugin.keystore.operations.v1.GetKeyRequest
+ 5, // 25: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetKeyVersions:input_type -> plugin.keystore.operations.v1.GetKeyVersionsRequest
+ 7, // 26: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.CreateKey:input_type -> plugin.keystore.operations.v1.CreateKeyRequest
+ 9, // 27: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DeleteKey:input_type -> plugin.keystore.operations.v1.DeleteKeyRequest
+ 11, // 28: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.EnableKey:input_type -> plugin.keystore.operations.v1.EnableKeyRequest
+ 13, // 29: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DisableKey:input_type -> plugin.keystore.operations.v1.DisableKeyRequest
+ 15, // 30: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetImportParameters:input_type -> plugin.keystore.operations.v1.GetImportParametersRequest
+ 17, // 31: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ImportKeyMaterial:input_type -> plugin.keystore.operations.v1.ImportKeyMaterialRequest
+ 19, // 32: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKey:input_type -> plugin.keystore.operations.v1.ValidateKeyRequest
+ 21, // 33: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKeyAccessData:input_type -> plugin.keystore.operations.v1.ValidateKeyAccessDataRequest
+ 23, // 34: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.TransformCryptoAccessData:input_type -> plugin.keystore.operations.v1.TransformCryptoAccessDataRequest
+ 25, // 35: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ExtractKeyRegion:input_type -> plugin.keystore.operations.v1.ExtractKeyRegionRequest
+ 4, // 36: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetKey:output_type -> plugin.keystore.operations.v1.GetKeyResponse
+ 6, // 37: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetKeyVersions:output_type -> plugin.keystore.operations.v1.GetKeyVersionsResponse
+ 8, // 38: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.CreateKey:output_type -> plugin.keystore.operations.v1.CreateKeyResponse
+ 10, // 39: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DeleteKey:output_type -> plugin.keystore.operations.v1.DeleteKeyResponse
+ 12, // 40: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.EnableKey:output_type -> plugin.keystore.operations.v1.EnableKeyResponse
+ 14, // 41: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.DisableKey:output_type -> plugin.keystore.operations.v1.DisableKeyResponse
+ 16, // 42: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.GetImportParameters:output_type -> plugin.keystore.operations.v1.GetImportParametersResponse
+ 18, // 43: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ImportKeyMaterial:output_type -> plugin.keystore.operations.v1.ImportKeyMaterialResponse
+ 20, // 44: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKey:output_type -> plugin.keystore.operations.v1.ValidateKeyResponse
+ 22, // 45: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ValidateKeyAccessData:output_type -> plugin.keystore.operations.v1.ValidateKeyAccessDataResponse
+ 24, // 46: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.TransformCryptoAccessData:output_type -> plugin.keystore.operations.v1.TransformCryptoAccessDataResponse
+ 26, // 47: plugin.keystore.operations.v1.KeystoreInstanceKeyOperation.ExtractKeyRegion:output_type -> plugin.keystore.operations.v1.ExtractKeyRegionResponse
+ 36, // [36:48] is the sub-list for method output_type
+ 24, // [24:36] is the sub-list for method input_type
+ 24, // [24:24] is the sub-list for extension type_name
+ 24, // [24:24] is the sub-list for extension extendee
+ 0, // [0:24] is the sub-list for field type_name
}
func init() { file_plugin_keystore_operations_v1_operations_proto_init() }
@@ -1540,15 +1707,16 @@ func file_plugin_keystore_operations_v1_operations_proto_init() {
return
}
file_plugin_keystore_operations_v1_operations_proto_msgTypes[2].OneofWrappers = []any{}
- file_plugin_keystore_operations_v1_operations_proto_msgTypes[3].OneofWrappers = []any{}
file_plugin_keystore_operations_v1_operations_proto_msgTypes[5].OneofWrappers = []any{}
+ file_plugin_keystore_operations_v1_operations_proto_msgTypes[7].OneofWrappers = []any{}
+ file_plugin_keystore_operations_v1_operations_proto_msgTypes[25].OneofWrappers = []any{}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_plugin_keystore_operations_v1_operations_proto_rawDesc), len(file_plugin_keystore_operations_v1_operations_proto_rawDesc)),
NumEnums: 2,
- NumMessages: 24,
+ NumMessages: 27,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/proto/plugin/keystore/operations/v1/operations.pb.validate.go b/proto/plugin/keystore/operations/v1/operations.pb.validate.go
deleted file mode 100644
index 1733174..0000000
--- a/proto/plugin/keystore/operations/v1/operations.pb.validate.go
+++ /dev/null
@@ -1,2853 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/keystore/operations/v1/operations.proto
-
-package operationsv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on RequestParameters with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *RequestParameters) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on RequestParameters with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// RequestParametersMultiError, or nil if none found.
-func (m *RequestParameters) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *RequestParameters) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetConfig()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, RequestParametersValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, RequestParametersValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return RequestParametersValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- // no validation rules for KeyId
-
- if len(errors) > 0 {
- return RequestParametersMultiError(errors)
- }
-
- return nil
-}
-
-// RequestParametersMultiError is an error wrapping multiple validation errors
-// returned by RequestParameters.ValidateAll() if the designated constraints
-// aren't met.
-type RequestParametersMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m RequestParametersMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m RequestParametersMultiError) AllErrors() []error { return m }
-
-// RequestParametersValidationError is the validation error returned by
-// RequestParameters.Validate if the designated constraints aren't met.
-type RequestParametersValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e RequestParametersValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e RequestParametersValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e RequestParametersValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e RequestParametersValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e RequestParametersValidationError) ErrorName() string {
- return "RequestParametersValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e RequestParametersValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sRequestParameters.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = RequestParametersValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = RequestParametersValidationError{}
-
-// Validate checks the field values on GetKeyRequest with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *GetKeyRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetKeyRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in GetKeyRequestMultiError, or
-// nil if none found.
-func (m *GetKeyRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetKeyRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetKeyRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetKeyRequestMultiError is an error wrapping multiple validation errors
-// returned by GetKeyRequest.ValidateAll() if the designated constraints
-// aren't met.
-type GetKeyRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetKeyRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetKeyRequestMultiError) AllErrors() []error { return m }
-
-// GetKeyRequestValidationError is the validation error returned by
-// GetKeyRequest.Validate if the designated constraints aren't met.
-type GetKeyRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetKeyRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetKeyRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetKeyRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetKeyRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetKeyRequestValidationError) ErrorName() string { return "GetKeyRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e GetKeyRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetKeyRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetKeyRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetKeyRequestValidationError{}
-
-// Validate checks the field values on GetKeyResponse with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *GetKeyResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetKeyResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in GetKeyResponseMultiError,
-// or nil if none found.
-func (m *GetKeyResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetKeyResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for KeyId
-
- // no validation rules for Algorithm
-
- // no validation rules for Status
-
- // no validation rules for Usage
-
- // no validation rules for LatestKeyVersionId
-
- if m.LatestRotationTime != nil {
-
- if all {
- switch v := interface{}(m.GetLatestRotationTime()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetKeyResponseValidationError{
- field: "LatestRotationTime",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetKeyResponseValidationError{
- field: "LatestRotationTime",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetLatestRotationTime()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetKeyResponseValidationError{
- field: "LatestRotationTime",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- }
-
- if len(errors) > 0 {
- return GetKeyResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetKeyResponseMultiError is an error wrapping multiple validation errors
-// returned by GetKeyResponse.ValidateAll() if the designated constraints
-// aren't met.
-type GetKeyResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetKeyResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetKeyResponseMultiError) AllErrors() []error { return m }
-
-// GetKeyResponseValidationError is the validation error returned by
-// GetKeyResponse.Validate if the designated constraints aren't met.
-type GetKeyResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetKeyResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetKeyResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetKeyResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetKeyResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetKeyResponseValidationError) ErrorName() string { return "GetKeyResponseValidationError" }
-
-// Error satisfies the builtin error interface
-func (e GetKeyResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetKeyResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetKeyResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetKeyResponseValidationError{}
-
-// Validate checks the field values on CreateKeyRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *CreateKeyRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on CreateKeyRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// CreateKeyRequestMultiError, or nil if none found.
-func (m *CreateKeyRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *CreateKeyRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetConfig()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, CreateKeyRequestValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, CreateKeyRequestValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return CreateKeyRequestValidationError{
- field: "Config",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- // no validation rules for Algorithm
-
- // no validation rules for Region
-
- // no validation rules for KeyType
-
- if m.Id != nil {
- // no validation rules for Id
- }
-
- if len(errors) > 0 {
- return CreateKeyRequestMultiError(errors)
- }
-
- return nil
-}
-
-// CreateKeyRequestMultiError is an error wrapping multiple validation errors
-// returned by CreateKeyRequest.ValidateAll() if the designated constraints
-// aren't met.
-type CreateKeyRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m CreateKeyRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m CreateKeyRequestMultiError) AllErrors() []error { return m }
-
-// CreateKeyRequestValidationError is the validation error returned by
-// CreateKeyRequest.Validate if the designated constraints aren't met.
-type CreateKeyRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e CreateKeyRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e CreateKeyRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e CreateKeyRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e CreateKeyRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e CreateKeyRequestValidationError) ErrorName() string { return "CreateKeyRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e CreateKeyRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sCreateKeyRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = CreateKeyRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = CreateKeyRequestValidationError{}
-
-// Validate checks the field values on CreateKeyResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *CreateKeyResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on CreateKeyResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// CreateKeyResponseMultiError, or nil if none found.
-func (m *CreateKeyResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *CreateKeyResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for KeyId
-
- // no validation rules for Status
-
- if len(errors) > 0 {
- return CreateKeyResponseMultiError(errors)
- }
-
- return nil
-}
-
-// CreateKeyResponseMultiError is an error wrapping multiple validation errors
-// returned by CreateKeyResponse.ValidateAll() if the designated constraints
-// aren't met.
-type CreateKeyResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m CreateKeyResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m CreateKeyResponseMultiError) AllErrors() []error { return m }
-
-// CreateKeyResponseValidationError is the validation error returned by
-// CreateKeyResponse.Validate if the designated constraints aren't met.
-type CreateKeyResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e CreateKeyResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e CreateKeyResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e CreateKeyResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e CreateKeyResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e CreateKeyResponseValidationError) ErrorName() string {
- return "CreateKeyResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e CreateKeyResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sCreateKeyResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = CreateKeyResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = CreateKeyResponseValidationError{}
-
-// Validate checks the field values on DeleteKeyRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *DeleteKeyRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DeleteKeyRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// DeleteKeyRequestMultiError, or nil if none found.
-func (m *DeleteKeyRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DeleteKeyRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, DeleteKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, DeleteKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return DeleteKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if m.Window != nil {
- // no validation rules for Window
- }
-
- if len(errors) > 0 {
- return DeleteKeyRequestMultiError(errors)
- }
-
- return nil
-}
-
-// DeleteKeyRequestMultiError is an error wrapping multiple validation errors
-// returned by DeleteKeyRequest.ValidateAll() if the designated constraints
-// aren't met.
-type DeleteKeyRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DeleteKeyRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DeleteKeyRequestMultiError) AllErrors() []error { return m }
-
-// DeleteKeyRequestValidationError is the validation error returned by
-// DeleteKeyRequest.Validate if the designated constraints aren't met.
-type DeleteKeyRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DeleteKeyRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DeleteKeyRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DeleteKeyRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DeleteKeyRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DeleteKeyRequestValidationError) ErrorName() string { return "DeleteKeyRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e DeleteKeyRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDeleteKeyRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DeleteKeyRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DeleteKeyRequestValidationError{}
-
-// Validate checks the field values on DeleteKeyResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *DeleteKeyResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DeleteKeyResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// DeleteKeyResponseMultiError, or nil if none found.
-func (m *DeleteKeyResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DeleteKeyResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return DeleteKeyResponseMultiError(errors)
- }
-
- return nil
-}
-
-// DeleteKeyResponseMultiError is an error wrapping multiple validation errors
-// returned by DeleteKeyResponse.ValidateAll() if the designated constraints
-// aren't met.
-type DeleteKeyResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DeleteKeyResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DeleteKeyResponseMultiError) AllErrors() []error { return m }
-
-// DeleteKeyResponseValidationError is the validation error returned by
-// DeleteKeyResponse.Validate if the designated constraints aren't met.
-type DeleteKeyResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DeleteKeyResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DeleteKeyResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DeleteKeyResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DeleteKeyResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DeleteKeyResponseValidationError) ErrorName() string {
- return "DeleteKeyResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e DeleteKeyResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDeleteKeyResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DeleteKeyResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DeleteKeyResponseValidationError{}
-
-// Validate checks the field values on EnableKeyRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *EnableKeyRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on EnableKeyRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// EnableKeyRequestMultiError, or nil if none found.
-func (m *EnableKeyRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *EnableKeyRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, EnableKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, EnableKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return EnableKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return EnableKeyRequestMultiError(errors)
- }
-
- return nil
-}
-
-// EnableKeyRequestMultiError is an error wrapping multiple validation errors
-// returned by EnableKeyRequest.ValidateAll() if the designated constraints
-// aren't met.
-type EnableKeyRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m EnableKeyRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m EnableKeyRequestMultiError) AllErrors() []error { return m }
-
-// EnableKeyRequestValidationError is the validation error returned by
-// EnableKeyRequest.Validate if the designated constraints aren't met.
-type EnableKeyRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e EnableKeyRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e EnableKeyRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e EnableKeyRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e EnableKeyRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e EnableKeyRequestValidationError) ErrorName() string { return "EnableKeyRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e EnableKeyRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sEnableKeyRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = EnableKeyRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = EnableKeyRequestValidationError{}
-
-// Validate checks the field values on EnableKeyResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *EnableKeyResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on EnableKeyResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// EnableKeyResponseMultiError, or nil if none found.
-func (m *EnableKeyResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *EnableKeyResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return EnableKeyResponseMultiError(errors)
- }
-
- return nil
-}
-
-// EnableKeyResponseMultiError is an error wrapping multiple validation errors
-// returned by EnableKeyResponse.ValidateAll() if the designated constraints
-// aren't met.
-type EnableKeyResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m EnableKeyResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m EnableKeyResponseMultiError) AllErrors() []error { return m }
-
-// EnableKeyResponseValidationError is the validation error returned by
-// EnableKeyResponse.Validate if the designated constraints aren't met.
-type EnableKeyResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e EnableKeyResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e EnableKeyResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e EnableKeyResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e EnableKeyResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e EnableKeyResponseValidationError) ErrorName() string {
- return "EnableKeyResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e EnableKeyResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sEnableKeyResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = EnableKeyResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = EnableKeyResponseValidationError{}
-
-// Validate checks the field values on DisableKeyRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *DisableKeyRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DisableKeyRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// DisableKeyRequestMultiError, or nil if none found.
-func (m *DisableKeyRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DisableKeyRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, DisableKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, DisableKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return DisableKeyRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return DisableKeyRequestMultiError(errors)
- }
-
- return nil
-}
-
-// DisableKeyRequestMultiError is an error wrapping multiple validation errors
-// returned by DisableKeyRequest.ValidateAll() if the designated constraints
-// aren't met.
-type DisableKeyRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DisableKeyRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DisableKeyRequestMultiError) AllErrors() []error { return m }
-
-// DisableKeyRequestValidationError is the validation error returned by
-// DisableKeyRequest.Validate if the designated constraints aren't met.
-type DisableKeyRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DisableKeyRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DisableKeyRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DisableKeyRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DisableKeyRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DisableKeyRequestValidationError) ErrorName() string {
- return "DisableKeyRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e DisableKeyRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDisableKeyRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DisableKeyRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DisableKeyRequestValidationError{}
-
-// Validate checks the field values on DisableKeyResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *DisableKeyResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on DisableKeyResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// DisableKeyResponseMultiError, or nil if none found.
-func (m *DisableKeyResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *DisableKeyResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return DisableKeyResponseMultiError(errors)
- }
-
- return nil
-}
-
-// DisableKeyResponseMultiError is an error wrapping multiple validation errors
-// returned by DisableKeyResponse.ValidateAll() if the designated constraints
-// aren't met.
-type DisableKeyResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m DisableKeyResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m DisableKeyResponseMultiError) AllErrors() []error { return m }
-
-// DisableKeyResponseValidationError is the validation error returned by
-// DisableKeyResponse.Validate if the designated constraints aren't met.
-type DisableKeyResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e DisableKeyResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DisableKeyResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DisableKeyResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DisableKeyResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DisableKeyResponseValidationError) ErrorName() string {
- return "DisableKeyResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e DisableKeyResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sDisableKeyResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = DisableKeyResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = DisableKeyResponseValidationError{}
-
-// Validate checks the field values on GetImportParametersRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetImportParametersRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetImportParametersRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetImportParametersRequestMultiError, or nil if none found.
-func (m *GetImportParametersRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetImportParametersRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetImportParametersRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetImportParametersRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetImportParametersRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- // no validation rules for Algorithm
-
- if len(errors) > 0 {
- return GetImportParametersRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetImportParametersRequestMultiError is an error wrapping multiple
-// validation errors returned by GetImportParametersRequest.ValidateAll() if
-// the designated constraints aren't met.
-type GetImportParametersRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetImportParametersRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetImportParametersRequestMultiError) AllErrors() []error { return m }
-
-// GetImportParametersRequestValidationError is the validation error returned
-// by GetImportParametersRequest.Validate if the designated constraints aren't met.
-type GetImportParametersRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetImportParametersRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetImportParametersRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetImportParametersRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetImportParametersRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetImportParametersRequestValidationError) ErrorName() string {
- return "GetImportParametersRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetImportParametersRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetImportParametersRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetImportParametersRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetImportParametersRequestValidationError{}
-
-// Validate checks the field values on GetImportParametersResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *GetImportParametersResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetImportParametersResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// GetImportParametersResponseMultiError, or nil if none found.
-func (m *GetImportParametersResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetImportParametersResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for KeyId
-
- if all {
- switch v := interface{}(m.GetImportParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, GetImportParametersResponseValidationError{
- field: "ImportParameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, GetImportParametersResponseValidationError{
- field: "ImportParameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetImportParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return GetImportParametersResponseValidationError{
- field: "ImportParameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return GetImportParametersResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetImportParametersResponseMultiError is an error wrapping multiple
-// validation errors returned by GetImportParametersResponse.ValidateAll() if
-// the designated constraints aren't met.
-type GetImportParametersResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetImportParametersResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetImportParametersResponseMultiError) AllErrors() []error { return m }
-
-// GetImportParametersResponseValidationError is the validation error returned
-// by GetImportParametersResponse.Validate if the designated constraints
-// aren't met.
-type GetImportParametersResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetImportParametersResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetImportParametersResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetImportParametersResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetImportParametersResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetImportParametersResponseValidationError) ErrorName() string {
- return "GetImportParametersResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e GetImportParametersResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetImportParametersResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetImportParametersResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetImportParametersResponseValidationError{}
-
-// Validate checks the field values on ImportKeyMaterialRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ImportKeyMaterialRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ImportKeyMaterialRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ImportKeyMaterialRequestMultiError, or nil if none found.
-func (m *ImportKeyMaterialRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ImportKeyMaterialRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, ImportKeyMaterialRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, ImportKeyMaterialRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return ImportKeyMaterialRequestValidationError{
- field: "Parameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if all {
- switch v := interface{}(m.GetImportParameters()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, ImportKeyMaterialRequestValidationError{
- field: "ImportParameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, ImportKeyMaterialRequestValidationError{
- field: "ImportParameters",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetImportParameters()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return ImportKeyMaterialRequestValidationError{
- field: "ImportParameters",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- // no validation rules for EncryptedKeyMaterial
-
- if len(errors) > 0 {
- return ImportKeyMaterialRequestMultiError(errors)
- }
-
- return nil
-}
-
-// ImportKeyMaterialRequestMultiError is an error wrapping multiple validation
-// errors returned by ImportKeyMaterialRequest.ValidateAll() if the designated
-// constraints aren't met.
-type ImportKeyMaterialRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ImportKeyMaterialRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ImportKeyMaterialRequestMultiError) AllErrors() []error { return m }
-
-// ImportKeyMaterialRequestValidationError is the validation error returned by
-// ImportKeyMaterialRequest.Validate if the designated constraints aren't met.
-type ImportKeyMaterialRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ImportKeyMaterialRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ImportKeyMaterialRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ImportKeyMaterialRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ImportKeyMaterialRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ImportKeyMaterialRequestValidationError) ErrorName() string {
- return "ImportKeyMaterialRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ImportKeyMaterialRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sImportKeyMaterialRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ImportKeyMaterialRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ImportKeyMaterialRequestValidationError{}
-
-// Validate checks the field values on ImportKeyMaterialResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ImportKeyMaterialResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ImportKeyMaterialResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ImportKeyMaterialResponseMultiError, or nil if none found.
-func (m *ImportKeyMaterialResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ImportKeyMaterialResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if len(errors) > 0 {
- return ImportKeyMaterialResponseMultiError(errors)
- }
-
- return nil
-}
-
-// ImportKeyMaterialResponseMultiError is an error wrapping multiple validation
-// errors returned by ImportKeyMaterialResponse.ValidateAll() if the
-// designated constraints aren't met.
-type ImportKeyMaterialResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ImportKeyMaterialResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ImportKeyMaterialResponseMultiError) AllErrors() []error { return m }
-
-// ImportKeyMaterialResponseValidationError is the validation error returned by
-// ImportKeyMaterialResponse.Validate if the designated constraints aren't met.
-type ImportKeyMaterialResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ImportKeyMaterialResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ImportKeyMaterialResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ImportKeyMaterialResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ImportKeyMaterialResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ImportKeyMaterialResponseValidationError) ErrorName() string {
- return "ImportKeyMaterialResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ImportKeyMaterialResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sImportKeyMaterialResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ImportKeyMaterialResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ImportKeyMaterialResponseValidationError{}
-
-// Validate checks the field values on ValidateKeyRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ValidateKeyRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ValidateKeyRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ValidateKeyRequestMultiError, or nil if none found.
-func (m *ValidateKeyRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ValidateKeyRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for KeyType
-
- // no validation rules for Algorithm
-
- // no validation rules for Region
-
- // no validation rules for NativeKeyId
-
- if len(errors) > 0 {
- return ValidateKeyRequestMultiError(errors)
- }
-
- return nil
-}
-
-// ValidateKeyRequestMultiError is an error wrapping multiple validation errors
-// returned by ValidateKeyRequest.ValidateAll() if the designated constraints
-// aren't met.
-type ValidateKeyRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ValidateKeyRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ValidateKeyRequestMultiError) AllErrors() []error { return m }
-
-// ValidateKeyRequestValidationError is the validation error returned by
-// ValidateKeyRequest.Validate if the designated constraints aren't met.
-type ValidateKeyRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ValidateKeyRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ValidateKeyRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ValidateKeyRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ValidateKeyRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ValidateKeyRequestValidationError) ErrorName() string {
- return "ValidateKeyRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ValidateKeyRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sValidateKeyRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ValidateKeyRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ValidateKeyRequestValidationError{}
-
-// Validate checks the field values on ValidateKeyResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ValidateKeyResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ValidateKeyResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ValidateKeyResponseMultiError, or nil if none found.
-func (m *ValidateKeyResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ValidateKeyResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for IsValid
-
- // no validation rules for Message
-
- if len(errors) > 0 {
- return ValidateKeyResponseMultiError(errors)
- }
-
- return nil
-}
-
-// ValidateKeyResponseMultiError is an error wrapping multiple validation
-// errors returned by ValidateKeyResponse.ValidateAll() if the designated
-// constraints aren't met.
-type ValidateKeyResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ValidateKeyResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ValidateKeyResponseMultiError) AllErrors() []error { return m }
-
-// ValidateKeyResponseValidationError is the validation error returned by
-// ValidateKeyResponse.Validate if the designated constraints aren't met.
-type ValidateKeyResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ValidateKeyResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ValidateKeyResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ValidateKeyResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ValidateKeyResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ValidateKeyResponseValidationError) ErrorName() string {
- return "ValidateKeyResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ValidateKeyResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sValidateKeyResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ValidateKeyResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ValidateKeyResponseValidationError{}
-
-// Validate checks the field values on ValidateKeyAccessDataRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ValidateKeyAccessDataRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ValidateKeyAccessDataRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ValidateKeyAccessDataRequestMultiError, or nil if none found.
-func (m *ValidateKeyAccessDataRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ValidateKeyAccessDataRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if all {
- switch v := interface{}(m.GetManagement()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, ValidateKeyAccessDataRequestValidationError{
- field: "Management",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, ValidateKeyAccessDataRequestValidationError{
- field: "Management",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetManagement()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return ValidateKeyAccessDataRequestValidationError{
- field: "Management",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if all {
- switch v := interface{}(m.GetCrypto()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, ValidateKeyAccessDataRequestValidationError{
- field: "Crypto",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, ValidateKeyAccessDataRequestValidationError{
- field: "Crypto",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetCrypto()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return ValidateKeyAccessDataRequestValidationError{
- field: "Crypto",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return ValidateKeyAccessDataRequestMultiError(errors)
- }
-
- return nil
-}
-
-// ValidateKeyAccessDataRequestMultiError is an error wrapping multiple
-// validation errors returned by ValidateKeyAccessDataRequest.ValidateAll() if
-// the designated constraints aren't met.
-type ValidateKeyAccessDataRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ValidateKeyAccessDataRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ValidateKeyAccessDataRequestMultiError) AllErrors() []error { return m }
-
-// ValidateKeyAccessDataRequestValidationError is the validation error returned
-// by ValidateKeyAccessDataRequest.Validate if the designated constraints
-// aren't met.
-type ValidateKeyAccessDataRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ValidateKeyAccessDataRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ValidateKeyAccessDataRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ValidateKeyAccessDataRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ValidateKeyAccessDataRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ValidateKeyAccessDataRequestValidationError) ErrorName() string {
- return "ValidateKeyAccessDataRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ValidateKeyAccessDataRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sValidateKeyAccessDataRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ValidateKeyAccessDataRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ValidateKeyAccessDataRequestValidationError{}
-
-// Validate checks the field values on ValidateKeyAccessDataResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ValidateKeyAccessDataResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ValidateKeyAccessDataResponse with
-// the rules defined in the proto definition for this message. If any rules
-// are violated, the result is a list of violation errors wrapped in
-// ValidateKeyAccessDataResponseMultiError, or nil if none found.
-func (m *ValidateKeyAccessDataResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ValidateKeyAccessDataResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for IsValid
-
- // no validation rules for Message
-
- if len(errors) > 0 {
- return ValidateKeyAccessDataResponseMultiError(errors)
- }
-
- return nil
-}
-
-// ValidateKeyAccessDataResponseMultiError is an error wrapping multiple
-// validation errors returned by ValidateKeyAccessDataResponse.ValidateAll()
-// if the designated constraints aren't met.
-type ValidateKeyAccessDataResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ValidateKeyAccessDataResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ValidateKeyAccessDataResponseMultiError) AllErrors() []error { return m }
-
-// ValidateKeyAccessDataResponseValidationError is the validation error
-// returned by ValidateKeyAccessDataResponse.Validate if the designated
-// constraints aren't met.
-type ValidateKeyAccessDataResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ValidateKeyAccessDataResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ValidateKeyAccessDataResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ValidateKeyAccessDataResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ValidateKeyAccessDataResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ValidateKeyAccessDataResponseValidationError) ErrorName() string {
- return "ValidateKeyAccessDataResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ValidateKeyAccessDataResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sValidateKeyAccessDataResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ValidateKeyAccessDataResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ValidateKeyAccessDataResponseValidationError{}
-
-// Validate checks the field values on TransformCryptoAccessDataRequest with
-// the rules defined in the proto definition for this message. If any rules
-// are violated, the first error encountered is returned, or nil if there are
-// no violations.
-func (m *TransformCryptoAccessDataRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on TransformCryptoAccessDataRequest with
-// the rules defined in the proto definition for this message. If any rules
-// are violated, the result is a list of violation errors wrapped in
-// TransformCryptoAccessDataRequestMultiError, or nil if none found.
-func (m *TransformCryptoAccessDataRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *TransformCryptoAccessDataRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for NativeKeyId
-
- // no validation rules for AccessData
-
- if len(errors) > 0 {
- return TransformCryptoAccessDataRequestMultiError(errors)
- }
-
- return nil
-}
-
-// TransformCryptoAccessDataRequestMultiError is an error wrapping multiple
-// validation errors returned by
-// TransformCryptoAccessDataRequest.ValidateAll() if the designated
-// constraints aren't met.
-type TransformCryptoAccessDataRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m TransformCryptoAccessDataRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m TransformCryptoAccessDataRequestMultiError) AllErrors() []error { return m }
-
-// TransformCryptoAccessDataRequestValidationError is the validation error
-// returned by TransformCryptoAccessDataRequest.Validate if the designated
-// constraints aren't met.
-type TransformCryptoAccessDataRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e TransformCryptoAccessDataRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TransformCryptoAccessDataRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TransformCryptoAccessDataRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TransformCryptoAccessDataRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TransformCryptoAccessDataRequestValidationError) ErrorName() string {
- return "TransformCryptoAccessDataRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e TransformCryptoAccessDataRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sTransformCryptoAccessDataRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = TransformCryptoAccessDataRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = TransformCryptoAccessDataRequestValidationError{}
-
-// Validate checks the field values on TransformCryptoAccessDataResponse with
-// the rules defined in the proto definition for this message. If any rules
-// are violated, the first error encountered is returned, or nil if there are
-// no violations.
-func (m *TransformCryptoAccessDataResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on TransformCryptoAccessDataResponse
-// with the rules defined in the proto definition for this message. If any
-// rules are violated, the result is a list of violation errors wrapped in
-// TransformCryptoAccessDataResponseMultiError, or nil if none found.
-func (m *TransformCryptoAccessDataResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *TransformCryptoAccessDataResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for TransformedAccessData
-
- if len(errors) > 0 {
- return TransformCryptoAccessDataResponseMultiError(errors)
- }
-
- return nil
-}
-
-// TransformCryptoAccessDataResponseMultiError is an error wrapping multiple
-// validation errors returned by
-// TransformCryptoAccessDataResponse.ValidateAll() if the designated
-// constraints aren't met.
-type TransformCryptoAccessDataResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m TransformCryptoAccessDataResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m TransformCryptoAccessDataResponseMultiError) AllErrors() []error { return m }
-
-// TransformCryptoAccessDataResponseValidationError is the validation error
-// returned by TransformCryptoAccessDataResponse.Validate if the designated
-// constraints aren't met.
-type TransformCryptoAccessDataResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e TransformCryptoAccessDataResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TransformCryptoAccessDataResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TransformCryptoAccessDataResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TransformCryptoAccessDataResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TransformCryptoAccessDataResponseValidationError) ErrorName() string {
- return "TransformCryptoAccessDataResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e TransformCryptoAccessDataResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sTransformCryptoAccessDataResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = TransformCryptoAccessDataResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = TransformCryptoAccessDataResponseValidationError{}
-
-// Validate checks the field values on ExtractKeyRegionRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ExtractKeyRegionRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ExtractKeyRegionRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ExtractKeyRegionRequestMultiError, or nil if none found.
-func (m *ExtractKeyRegionRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ExtractKeyRegionRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for NativeKeyId
-
- if all {
- switch v := interface{}(m.GetManagementAccessData()).(type) {
- case interface{ ValidateAll() error }:
- if err := v.ValidateAll(); err != nil {
- errors = append(errors, ExtractKeyRegionRequestValidationError{
- field: "ManagementAccessData",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- case interface{ Validate() error }:
- if err := v.Validate(); err != nil {
- errors = append(errors, ExtractKeyRegionRequestValidationError{
- field: "ManagementAccessData",
- reason: "embedded message failed validation",
- cause: err,
- })
- }
- }
- } else if v, ok := interface{}(m.GetManagementAccessData()).(interface{ Validate() error }); ok {
- if err := v.Validate(); err != nil {
- return ExtractKeyRegionRequestValidationError{
- field: "ManagementAccessData",
- reason: "embedded message failed validation",
- cause: err,
- }
- }
- }
-
- if len(errors) > 0 {
- return ExtractKeyRegionRequestMultiError(errors)
- }
-
- return nil
-}
-
-// ExtractKeyRegionRequestMultiError is an error wrapping multiple validation
-// errors returned by ExtractKeyRegionRequest.ValidateAll() if the designated
-// constraints aren't met.
-type ExtractKeyRegionRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ExtractKeyRegionRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ExtractKeyRegionRequestMultiError) AllErrors() []error { return m }
-
-// ExtractKeyRegionRequestValidationError is the validation error returned by
-// ExtractKeyRegionRequest.Validate if the designated constraints aren't met.
-type ExtractKeyRegionRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ExtractKeyRegionRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ExtractKeyRegionRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ExtractKeyRegionRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ExtractKeyRegionRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ExtractKeyRegionRequestValidationError) ErrorName() string {
- return "ExtractKeyRegionRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ExtractKeyRegionRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sExtractKeyRegionRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ExtractKeyRegionRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ExtractKeyRegionRequestValidationError{}
-
-// Validate checks the field values on ExtractKeyRegionResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *ExtractKeyRegionResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ExtractKeyRegionResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ExtractKeyRegionResponseMultiError, or nil if none found.
-func (m *ExtractKeyRegionResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ExtractKeyRegionResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Region
-
- if len(errors) > 0 {
- return ExtractKeyRegionResponseMultiError(errors)
- }
-
- return nil
-}
-
-// ExtractKeyRegionResponseMultiError is an error wrapping multiple validation
-// errors returned by ExtractKeyRegionResponse.ValidateAll() if the designated
-// constraints aren't met.
-type ExtractKeyRegionResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ExtractKeyRegionResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ExtractKeyRegionResponseMultiError) AllErrors() []error { return m }
-
-// ExtractKeyRegionResponseValidationError is the validation error returned by
-// ExtractKeyRegionResponse.Validate if the designated constraints aren't met.
-type ExtractKeyRegionResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ExtractKeyRegionResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ExtractKeyRegionResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ExtractKeyRegionResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ExtractKeyRegionResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ExtractKeyRegionResponseValidationError) ErrorName() string {
- return "ExtractKeyRegionResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ExtractKeyRegionResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sExtractKeyRegionResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ExtractKeyRegionResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ExtractKeyRegionResponseValidationError{}
diff --git a/proto/plugin/keystore/operations/v1/operations.proto b/proto/plugin/keystore/operations/v1/operations.proto
index cb5eeba..5bb8ef3 100644
--- a/proto/plugin/keystore/operations/v1/operations.proto
+++ b/proto/plugin/keystore/operations/v1/operations.proto
@@ -5,6 +5,8 @@ import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "plugin/keystore/common/v1/common.proto";
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/keystore/operations/v1;operationsv1";
+
// KeystoreInstanceKeyOperation service defines the operations available for key management
service KeystoreInstanceKeyOperation {
// GetKey retrieves the details of a key by its ID
@@ -14,6 +16,9 @@ service KeystoreInstanceKeyOperation {
// if the key does not exist
rpc GetKey(GetKeyRequest) returns (GetKeyResponse);
+ // GetKeyVersions retrieves all versions for a key
+ rpc GetKeyVersions(GetKeyVersionsRequest) returns (GetKeyVersionsResponse);
+
// CreateKey generates a new key with the specified algorithm
rpc CreateKey(CreateKeyRequest) returns (CreateKeyResponse);
@@ -80,6 +85,19 @@ message GetKeyResponse {
optional google.protobuf.Timestamp latest_rotation_time = 6; // The timestamp of the latest key rotation
}
+message GetKeyVersionsRequest {
+ RequestParameters parameters = 1;
+}
+
+message GetKeyVersionsResponse {
+ message KeyVersion {
+ string version_id = 1;
+ google.protobuf.Timestamp creation_time = 2;
+ optional string status = 3;
+ }
+ repeated KeyVersion versions = 1;
+}
+
// CreateKeyRequest contains parameters for key creation
message CreateKeyRequest {
plugin.keystore.common.v1.KeystoreInstanceConfig config = 1;
diff --git a/proto/plugin/keystore/operations/v1/operations_ext_plugin.pb.go b/proto/plugin/keystore/operations/v1/operations_ext_plugin.pb.go
index f7629b0..df24523 100644
--- a/proto/plugin/keystore/operations/v1/operations_ext_plugin.pb.go
+++ b/proto/plugin/keystore/operations/v1/operations_ext_plugin.pb.go
@@ -3,9 +3,8 @@
package operationsv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
diff --git a/proto/plugin/keystore/operations/v1/operations_grpc.pb.go b/proto/plugin/keystore/operations/v1/operations_grpc.pb.go
index eef81c3..5e722a2 100644
--- a/proto/plugin/keystore/operations/v1/operations_grpc.pb.go
+++ b/proto/plugin/keystore/operations/v1/operations_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: plugin/keystore/operations/v1/operations.proto
package operationsv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
@@ -21,6 +20,7 @@ const _ = grpc.SupportPackageIsVersion9
const (
KeystoreInstanceKeyOperation_GetKey_FullMethodName = "/plugin.keystore.operations.v1.KeystoreInstanceKeyOperation/GetKey"
+ KeystoreInstanceKeyOperation_GetKeyVersions_FullMethodName = "/plugin.keystore.operations.v1.KeystoreInstanceKeyOperation/GetKeyVersions"
KeystoreInstanceKeyOperation_CreateKey_FullMethodName = "/plugin.keystore.operations.v1.KeystoreInstanceKeyOperation/CreateKey"
KeystoreInstanceKeyOperation_DeleteKey_FullMethodName = "/plugin.keystore.operations.v1.KeystoreInstanceKeyOperation/DeleteKey"
KeystoreInstanceKeyOperation_EnableKey_FullMethodName = "/plugin.keystore.operations.v1.KeystoreInstanceKeyOperation/EnableKey"
@@ -45,6 +45,8 @@ type KeystoreInstanceKeyOperationClient interface {
// * Returns error "code = NotFound desc = key not found in the keystore provider"
// if the key does not exist
GetKey(ctx context.Context, in *GetKeyRequest, opts ...grpc.CallOption) (*GetKeyResponse, error)
+ // GetKeyVersions retrieves all versions for a key
+ GetKeyVersions(ctx context.Context, in *GetKeyVersionsRequest, opts ...grpc.CallOption) (*GetKeyVersionsResponse, error)
// CreateKey generates a new key with the specified algorithm
CreateKey(ctx context.Context, in *CreateKeyRequest, opts ...grpc.CallOption) (*CreateKeyResponse, error)
// DeleteKey removes a key, optionally with a deletion window
@@ -85,6 +87,16 @@ func (c *keystoreInstanceKeyOperationClient) GetKey(ctx context.Context, in *Get
return out, nil
}
+func (c *keystoreInstanceKeyOperationClient) GetKeyVersions(ctx context.Context, in *GetKeyVersionsRequest, opts ...grpc.CallOption) (*GetKeyVersionsResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(GetKeyVersionsResponse)
+ err := c.cc.Invoke(ctx, KeystoreInstanceKeyOperation_GetKeyVersions_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *keystoreInstanceKeyOperationClient) CreateKey(ctx context.Context, in *CreateKeyRequest, opts ...grpc.CallOption) (*CreateKeyResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(CreateKeyResponse)
@@ -197,6 +209,8 @@ type KeystoreInstanceKeyOperationServer interface {
// * Returns error "code = NotFound desc = key not found in the keystore provider"
// if the key does not exist
GetKey(context.Context, *GetKeyRequest) (*GetKeyResponse, error)
+ // GetKeyVersions retrieves all versions for a key
+ GetKeyVersions(context.Context, *GetKeyVersionsRequest) (*GetKeyVersionsResponse, error)
// CreateKey generates a new key with the specified algorithm
CreateKey(context.Context, *CreateKeyRequest) (*CreateKeyResponse, error)
// DeleteKey removes a key, optionally with a deletion window
@@ -230,6 +244,9 @@ type UnimplementedKeystoreInstanceKeyOperationServer struct{}
func (UnimplementedKeystoreInstanceKeyOperationServer) GetKey(context.Context, *GetKeyRequest) (*GetKeyResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetKey not implemented")
}
+func (UnimplementedKeystoreInstanceKeyOperationServer) GetKeyVersions(context.Context, *GetKeyVersionsRequest) (*GetKeyVersionsResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method GetKeyVersions not implemented")
+}
func (UnimplementedKeystoreInstanceKeyOperationServer) CreateKey(context.Context, *CreateKeyRequest) (*CreateKeyResponse, error) {
return nil, status.Error(codes.Unimplemented, "method CreateKey not implemented")
}
@@ -300,6 +317,24 @@ func _KeystoreInstanceKeyOperation_GetKey_Handler(srv interface{}, ctx context.C
return interceptor(ctx, in, info, handler)
}
+func _KeystoreInstanceKeyOperation_GetKeyVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetKeyVersionsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(KeystoreInstanceKeyOperationServer).GetKeyVersions(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: KeystoreInstanceKeyOperation_GetKeyVersions_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(KeystoreInstanceKeyOperationServer).GetKeyVersions(ctx, req.(*GetKeyVersionsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _KeystoreInstanceKeyOperation_CreateKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateKeyRequest)
if err := dec(in); err != nil {
@@ -491,6 +526,10 @@ var KeystoreInstanceKeyOperation_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetKey",
Handler: _KeystoreInstanceKeyOperation_GetKey_Handler,
},
+ {
+ MethodName: "GetKeyVersions",
+ Handler: _KeystoreInstanceKeyOperation_GetKeyVersions_Handler,
+ },
{
MethodName: "CreateKey",
Handler: _KeystoreInstanceKeyOperation_CreateKey_Handler,
diff --git a/proto/plugin/llm/v1/llm.pb.go b/proto/plugin/llm/v1/llm.pb.go
new file mode 100644
index 0000000..084794d
--- /dev/null
+++ b/proto/plugin/llm/v1/llm.pb.go
@@ -0,0 +1,438 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc (unknown)
+// source: plugin/llm/v1/llm.proto
+
+package llmv1
+
+import (
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+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)
+)
+
+// FindingSummary is a single rule-engine finding passed to the LLM for enrichment.
+// Only aggregate metrics are included — never key material or key IDs.
+type FindingSummary struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"`
+ Severity string `protobuf:"bytes,2,opt,name=severity,proto3" json:"severity,omitempty"`
+ Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
+ Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
+ // aggregate_metadata contains counts and names only (e.g. algorithm="AES-256", count="12").
+ AggregateMetadata map[string]string `protobuf:"bytes,5,rep,name=aggregate_metadata,json=aggregateMetadata,proto3" json:"aggregate_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *FindingSummary) Reset() {
+ *x = FindingSummary{}
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *FindingSummary) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FindingSummary) ProtoMessage() {}
+
+func (x *FindingSummary) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FindingSummary.ProtoReflect.Descriptor instead.
+func (*FindingSummary) Descriptor() ([]byte, []int) {
+ return file_plugin_llm_v1_llm_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *FindingSummary) GetCategory() string {
+ if x != nil {
+ return x.Category
+ }
+ return ""
+}
+
+func (x *FindingSummary) GetSeverity() string {
+ if x != nil {
+ return x.Severity
+ }
+ return ""
+}
+
+func (x *FindingSummary) GetTitle() string {
+ if x != nil {
+ return x.Title
+ }
+ return ""
+}
+
+func (x *FindingSummary) GetDescription() string {
+ if x != nil {
+ return x.Description
+ }
+ return ""
+}
+
+func (x *FindingSummary) GetAggregateMetadata() map[string]string {
+ if x != nil {
+ return x.AggregateMetadata
+ }
+ return nil
+}
+
+// EnrichedFinding contains LLM-enhanced descriptions for a single finding.
+type EnrichedFinding struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ EnrichedDescription string `protobuf:"bytes,1,opt,name=enriched_description,json=enrichedDescription,proto3" json:"enriched_description,omitempty"`
+ EnrichedRemediation string `protobuf:"bytes,2,opt,name=enriched_remediation,json=enrichedRemediation,proto3" json:"enriched_remediation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EnrichedFinding) Reset() {
+ *x = EnrichedFinding{}
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EnrichedFinding) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EnrichedFinding) ProtoMessage() {}
+
+func (x *EnrichedFinding) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EnrichedFinding.ProtoReflect.Descriptor instead.
+func (*EnrichedFinding) Descriptor() ([]byte, []int) {
+ return file_plugin_llm_v1_llm_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *EnrichedFinding) GetEnrichedDescription() string {
+ if x != nil {
+ return x.EnrichedDescription
+ }
+ return ""
+}
+
+func (x *EnrichedFinding) GetEnrichedRemediation() string {
+ if x != nil {
+ return x.EnrichedRemediation
+ }
+ return ""
+}
+
+type EnrichRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Findings []*FindingSummary `protobuf:"bytes,1,rep,name=findings,proto3" json:"findings,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EnrichRequest) Reset() {
+ *x = EnrichRequest{}
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EnrichRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EnrichRequest) ProtoMessage() {}
+
+func (x *EnrichRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EnrichRequest.ProtoReflect.Descriptor instead.
+func (*EnrichRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_llm_v1_llm_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *EnrichRequest) GetFindings() []*FindingSummary {
+ if x != nil {
+ return x.Findings
+ }
+ return nil
+}
+
+type EnrichResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Enriched []*EnrichedFinding `protobuf:"bytes,1,rep,name=enriched,proto3" json:"enriched,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EnrichResponse) Reset() {
+ *x = EnrichResponse{}
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EnrichResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EnrichResponse) ProtoMessage() {}
+
+func (x *EnrichResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EnrichResponse.ProtoReflect.Descriptor instead.
+func (*EnrichResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_llm_v1_llm_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *EnrichResponse) GetEnriched() []*EnrichedFinding {
+ if x != nil {
+ return x.Enriched
+ }
+ return nil
+}
+
+// AnswerRequest carries a free-form question and aggregate context signals.
+// context_signals must contain only counts and names — never key material.
+type AnswerRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Question string `protobuf:"bytes,1,opt,name=question,proto3" json:"question,omitempty"`
+ ContextSignals map[string]string `protobuf:"bytes,2,rep,name=context_signals,json=contextSignals,proto3" json:"context_signals,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *AnswerRequest) Reset() {
+ *x = AnswerRequest{}
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *AnswerRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnswerRequest) ProtoMessage() {}
+
+func (x *AnswerRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AnswerRequest.ProtoReflect.Descriptor instead.
+func (*AnswerRequest) Descriptor() ([]byte, []int) {
+ return file_plugin_llm_v1_llm_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *AnswerRequest) GetQuestion() string {
+ if x != nil {
+ return x.Question
+ }
+ return ""
+}
+
+func (x *AnswerRequest) GetContextSignals() map[string]string {
+ if x != nil {
+ return x.ContextSignals
+ }
+ return nil
+}
+
+type AnswerResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Answer string `protobuf:"bytes,1,opt,name=answer,proto3" json:"answer,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *AnswerResponse) Reset() {
+ *x = AnswerResponse{}
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *AnswerResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AnswerResponse) ProtoMessage() {}
+
+func (x *AnswerResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_plugin_llm_v1_llm_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AnswerResponse.ProtoReflect.Descriptor instead.
+func (*AnswerResponse) Descriptor() ([]byte, []int) {
+ return file_plugin_llm_v1_llm_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *AnswerResponse) GetAnswer() string {
+ if x != nil {
+ return x.Answer
+ }
+ return ""
+}
+
+var File_plugin_llm_v1_llm_proto protoreflect.FileDescriptor
+
+const file_plugin_llm_v1_llm_proto_rawDesc = "" +
+ "\n" +
+ "\x17plugin/llm/v1/llm.proto\x12\x15krypton.plugin.llm.v1\"\xb3\x02\n" +
+ "\x0eFindingSummary\x12\x1a\n" +
+ "\bcategory\x18\x01 \x01(\tR\bcategory\x12\x1a\n" +
+ "\bseverity\x18\x02 \x01(\tR\bseverity\x12\x14\n" +
+ "\x05title\x18\x03 \x01(\tR\x05title\x12 \n" +
+ "\vdescription\x18\x04 \x01(\tR\vdescription\x12k\n" +
+ "\x12aggregate_metadata\x18\x05 \x03(\v2<.krypton.plugin.llm.v1.FindingSummary.AggregateMetadataEntryR\x11aggregateMetadata\x1aD\n" +
+ "\x16AggregateMetadataEntry\x12\x10\n" +
+ "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
+ "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"w\n" +
+ "\x0fEnrichedFinding\x121\n" +
+ "\x14enriched_description\x18\x01 \x01(\tR\x13enrichedDescription\x121\n" +
+ "\x14enriched_remediation\x18\x02 \x01(\tR\x13enrichedRemediation\"R\n" +
+ "\rEnrichRequest\x12A\n" +
+ "\bfindings\x18\x01 \x03(\v2%.krypton.plugin.llm.v1.FindingSummaryR\bfindings\"T\n" +
+ "\x0eEnrichResponse\x12B\n" +
+ "\benriched\x18\x01 \x03(\v2&.krypton.plugin.llm.v1.EnrichedFindingR\benriched\"\xd1\x01\n" +
+ "\rAnswerRequest\x12\x1a\n" +
+ "\bquestion\x18\x01 \x01(\tR\bquestion\x12a\n" +
+ "\x0fcontext_signals\x18\x02 \x03(\v28.krypton.plugin.llm.v1.AnswerRequest.ContextSignalsEntryR\x0econtextSignals\x1aA\n" +
+ "\x13ContextSignalsEntry\x12\x10\n" +
+ "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
+ "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"(\n" +
+ "\x0eAnswerResponse\x12\x16\n" +
+ "\x06answer\x18\x01 \x01(\tR\x06answer2\xb3\x01\n" +
+ "\x03LLM\x12U\n" +
+ "\x06Enrich\x12$.krypton.plugin.llm.v1.EnrichRequest\x1a%.krypton.plugin.llm.v1.EnrichResponse\x12U\n" +
+ "\x06Answer\x12$.krypton.plugin.llm.v1.AnswerRequest\x1a%.krypton.plugin.llm.v1.AnswerResponseB\xd5\x01\n" +
+ "\x19com.krypton.plugin.llm.v1B\bLlmProtoP\x01Z7github.com/openkcm/plugin-sdk/proto/plugin/llm/v1;llmv1\xa2\x02\x03KPL\xaa\x02\x15Krypton.Plugin.Llm.V1\xca\x02\x15Krypton\\Plugin\\Llm\\V1\xe2\x02!Krypton\\Plugin\\Llm\\V1\\GPBMetadata\xea\x02\x18Krypton::Plugin::Llm::V1b\x06proto3"
+
+var (
+ file_plugin_llm_v1_llm_proto_rawDescOnce sync.Once
+ file_plugin_llm_v1_llm_proto_rawDescData []byte
+)
+
+func file_plugin_llm_v1_llm_proto_rawDescGZIP() []byte {
+ file_plugin_llm_v1_llm_proto_rawDescOnce.Do(func() {
+ file_plugin_llm_v1_llm_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_plugin_llm_v1_llm_proto_rawDesc), len(file_plugin_llm_v1_llm_proto_rawDesc)))
+ })
+ return file_plugin_llm_v1_llm_proto_rawDescData
+}
+
+var file_plugin_llm_v1_llm_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_plugin_llm_v1_llm_proto_goTypes = []any{
+ (*FindingSummary)(nil), // 0: krypton.plugin.llm.v1.FindingSummary
+ (*EnrichedFinding)(nil), // 1: krypton.plugin.llm.v1.EnrichedFinding
+ (*EnrichRequest)(nil), // 2: krypton.plugin.llm.v1.EnrichRequest
+ (*EnrichResponse)(nil), // 3: krypton.plugin.llm.v1.EnrichResponse
+ (*AnswerRequest)(nil), // 4: krypton.plugin.llm.v1.AnswerRequest
+ (*AnswerResponse)(nil), // 5: krypton.plugin.llm.v1.AnswerResponse
+ nil, // 6: krypton.plugin.llm.v1.FindingSummary.AggregateMetadataEntry
+ nil, // 7: krypton.plugin.llm.v1.AnswerRequest.ContextSignalsEntry
+}
+var file_plugin_llm_v1_llm_proto_depIdxs = []int32{
+ 6, // 0: krypton.plugin.llm.v1.FindingSummary.aggregate_metadata:type_name -> krypton.plugin.llm.v1.FindingSummary.AggregateMetadataEntry
+ 0, // 1: krypton.plugin.llm.v1.EnrichRequest.findings:type_name -> krypton.plugin.llm.v1.FindingSummary
+ 1, // 2: krypton.plugin.llm.v1.EnrichResponse.enriched:type_name -> krypton.plugin.llm.v1.EnrichedFinding
+ 7, // 3: krypton.plugin.llm.v1.AnswerRequest.context_signals:type_name -> krypton.plugin.llm.v1.AnswerRequest.ContextSignalsEntry
+ 2, // 4: krypton.plugin.llm.v1.LLM.Enrich:input_type -> krypton.plugin.llm.v1.EnrichRequest
+ 4, // 5: krypton.plugin.llm.v1.LLM.Answer:input_type -> krypton.plugin.llm.v1.AnswerRequest
+ 3, // 6: krypton.plugin.llm.v1.LLM.Enrich:output_type -> krypton.plugin.llm.v1.EnrichResponse
+ 5, // 7: krypton.plugin.llm.v1.LLM.Answer:output_type -> krypton.plugin.llm.v1.AnswerResponse
+ 6, // [6:8] is the sub-list for method output_type
+ 4, // [4:6] 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_plugin_llm_v1_llm_proto_init() }
+func file_plugin_llm_v1_llm_proto_init() {
+ if File_plugin_llm_v1_llm_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_plugin_llm_v1_llm_proto_rawDesc), len(file_plugin_llm_v1_llm_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 8,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_plugin_llm_v1_llm_proto_goTypes,
+ DependencyIndexes: file_plugin_llm_v1_llm_proto_depIdxs,
+ MessageInfos: file_plugin_llm_v1_llm_proto_msgTypes,
+ }.Build()
+ File_plugin_llm_v1_llm_proto = out.File
+ file_plugin_llm_v1_llm_proto_goTypes = nil
+ file_plugin_llm_v1_llm_proto_depIdxs = nil
+}
diff --git a/proto/plugin/llm/v1/llm.pb.validate.go b/proto/plugin/llm/v1/llm.pb.validate.go
new file mode 100644
index 0000000..bfe21ac
--- /dev/null
+++ b/proto/plugin/llm/v1/llm.pb.validate.go
@@ -0,0 +1,724 @@
+// Code generated by protoc-gen-validate. DO NOT EDIT.
+// source: plugin/llm/v1/llm.proto
+
+package llmv1
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "net"
+ "net/mail"
+ "net/url"
+ "regexp"
+ "sort"
+ "strings"
+ "time"
+ "unicode/utf8"
+
+ "google.golang.org/protobuf/types/known/anypb"
+)
+
+// ensure the imports are used
+var (
+ _ = bytes.MinRead
+ _ = errors.New("")
+ _ = fmt.Print
+ _ = utf8.UTFMax
+ _ = (*regexp.Regexp)(nil)
+ _ = (*strings.Reader)(nil)
+ _ = net.IPv4len
+ _ = time.Duration(0)
+ _ = (*url.URL)(nil)
+ _ = (*mail.Address)(nil)
+ _ = anypb.Any{}
+ _ = sort.Sort
+)
+
+// Validate checks the field values on FindingSummary with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *FindingSummary) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on FindingSummary with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in FindingSummaryMultiError,
+// or nil if none found.
+func (m *FindingSummary) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *FindingSummary) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Category
+
+ // no validation rules for Severity
+
+ // no validation rules for Title
+
+ // no validation rules for Description
+
+ // no validation rules for AggregateMetadata
+
+ if len(errors) > 0 {
+ return FindingSummaryMultiError(errors)
+ }
+
+ return nil
+}
+
+// FindingSummaryMultiError is an error wrapping multiple validation errors
+// returned by FindingSummary.ValidateAll() if the designated constraints
+// aren't met.
+type FindingSummaryMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m FindingSummaryMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m FindingSummaryMultiError) AllErrors() []error { return m }
+
+// FindingSummaryValidationError is the validation error returned by
+// FindingSummary.Validate if the designated constraints aren't met.
+type FindingSummaryValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e FindingSummaryValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e FindingSummaryValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e FindingSummaryValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e FindingSummaryValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e FindingSummaryValidationError) ErrorName() string { return "FindingSummaryValidationError" }
+
+// Error satisfies the builtin error interface
+func (e FindingSummaryValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sFindingSummary.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = FindingSummaryValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = FindingSummaryValidationError{}
+
+// Validate checks the field values on EnrichedFinding with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// first error encountered is returned, or nil if there are no violations.
+func (m *EnrichedFinding) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on EnrichedFinding with the rules
+// defined in the proto definition for this message. If any rules are
+// violated, the result is a list of violation errors wrapped in
+// EnrichedFindingMultiError, or nil if none found.
+func (m *EnrichedFinding) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *EnrichedFinding) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for EnrichedDescription
+
+ // no validation rules for EnrichedRemediation
+
+ if len(errors) > 0 {
+ return EnrichedFindingMultiError(errors)
+ }
+
+ return nil
+}
+
+// EnrichedFindingMultiError is an error wrapping multiple validation errors
+// returned by EnrichedFinding.ValidateAll() if the designated constraints
+// aren't met.
+type EnrichedFindingMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m EnrichedFindingMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m EnrichedFindingMultiError) AllErrors() []error { return m }
+
+// EnrichedFindingValidationError is the validation error returned by
+// EnrichedFinding.Validate if the designated constraints aren't met.
+type EnrichedFindingValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e EnrichedFindingValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e EnrichedFindingValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e EnrichedFindingValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e EnrichedFindingValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e EnrichedFindingValidationError) ErrorName() string { return "EnrichedFindingValidationError" }
+
+// Error satisfies the builtin error interface
+func (e EnrichedFindingValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sEnrichedFinding.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = EnrichedFindingValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = EnrichedFindingValidationError{}
+
+// Validate checks the field values on EnrichRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *EnrichRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on EnrichRequest with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in EnrichRequestMultiError, or
+// nil if none found.
+func (m *EnrichRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *EnrichRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ for idx, item := range m.GetFindings() {
+ _, _ = idx, item
+
+ if all {
+ switch v := interface{}(item).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, EnrichRequestValidationError{
+ field: fmt.Sprintf("Findings[%v]", idx),
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, EnrichRequestValidationError{
+ field: fmt.Sprintf("Findings[%v]", idx),
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return EnrichRequestValidationError{
+ field: fmt.Sprintf("Findings[%v]", idx),
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ }
+
+ if len(errors) > 0 {
+ return EnrichRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// EnrichRequestMultiError is an error wrapping multiple validation errors
+// returned by EnrichRequest.ValidateAll() if the designated constraints
+// aren't met.
+type EnrichRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m EnrichRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m EnrichRequestMultiError) AllErrors() []error { return m }
+
+// EnrichRequestValidationError is the validation error returned by
+// EnrichRequest.Validate if the designated constraints aren't met.
+type EnrichRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e EnrichRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e EnrichRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e EnrichRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e EnrichRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e EnrichRequestValidationError) ErrorName() string { return "EnrichRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e EnrichRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sEnrichRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = EnrichRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = EnrichRequestValidationError{}
+
+// Validate checks the field values on EnrichResponse with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *EnrichResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on EnrichResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in EnrichResponseMultiError,
+// or nil if none found.
+func (m *EnrichResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *EnrichResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ for idx, item := range m.GetEnriched() {
+ _, _ = idx, item
+
+ if all {
+ switch v := interface{}(item).(type) {
+ case interface{ ValidateAll() error }:
+ if err := v.ValidateAll(); err != nil {
+ errors = append(errors, EnrichResponseValidationError{
+ field: fmt.Sprintf("Enriched[%v]", idx),
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ case interface{ Validate() error }:
+ if err := v.Validate(); err != nil {
+ errors = append(errors, EnrichResponseValidationError{
+ field: fmt.Sprintf("Enriched[%v]", idx),
+ reason: "embedded message failed validation",
+ cause: err,
+ })
+ }
+ }
+ } else if v, ok := interface{}(item).(interface{ Validate() error }); ok {
+ if err := v.Validate(); err != nil {
+ return EnrichResponseValidationError{
+ field: fmt.Sprintf("Enriched[%v]", idx),
+ reason: "embedded message failed validation",
+ cause: err,
+ }
+ }
+ }
+
+ }
+
+ if len(errors) > 0 {
+ return EnrichResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// EnrichResponseMultiError is an error wrapping multiple validation errors
+// returned by EnrichResponse.ValidateAll() if the designated constraints
+// aren't met.
+type EnrichResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m EnrichResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m EnrichResponseMultiError) AllErrors() []error { return m }
+
+// EnrichResponseValidationError is the validation error returned by
+// EnrichResponse.Validate if the designated constraints aren't met.
+type EnrichResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e EnrichResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e EnrichResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e EnrichResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e EnrichResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e EnrichResponseValidationError) ErrorName() string { return "EnrichResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e EnrichResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sEnrichResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = EnrichResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = EnrichResponseValidationError{}
+
+// Validate checks the field values on AnswerRequest with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *AnswerRequest) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on AnswerRequest with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in AnswerRequestMultiError, or
+// nil if none found.
+func (m *AnswerRequest) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *AnswerRequest) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Question
+
+ // no validation rules for ContextSignals
+
+ if len(errors) > 0 {
+ return AnswerRequestMultiError(errors)
+ }
+
+ return nil
+}
+
+// AnswerRequestMultiError is an error wrapping multiple validation errors
+// returned by AnswerRequest.ValidateAll() if the designated constraints
+// aren't met.
+type AnswerRequestMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m AnswerRequestMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m AnswerRequestMultiError) AllErrors() []error { return m }
+
+// AnswerRequestValidationError is the validation error returned by
+// AnswerRequest.Validate if the designated constraints aren't met.
+type AnswerRequestValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e AnswerRequestValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e AnswerRequestValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e AnswerRequestValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e AnswerRequestValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e AnswerRequestValidationError) ErrorName() string { return "AnswerRequestValidationError" }
+
+// Error satisfies the builtin error interface
+func (e AnswerRequestValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sAnswerRequest.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = AnswerRequestValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = AnswerRequestValidationError{}
+
+// Validate checks the field values on AnswerResponse with the rules defined in
+// the proto definition for this message. If any rules are violated, the first
+// error encountered is returned, or nil if there are no violations.
+func (m *AnswerResponse) Validate() error {
+ return m.validate(false)
+}
+
+// ValidateAll checks the field values on AnswerResponse with the rules defined
+// in the proto definition for this message. If any rules are violated, the
+// result is a list of violation errors wrapped in AnswerResponseMultiError,
+// or nil if none found.
+func (m *AnswerResponse) ValidateAll() error {
+ return m.validate(true)
+}
+
+func (m *AnswerResponse) validate(all bool) error {
+ if m == nil {
+ return nil
+ }
+
+ var errors []error
+
+ // no validation rules for Answer
+
+ if len(errors) > 0 {
+ return AnswerResponseMultiError(errors)
+ }
+
+ return nil
+}
+
+// AnswerResponseMultiError is an error wrapping multiple validation errors
+// returned by AnswerResponse.ValidateAll() if the designated constraints
+// aren't met.
+type AnswerResponseMultiError []error
+
+// Error returns a concatenation of all the error messages it wraps.
+func (m AnswerResponseMultiError) Error() string {
+ msgs := make([]string, 0, len(m))
+ for _, err := range m {
+ msgs = append(msgs, err.Error())
+ }
+ return strings.Join(msgs, "; ")
+}
+
+// AllErrors returns a list of validation violation errors.
+func (m AnswerResponseMultiError) AllErrors() []error { return m }
+
+// AnswerResponseValidationError is the validation error returned by
+// AnswerResponse.Validate if the designated constraints aren't met.
+type AnswerResponseValidationError struct {
+ field string
+ reason string
+ cause error
+ key bool
+}
+
+// Field function returns field value.
+func (e AnswerResponseValidationError) Field() string { return e.field }
+
+// Reason function returns reason value.
+func (e AnswerResponseValidationError) Reason() string { return e.reason }
+
+// Cause function returns cause value.
+func (e AnswerResponseValidationError) Cause() error { return e.cause }
+
+// Key function returns key value.
+func (e AnswerResponseValidationError) Key() bool { return e.key }
+
+// ErrorName returns error name.
+func (e AnswerResponseValidationError) ErrorName() string { return "AnswerResponseValidationError" }
+
+// Error satisfies the builtin error interface
+func (e AnswerResponseValidationError) Error() string {
+ cause := ""
+ if e.cause != nil {
+ cause = fmt.Sprintf(" | caused by: %v", e.cause)
+ }
+
+ key := ""
+ if e.key {
+ key = "key for "
+ }
+
+ return fmt.Sprintf(
+ "invalid %sAnswerResponse.%s: %s%s",
+ key,
+ e.field,
+ e.reason,
+ cause)
+}
+
+var _ error = AnswerResponseValidationError{}
+
+var _ interface {
+ Field() string
+ Reason() string
+ Key() bool
+ Cause() error
+ ErrorName() string
+} = AnswerResponseValidationError{}
diff --git a/proto/plugin/llm/v1/llm.proto b/proto/plugin/llm/v1/llm.proto
new file mode 100644
index 0000000..2d8d46b
--- /dev/null
+++ b/proto/plugin/llm/v1/llm.proto
@@ -0,0 +1,52 @@
+syntax = "proto3";
+
+package krypton.plugin.llm.v1;
+
+// LLM is the plugin interface for AI language-model backends used by the
+// Advisor module. Only aggregate, privacy-safe statistics are ever transmitted —
+// no key material, no key IDs, and no principal names.
+service LLM {
+ // Enrich takes rule-engine findings (plain text, no sensitive data) and
+ // returns enriched descriptions and remediation steps.
+ rpc Enrich(EnrichRequest) returns (EnrichResponse);
+
+ // Answer responds to a free-form question about key posture using only the
+ // supplied aggregate signals — no key material, no key IDs, no principal names.
+ rpc Answer(AnswerRequest) returns (AnswerResponse);
+}
+
+// FindingSummary is a single rule-engine finding passed to the LLM for enrichment.
+// Only aggregate metrics are included — never key material or key IDs.
+message FindingSummary {
+ string category = 1;
+ string severity = 2;
+ string title = 3;
+ string description = 4;
+ // aggregate_metadata contains counts and names only (e.g. algorithm="AES-256", count="12").
+ map aggregate_metadata = 5;
+}
+
+// EnrichedFinding contains LLM-enhanced descriptions for a single finding.
+message EnrichedFinding {
+ string enriched_description = 1;
+ string enriched_remediation = 2;
+}
+
+message EnrichRequest {
+ repeated FindingSummary findings = 1;
+}
+
+message EnrichResponse {
+ repeated EnrichedFinding enriched = 1;
+}
+
+// AnswerRequest carries a free-form question and aggregate context signals.
+// context_signals must contain only counts and names — never key material.
+message AnswerRequest {
+ string question = 1;
+ map context_signals = 2;
+}
+
+message AnswerResponse {
+ string answer = 1;
+}
diff --git a/proto/plugin/llm/v1/llm_ext_plugin.pb.go b/proto/plugin/llm/v1/llm_ext_plugin.pb.go
new file mode 100644
index 0000000..45daed2
--- /dev/null
+++ b/proto/plugin/llm/v1/llm_ext_plugin.pb.go
@@ -0,0 +1,56 @@
+// Code generated by protoc-gen-go-extension. DO NOT EDIT.
+
+package llmv1
+
+import (
+ grpc "google.golang.org/grpc"
+
+ api "github.com/openkcm/plugin-sdk/api"
+)
+
+const (
+ Type = "LLM"
+ GRPCServiceFullName = "krypton.plugin.llm.v1.LLM"
+)
+
+func LLMPluginServer(server LLMServer) api.PluginServer {
+ return lLMPluginServer{LLMServer: server}
+}
+
+type lLMPluginServer struct {
+ LLMServer
+}
+
+func (s lLMPluginServer) Type() string {
+ return Type
+}
+
+func (s lLMPluginServer) GRPCServiceName() string {
+ return GRPCServiceFullName
+}
+
+func (s lLMPluginServer) RegisterServer(server *grpc.Server) any {
+ RegisterLLMServer(server, s.LLMServer)
+ return s.LLMServer
+}
+
+type LLMPluginClient struct {
+ LLMClient
+}
+
+func (s LLMPluginClient) Type() string {
+ return Type
+}
+
+func (c *LLMPluginClient) IsInitialized() bool {
+ return c.LLMClient != nil
+}
+
+func (c *LLMPluginClient) GRPCServiceName() string {
+ return GRPCServiceFullName
+}
+
+func (c *LLMPluginClient) InitClient(conn grpc.ClientConnInterface) any {
+ c.LLMClient = NewLLMClient(conn)
+ return c.LLMClient
+}
diff --git a/proto/plugin/llm/v1/llm_grpc.pb.go b/proto/plugin/llm/v1/llm_grpc.pb.go
new file mode 100644
index 0000000..70ce9a4
--- /dev/null
+++ b/proto/plugin/llm/v1/llm_grpc.pb.go
@@ -0,0 +1,176 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.6.1
+// - protoc (unknown)
+// source: plugin/llm/v1/llm.proto
+
+package llmv1
+
+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.64.0 or later.
+const _ = grpc.SupportPackageIsVersion9
+
+const (
+ LLM_Enrich_FullMethodName = "/krypton.plugin.llm.v1.LLM/Enrich"
+ LLM_Answer_FullMethodName = "/krypton.plugin.llm.v1.LLM/Answer"
+)
+
+// LLMClient is the client API for LLM 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.
+//
+// LLM is the plugin interface for AI language-model backends used by the
+// Advisor module. Only aggregate, privacy-safe statistics are ever transmitted —
+// no key material, no key IDs, and no principal names.
+type LLMClient interface {
+ // Enrich takes rule-engine findings (plain text, no sensitive data) and
+ // returns enriched descriptions and remediation steps.
+ Enrich(ctx context.Context, in *EnrichRequest, opts ...grpc.CallOption) (*EnrichResponse, error)
+ // Answer responds to a free-form question about key posture using only the
+ // supplied aggregate signals — no key material, no key IDs, no principal names.
+ Answer(ctx context.Context, in *AnswerRequest, opts ...grpc.CallOption) (*AnswerResponse, error)
+}
+
+type lLMClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewLLMClient(cc grpc.ClientConnInterface) LLMClient {
+ return &lLMClient{cc}
+}
+
+func (c *lLMClient) Enrich(ctx context.Context, in *EnrichRequest, opts ...grpc.CallOption) (*EnrichResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(EnrichResponse)
+ err := c.cc.Invoke(ctx, LLM_Enrich_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *lLMClient) Answer(ctx context.Context, in *AnswerRequest, opts ...grpc.CallOption) (*AnswerResponse, error) {
+ cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+ out := new(AnswerResponse)
+ err := c.cc.Invoke(ctx, LLM_Answer_FullMethodName, in, out, cOpts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// LLMServer is the server API for LLM service.
+// All implementations must embed UnimplementedLLMServer
+// for forward compatibility.
+//
+// LLM is the plugin interface for AI language-model backends used by the
+// Advisor module. Only aggregate, privacy-safe statistics are ever transmitted —
+// no key material, no key IDs, and no principal names.
+type LLMServer interface {
+ // Enrich takes rule-engine findings (plain text, no sensitive data) and
+ // returns enriched descriptions and remediation steps.
+ Enrich(context.Context, *EnrichRequest) (*EnrichResponse, error)
+ // Answer responds to a free-form question about key posture using only the
+ // supplied aggregate signals — no key material, no key IDs, no principal names.
+ Answer(context.Context, *AnswerRequest) (*AnswerResponse, error)
+ mustEmbedUnimplementedLLMServer()
+}
+
+// UnimplementedLLMServer must be embedded to have
+// forward compatible implementations.
+//
+// NOTE: this should be embedded by value instead of pointer to avoid a nil
+// pointer dereference when methods are called.
+type UnimplementedLLMServer struct{}
+
+func (UnimplementedLLMServer) Enrich(context.Context, *EnrichRequest) (*EnrichResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method Enrich not implemented")
+}
+func (UnimplementedLLMServer) Answer(context.Context, *AnswerRequest) (*AnswerResponse, error) {
+ return nil, status.Error(codes.Unimplemented, "method Answer not implemented")
+}
+func (UnimplementedLLMServer) mustEmbedUnimplementedLLMServer() {}
+func (UnimplementedLLMServer) testEmbeddedByValue() {}
+
+// UnsafeLLMServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to LLMServer will
+// result in compilation errors.
+type UnsafeLLMServer interface {
+ mustEmbedUnimplementedLLMServer()
+}
+
+func RegisterLLMServer(s grpc.ServiceRegistrar, srv LLMServer) {
+ // If the following call panics, it indicates UnimplementedLLMServer was
+ // embedded by pointer and is nil. This will cause panics if an
+ // unimplemented method is ever invoked, so we test this at initialization
+ // time to prevent it from happening at runtime later due to I/O.
+ if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
+ t.testEmbeddedByValue()
+ }
+ s.RegisterService(&LLM_ServiceDesc, srv)
+}
+
+func _LLM_Enrich_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(EnrichRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(LLMServer).Enrich(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: LLM_Enrich_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(LLMServer).Enrich(ctx, req.(*EnrichRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _LLM_Answer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(AnswerRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(LLMServer).Answer(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: LLM_Answer_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(LLMServer).Answer(ctx, req.(*AnswerRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// LLM_ServiceDesc is the grpc.ServiceDesc for LLM service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var LLM_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "krypton.plugin.llm.v1.LLM",
+ HandlerType: (*LLMServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Enrich",
+ Handler: _LLM_Enrich_Handler,
+ },
+ {
+ MethodName: "Answer",
+ Handler: _LLM_Answer_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "plugin/llm/v1/llm.proto",
+}
diff --git a/proto/plugin/notification/v1/notification.pb.go b/proto/plugin/notification/v1/notification.pb.go
index 91e7f74..a3b3f1a 100644
--- a/proto/plugin/notification/v1/notification.pb.go
+++ b/proto/plugin/notification/v1/notification.pb.go
@@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/notification/v1/notification.proto
package notificationv1
import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
@@ -215,8 +214,7 @@ const file_plugin_notification_v1_notification_proto_rawDesc = "" +
"\x16NOTIFICATION_TYPE_TEXT\x10\x02\x12\x19\n" +
"\x15NOTIFICATION_TYPE_WEB\x10\x032\x8c\x01\n" +
"\x13NotificationService\x12u\n" +
- "\x10SendNotification\x12/.plugin.notification.v1.SendNotificationRequest\x1a0.plugin.notification.v1.SendNotificationResponseB\xf4\x01\n" +
- "\x1acom.plugin.notification.v1B\x11NotificationProtoP\x01ZIgithub.com/openkcm/plugin-sdk/proto/plugin/notification/v1;notificationv1\xa2\x02\x03PNX\xaa\x02\x16Plugin.Notification.V1\xca\x02\x16Plugin\\Notification\\V1\xe2\x02\"Plugin\\Notification\\V1\\GPBMetadata\xea\x02\x18Plugin::Notification::V1b\x06proto3"
+ "\x10SendNotification\x12/.plugin.notification.v1.SendNotificationRequest\x1a0.plugin.notification.v1.SendNotificationResponseBKZIgithub.com/openkcm/plugin-sdk/proto/plugin/notification/v1;notificationv1b\x06proto3"
var (
file_plugin_notification_v1_notification_proto_rawDescOnce sync.Once
diff --git a/proto/plugin/notification/v1/notification.pb.validate.go b/proto/plugin/notification/v1/notification.pb.validate.go
deleted file mode 100644
index 4143db3..0000000
--- a/proto/plugin/notification/v1/notification.pb.validate.go
+++ /dev/null
@@ -1,250 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/notification/v1/notification.proto
-
-package notificationv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on SendNotificationRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *SendNotificationRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on SendNotificationRequest with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// SendNotificationRequestMultiError, or nil if none found.
-func (m *SendNotificationRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *SendNotificationRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for NotificationType
-
- // no validation rules for Subject
-
- // no validation rules for Body
-
- if len(errors) > 0 {
- return SendNotificationRequestMultiError(errors)
- }
-
- return nil
-}
-
-// SendNotificationRequestMultiError is an error wrapping multiple validation
-// errors returned by SendNotificationRequest.ValidateAll() if the designated
-// constraints aren't met.
-type SendNotificationRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m SendNotificationRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m SendNotificationRequestMultiError) AllErrors() []error { return m }
-
-// SendNotificationRequestValidationError is the validation error returned by
-// SendNotificationRequest.Validate if the designated constraints aren't met.
-type SendNotificationRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e SendNotificationRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e SendNotificationRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e SendNotificationRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e SendNotificationRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e SendNotificationRequestValidationError) ErrorName() string {
- return "SendNotificationRequestValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e SendNotificationRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sSendNotificationRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = SendNotificationRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = SendNotificationRequestValidationError{}
-
-// Validate checks the field values on SendNotificationResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the first error encountered is returned, or nil if there are no violations.
-func (m *SendNotificationResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on SendNotificationResponse with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// SendNotificationResponseMultiError, or nil if none found.
-func (m *SendNotificationResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *SendNotificationResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Success
-
- // no validation rules for Message
-
- if len(errors) > 0 {
- return SendNotificationResponseMultiError(errors)
- }
-
- return nil
-}
-
-// SendNotificationResponseMultiError is an error wrapping multiple validation
-// errors returned by SendNotificationResponse.ValidateAll() if the designated
-// constraints aren't met.
-type SendNotificationResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m SendNotificationResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m SendNotificationResponseMultiError) AllErrors() []error { return m }
-
-// SendNotificationResponseValidationError is the validation error returned by
-// SendNotificationResponse.Validate if the designated constraints aren't met.
-type SendNotificationResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e SendNotificationResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e SendNotificationResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e SendNotificationResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e SendNotificationResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e SendNotificationResponseValidationError) ErrorName() string {
- return "SendNotificationResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e SendNotificationResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sSendNotificationResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = SendNotificationResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = SendNotificationResponseValidationError{}
diff --git a/proto/plugin/notification/v1/notification.proto b/proto/plugin/notification/v1/notification.proto
index 169284a..8e2d711 100644
--- a/proto/plugin/notification/v1/notification.proto
+++ b/proto/plugin/notification/v1/notification.proto
@@ -1,6 +1,8 @@
syntax = "proto3";
package plugin.notification.v1;
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/notification/v1;notificationv1";
+
service NotificationService {
// SendNotification sends a notification to the specified recipients
rpc SendNotification(SendNotificationRequest) returns (SendNotificationResponse);
diff --git a/proto/plugin/notification/v1/notification_ext_plugin.pb.go b/proto/plugin/notification/v1/notification_ext_plugin.pb.go
index dd6783a..7554136 100644
--- a/proto/plugin/notification/v1/notification_ext_plugin.pb.go
+++ b/proto/plugin/notification/v1/notification_ext_plugin.pb.go
@@ -3,13 +3,12 @@
package notificationv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
- Type = "NotificationService"
+ Type = "Notification"
GRPCServiceFullName = "plugin.notification.v1.NotificationService"
)
diff --git a/proto/plugin/notification/v1/notification_grpc.pb.go b/proto/plugin/notification/v1/notification_grpc.pb.go
index 52d6536..adffff5 100644
--- a/proto/plugin/notification/v1/notification_grpc.pb.go
+++ b/proto/plugin/notification/v1/notification_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: plugin/notification/v1/notification.proto
package notificationv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
diff --git a/proto/plugin/systeminformation/v1/systeminformation.pb.go b/proto/plugin/systeminformation/v1/systeminformation.pb.go
index 298f3e0..3d0d27d 100644
--- a/proto/plugin/systeminformation/v1/systeminformation.pb.go
+++ b/proto/plugin/systeminformation/v1/systeminformation.pb.go
@@ -1,19 +1,18 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/systeminformation/v1/systeminformation.proto
package systeminformationv1
import (
- reflect "reflect"
- sync "sync"
- unsafe "unsafe"
-
_ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
)
const (
@@ -136,8 +135,7 @@ const file_plugin_systeminformation_v1_systeminformation_proto_rawDesc = "" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x012t\n" +
"\x18SystemInformationService\x12X\n" +
- "\x03Get\x12'.plugin.systeminformation.v1.GetRequest\x1a(.plugin.systeminformation.v1.GetResponseB\x9c\x02\n" +
- "\x1fcom.plugin.systeminformation.v1B\x16SysteminformationProtoP\x01ZSgithub.com/openkcm/plugin-sdk/proto/plugin/systeminformation/v1;systeminformationv1\xa2\x02\x03PSX\xaa\x02\x1bPlugin.Systeminformation.V1\xca\x02\x1bPlugin\\Systeminformation\\V1\xe2\x02'Plugin\\Systeminformation\\V1\\GPBMetadata\xea\x02\x1dPlugin::Systeminformation::V1b\x06proto3"
+ "\x03Get\x12'.plugin.systeminformation.v1.GetRequest\x1a(.plugin.systeminformation.v1.GetResponseBUZSgithub.com/openkcm/plugin-sdk/proto/plugin/systeminformation/v1;systeminformationv1b\x06proto3"
var (
file_plugin_systeminformation_v1_systeminformation_proto_rawDescOnce sync.Once
diff --git a/proto/plugin/systeminformation/v1/systeminformation.pb.validate.go b/proto/plugin/systeminformation/v1/systeminformation.pb.validate.go
deleted file mode 100644
index 699461c..0000000
--- a/proto/plugin/systeminformation/v1/systeminformation.pb.validate.go
+++ /dev/null
@@ -1,240 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/systeminformation/v1/systeminformation.proto
-
-package systeminformationv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on GetRequest with the rules defined in the
-// proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *GetRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetRequest with the rules defined in
-// the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in GetRequestMultiError, or
-// nil if none found.
-func (m *GetRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Id
-
- // no validation rules for Type
-
- if len(errors) > 0 {
- return GetRequestMultiError(errors)
- }
-
- return nil
-}
-
-// GetRequestMultiError is an error wrapping multiple validation errors
-// returned by GetRequest.ValidateAll() if the designated constraints aren't met.
-type GetRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetRequestMultiError) AllErrors() []error { return m }
-
-// GetRequestValidationError is the validation error returned by
-// GetRequest.Validate if the designated constraints aren't met.
-type GetRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetRequestValidationError) ErrorName() string { return "GetRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e GetRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetRequestValidationError{}
-
-// Validate checks the field values on GetResponse with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *GetResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on GetResponse with the rules defined in
-// the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in GetResponseMultiError, or
-// nil if none found.
-func (m *GetResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *GetResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Metadata
-
- if len(errors) > 0 {
- return GetResponseMultiError(errors)
- }
-
- return nil
-}
-
-// GetResponseMultiError is an error wrapping multiple validation errors
-// returned by GetResponse.ValidateAll() if the designated constraints aren't met.
-type GetResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m GetResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m GetResponseMultiError) AllErrors() []error { return m }
-
-// GetResponseValidationError is the validation error returned by
-// GetResponse.Validate if the designated constraints aren't met.
-type GetResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e GetResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e GetResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e GetResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e GetResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e GetResponseValidationError) ErrorName() string { return "GetResponseValidationError" }
-
-// Error satisfies the builtin error interface
-func (e GetResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sGetResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = GetResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = GetResponseValidationError{}
diff --git a/proto/plugin/systeminformation/v1/systeminformation.proto b/proto/plugin/systeminformation/v1/systeminformation.proto
index d103627..80ffea8 100644
--- a/proto/plugin/systeminformation/v1/systeminformation.proto
+++ b/proto/plugin/systeminformation/v1/systeminformation.proto
@@ -3,6 +3,8 @@ package plugin.systeminformation.v1;
import "buf/validate/validate.proto";
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/systeminformation/v1;systeminformationv1";
+
service SystemInformationService {
rpc Get(GetRequest) returns (GetResponse);
}
diff --git a/proto/plugin/systeminformation/v1/systeminformation_ext_plugin.pb.go b/proto/plugin/systeminformation/v1/systeminformation_ext_plugin.pb.go
index b2cb7a4..a01305b 100644
--- a/proto/plugin/systeminformation/v1/systeminformation_ext_plugin.pb.go
+++ b/proto/plugin/systeminformation/v1/systeminformation_ext_plugin.pb.go
@@ -3,13 +3,12 @@
package systeminformationv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
- Type = "SystemInformationService"
+ Type = "SystemInformation"
GRPCServiceFullName = "plugin.systeminformation.v1.SystemInformationService"
)
diff --git a/proto/plugin/systeminformation/v1/systeminformation_grpc.pb.go b/proto/plugin/systeminformation/v1/systeminformation_grpc.pb.go
index bf05e12..dcc330c 100644
--- a/proto/plugin/systeminformation/v1/systeminformation_grpc.pb.go
+++ b/proto/plugin/systeminformation/v1/systeminformation_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: plugin/systeminformation/v1/systeminformation.proto
package systeminformationv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
diff --git a/proto/plugin/systeminformation/v1/systeminformation_test.go b/proto/plugin/systeminformation/v1/systeminformation_test.go
deleted file mode 100644
index db6a7cf..0000000
--- a/proto/plugin/systeminformation/v1/systeminformation_test.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package systeminformationv1
-
-import "testing"
-
-func TestGetRequestTypeString(t *testing.T) {
- req := &GetRequest{
- Id: "id-1",
- Type: "SYSTEM",
- }
-
- if got := req.GetType(); got != "SYSTEM" {
- t.Fatalf("expected type SYSTEM, got %q", got)
- }
-}
diff --git a/proto/plugin/test/v1/test.pb.go b/proto/plugin/test/v1/test.pb.go
index 35982d9..6399f1c 100644
--- a/proto/plugin/test/v1/test.pb.go
+++ b/proto/plugin/test/v1/test.pb.go
@@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: plugin/test/v1/test.proto
package testv1
import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
@@ -120,8 +119,7 @@ const file_plugin_test_v1_test_proto_rawDesc = "" +
"\fTestResponse\x12\x1a\n" +
"\bresponse\x18\x01 \x01(\tR\bresponse2P\n" +
"\vTestService\x12A\n" +
- "\x04Test\x12\x1b.plugin.test.v1.TestRequest\x1a\x1c.plugin.test.v1.TestResponseB\xb4\x01\n" +
- "\x12com.plugin.test.v1B\tTestProtoP\x01Z9github.com/openkcm/plugin-sdk/proto/plugin/test/v1;testv1\xa2\x02\x03PTX\xaa\x02\x0ePlugin.Test.V1\xca\x02\x0ePlugin\\Test\\V1\xe2\x02\x1aPlugin\\Test\\V1\\GPBMetadata\xea\x02\x10Plugin::Test::V1b\x06proto3"
+ "\x04Test\x12\x1b.plugin.test.v1.TestRequest\x1a\x1c.plugin.test.v1.TestResponseB;Z9github.com/openkcm/plugin-sdk/proto/plugin/test/v1;testv1b\x06proto3"
var (
file_plugin_test_v1_test_proto_rawDescOnce sync.Once
diff --git a/proto/plugin/test/v1/test.pb.validate.go b/proto/plugin/test/v1/test.pb.validate.go
deleted file mode 100644
index c2dc489..0000000
--- a/proto/plugin/test/v1/test.pb.validate.go
+++ /dev/null
@@ -1,238 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: plugin/test/v1/test.proto
-
-package testv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on TestRequest with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *TestRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on TestRequest with the rules defined in
-// the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in TestRequestMultiError, or
-// nil if none found.
-func (m *TestRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *TestRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Request
-
- if len(errors) > 0 {
- return TestRequestMultiError(errors)
- }
-
- return nil
-}
-
-// TestRequestMultiError is an error wrapping multiple validation errors
-// returned by TestRequest.ValidateAll() if the designated constraints aren't met.
-type TestRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m TestRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m TestRequestMultiError) AllErrors() []error { return m }
-
-// TestRequestValidationError is the validation error returned by
-// TestRequest.Validate if the designated constraints aren't met.
-type TestRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e TestRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TestRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TestRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TestRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TestRequestValidationError) ErrorName() string { return "TestRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e TestRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sTestRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = TestRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = TestRequestValidationError{}
-
-// Validate checks the field values on TestResponse with the rules defined in
-// the proto definition for this message. If any rules are violated, the first
-// error encountered is returned, or nil if there are no violations.
-func (m *TestResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on TestResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// result is a list of violation errors wrapped in TestResponseMultiError, or
-// nil if none found.
-func (m *TestResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *TestResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for Response
-
- if len(errors) > 0 {
- return TestResponseMultiError(errors)
- }
-
- return nil
-}
-
-// TestResponseMultiError is an error wrapping multiple validation errors
-// returned by TestResponse.ValidateAll() if the designated constraints aren't met.
-type TestResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m TestResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m TestResponseMultiError) AllErrors() []error { return m }
-
-// TestResponseValidationError is the validation error returned by
-// TestResponse.Validate if the designated constraints aren't met.
-type TestResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e TestResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TestResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TestResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TestResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TestResponseValidationError) ErrorName() string { return "TestResponseValidationError" }
-
-// Error satisfies the builtin error interface
-func (e TestResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sTestResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = TestResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = TestResponseValidationError{}
diff --git a/proto/plugin/test/v1/test.proto b/proto/plugin/test/v1/test.proto
index b1be06f..59c3ad0 100644
--- a/proto/plugin/test/v1/test.proto
+++ b/proto/plugin/test/v1/test.proto
@@ -1,6 +1,8 @@
syntax = "proto3";
package plugin.test.v1;
+option go_package = "github.com/openkcm/plugin-sdk/proto/plugin/test/v1;testv1";
+
service TestService {
rpc Test(TestRequest) returns (TestResponse);
}
diff --git a/proto/plugin/test/v1/test_ext_plugin.pb.go b/proto/plugin/test/v1/test_ext_plugin.pb.go
index c51e1b9..7078613 100644
--- a/proto/plugin/test/v1/test_ext_plugin.pb.go
+++ b/proto/plugin/test/v1/test_ext_plugin.pb.go
@@ -3,13 +3,12 @@
package testv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
- Type = "TestService"
+ Type = "Test"
GRPCServiceFullName = "plugin.test.v1.TestService"
)
diff --git a/proto/plugin/test/v1/test_grpc.pb.go b/proto/plugin/test/v1/test_grpc.pb.go
index 9d03b08..a4a0fe2 100644
--- a/proto/plugin/test/v1/test_grpc.pb.go
+++ b/proto/plugin/test/v1/test_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: plugin/test/v1/test.proto
package testv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
diff --git a/proto/service/common/config/v1/config.pb.go b/proto/service/common/config/v1/config.pb.go
index accea24..4a1552b 100644
--- a/proto/service/common/config/v1/config.pb.go
+++ b/proto/service/common/config/v1/config.pb.go
@@ -1,18 +1,17 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.11
-// protoc (unknown)
+// protoc v7.35.1
// source: service/common/config/v1/config.proto
package configv1
import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
-
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
@@ -123,8 +122,7 @@ const file_service_common_config_v1_config_proto_rawDesc = "" +
"build_info\x18\x01 \x01(\tH\x00R\tbuildInfo\x88\x01\x01B\r\n" +
"\v_build_info2n\n" +
"\x06Config\x12d\n" +
- "\tConfigure\x12*.service.common.config.v1.ConfigureRequest\x1a+.service.common.config.v1.ConfigureResponseB\xf5\x01\n" +
- "\x1ccom.service.common.config.v1B\vConfigProtoP\x01ZEgithub.com/openkcm/plugin-sdk/proto/service/common/config/v1;configv1\xa2\x02\x03SCC\xaa\x02\x18Service.Common.Config.V1\xca\x02\x18Service\\Common\\Config\\V1\xe2\x02$Service\\Common\\Config\\V1\\GPBMetadata\xea\x02\x1bService::Common::Config::V1b\x06proto3"
+ "\tConfigure\x12*.service.common.config.v1.ConfigureRequest\x1a+.service.common.config.v1.ConfigureResponseBGZEgithub.com/openkcm/plugin-sdk/proto/service/common/config/v1;configv1b\x06proto3"
var (
file_service_common_config_v1_config_proto_rawDescOnce sync.Once
diff --git a/proto/service/common/config/v1/config.pb.validate.go b/proto/service/common/config/v1/config.pb.validate.go
deleted file mode 100644
index bcd9b9d..0000000
--- a/proto/service/common/config/v1/config.pb.validate.go
+++ /dev/null
@@ -1,244 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: service/common/config/v1/config.proto
-
-package configv1
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "net/mail"
- "net/url"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode/utf8"
-
- "google.golang.org/protobuf/types/known/anypb"
-)
-
-// ensure the imports are used
-var (
- _ = bytes.MinRead
- _ = errors.New("")
- _ = fmt.Print
- _ = utf8.UTFMax
- _ = (*regexp.Regexp)(nil)
- _ = (*strings.Reader)(nil)
- _ = net.IPv4len
- _ = time.Duration(0)
- _ = (*url.URL)(nil)
- _ = (*mail.Address)(nil)
- _ = anypb.Any{}
- _ = sort.Sort
-)
-
-// Validate checks the field values on ConfigureRequest with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *ConfigureRequest) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ConfigureRequest with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ConfigureRequestMultiError, or nil if none found.
-func (m *ConfigureRequest) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ConfigureRequest) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- // no validation rules for YamlConfiguration
-
- if len(errors) > 0 {
- return ConfigureRequestMultiError(errors)
- }
-
- return nil
-}
-
-// ConfigureRequestMultiError is an error wrapping multiple validation errors
-// returned by ConfigureRequest.ValidateAll() if the designated constraints
-// aren't met.
-type ConfigureRequestMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ConfigureRequestMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ConfigureRequestMultiError) AllErrors() []error { return m }
-
-// ConfigureRequestValidationError is the validation error returned by
-// ConfigureRequest.Validate if the designated constraints aren't met.
-type ConfigureRequestValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ConfigureRequestValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ConfigureRequestValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ConfigureRequestValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ConfigureRequestValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ConfigureRequestValidationError) ErrorName() string { return "ConfigureRequestValidationError" }
-
-// Error satisfies the builtin error interface
-func (e ConfigureRequestValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sConfigureRequest.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ConfigureRequestValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ConfigureRequestValidationError{}
-
-// Validate checks the field values on ConfigureResponse with the rules defined
-// in the proto definition for this message. If any rules are violated, the
-// first error encountered is returned, or nil if there are no violations.
-func (m *ConfigureResponse) Validate() error {
- return m.validate(false)
-}
-
-// ValidateAll checks the field values on ConfigureResponse with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, the result is a list of violation errors wrapped in
-// ConfigureResponseMultiError, or nil if none found.
-func (m *ConfigureResponse) ValidateAll() error {
- return m.validate(true)
-}
-
-func (m *ConfigureResponse) validate(all bool) error {
- if m == nil {
- return nil
- }
-
- var errors []error
-
- if m.BuildInfo != nil {
- // no validation rules for BuildInfo
- }
-
- if len(errors) > 0 {
- return ConfigureResponseMultiError(errors)
- }
-
- return nil
-}
-
-// ConfigureResponseMultiError is an error wrapping multiple validation errors
-// returned by ConfigureResponse.ValidateAll() if the designated constraints
-// aren't met.
-type ConfigureResponseMultiError []error
-
-// Error returns a concatenation of all the error messages it wraps.
-func (m ConfigureResponseMultiError) Error() string {
- msgs := make([]string, 0, len(m))
- for _, err := range m {
- msgs = append(msgs, err.Error())
- }
- return strings.Join(msgs, "; ")
-}
-
-// AllErrors returns a list of validation violation errors.
-func (m ConfigureResponseMultiError) AllErrors() []error { return m }
-
-// ConfigureResponseValidationError is the validation error returned by
-// ConfigureResponse.Validate if the designated constraints aren't met.
-type ConfigureResponseValidationError struct {
- field string
- reason string
- cause error
- key bool
-}
-
-// Field function returns field value.
-func (e ConfigureResponseValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ConfigureResponseValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ConfigureResponseValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ConfigureResponseValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ConfigureResponseValidationError) ErrorName() string {
- return "ConfigureResponseValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ConfigureResponseValidationError) Error() string {
- cause := ""
- if e.cause != nil {
- cause = fmt.Sprintf(" | caused by: %v", e.cause)
- }
-
- key := ""
- if e.key {
- key = "key for "
- }
-
- return fmt.Sprintf(
- "invalid %sConfigureResponse.%s: %s%s",
- key,
- e.field,
- e.reason,
- cause)
-}
-
-var _ error = ConfigureResponseValidationError{}
-
-var _ interface {
- Field() string
- Reason() string
- Key() bool
- Cause() error
- ErrorName() string
-} = ConfigureResponseValidationError{}
diff --git a/proto/service/common/config/v1/config.proto b/proto/service/common/config/v1/config.proto
index 7846455..6b3a73d 100644
--- a/proto/service/common/config/v1/config.proto
+++ b/proto/service/common/config/v1/config.proto
@@ -1,6 +1,8 @@
syntax = "proto3";
package service.common.config.v1;
+option go_package = "github.com/openkcm/plugin-sdk/proto/service/common/config/v1;configv1";
+
service Config {
// Configure the plugin with the plugin specific configuration data and a set the core configuration. It is
// currently called when the plugin is first loaded after it has been initialized. At a future point, it may
diff --git a/proto/service/common/config/v1/config_ext_service.pb.go b/proto/service/common/config/v1/config_ext_service.pb.go
index 67e9075..7ba1c52 100644
--- a/proto/service/common/config/v1/config_ext_service.pb.go
+++ b/proto/service/common/config/v1/config_ext_service.pb.go
@@ -3,9 +3,8 @@
package configv1
import (
- grpc "google.golang.org/grpc"
-
api "github.com/openkcm/plugin-sdk/api"
+ grpc "google.golang.org/grpc"
)
const (
diff --git a/proto/service/common/config/v1/config_grpc.pb.go b/proto/service/common/config/v1/config_grpc.pb.go
index 5c1ab1c..effd324 100644
--- a/proto/service/common/config/v1/config_grpc.pb.go
+++ b/proto/service/common/config/v1/config_grpc.pb.go
@@ -1,14 +1,13 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
-// - protoc-gen-go-grpc v1.6.1
-// - protoc (unknown)
+// - protoc-gen-go-grpc v1.6.2
+// - protoc v7.35.1
// source: service/common/config/v1/config.proto
package configv1
import (
context "context"
-
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
diff --git a/protofetch.lock b/protofetch.lock
new file mode 100644
index 0000000..64a61e7
--- /dev/null
+++ b/protofetch.lock
@@ -0,0 +1,7 @@
+version = 2
+
+[[dependencies]]
+name = "protovalidate"
+url = "github.com/bufbuild/protovalidate"
+revision = "v1.1.1"
+commit_hash = "b304b85d7f2f072190ca4315ded920fe2310251f"
diff --git a/protofetch.toml b/protofetch.toml
new file mode 100644
index 0000000..198240a
--- /dev/null
+++ b/protofetch.toml
@@ -0,0 +1,8 @@
+name = "github.com/openkcm/plugin-sdk"
+description = "Plugins SDK of the OpenKCM project"
+
+[protovalidate]
+url = "github.com/bufbuild/protovalidate"
+revision = "v1.1.1"
+content_roots = ["/proto/protovalidate"]
+allow_policies = ["buf/validate/*"]
diff --git a/vendor-proto/buf/validate/validate.proto b/vendor-proto/buf/validate/validate.proto
new file mode 100644
index 0000000..f0371d3
--- /dev/null
+++ b/vendor-proto/buf/validate/validate.proto
@@ -0,0 +1,5057 @@
+// Copyright 2023-2026 Buf Technologies, Inc.
+//
+// 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.
+
+syntax = "proto2";
+
+// [Protovalidate](https://protovalidate.com/) is the semantic validation library for Protobuf.
+// It provides standard annotations to validate common rules on messages and fields, as well as the ability to use [CEL](https://cel.dev) to write custom rules.
+// It's the next generation of [protoc-gen-validate](https://github.com/bufbuild/protoc-gen-validate).
+//
+// This package provides the options, messages, and enums that power Protovalidate.
+// Apply its options to messages, fields, and oneofs in your Protobuf schemas to add validation rules:
+//
+// ```proto
+// message User {
+// string id = 1 [(buf.validate.field).string.uuid = true];
+// string first_name = 2 [(buf.validate.field).string.max_len = 64];
+// string last_name = 3 [(buf.validate.field).string.max_len = 64];
+//
+// option (buf.validate.message).cel = {
+// id: "first_name_requires_last_name"
+// message: "last_name must be present if first_name is present"
+// expression: "!has(this.first_name) || has(this.last_name)"
+// };
+// }
+// ```
+//
+// These rules are enforced at runtime by language-specific libraries.
+// See the [developer quickstart](https://protovalidate.com/quickstart/) to get started, or go directly to the runtime library for your language:
+// [Go](https://github.com/bufbuild/protovalidate-go)
+// [JavaScript/TypeScript](https://github.com/bufbuild/protovalidate-es),
+// [Java](https://github.com/bufbuild/protovalidate-java),
+// [Python](https://github.com/bufbuild/protovalidate-python),
+// or [C++](https://github.com/bufbuild/protovalidate-cc).
+package buf.validate;
+
+import "google/protobuf/descriptor.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/field_mask.proto";
+import "google/protobuf/timestamp.proto";
+
+option go_package = "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate";
+option java_multiple_files = true;
+option java_outer_classname = "ValidateProto";
+option java_package = "build.buf.validate";
+
+// MessageOptions is an extension to google.protobuf.MessageOptions. It allows
+// the addition of validation rules at the message level. These rules can be
+// applied to incoming messages to ensure they meet certain criteria before
+// being processed.
+extend google.protobuf.MessageOptions {
+ // Rules specify the validations to be performed on this message. By default,
+ // no validation is performed against a message.
+ optional MessageRules message = 1159;
+}
+
+// OneofOptions is an extension to google.protobuf.OneofOptions. It allows
+// the addition of validation rules on a oneof. These rules can be
+// applied to incoming messages to ensure they meet certain criteria before
+// being processed.
+extend google.protobuf.OneofOptions {
+ // Rules specify the validations to be performed on this oneof. By default,
+ // no validation is performed against a oneof.
+ optional OneofRules oneof = 1159;
+}
+
+// FieldOptions is an extension to google.protobuf.FieldOptions. It allows
+// the addition of validation rules at the field level. These rules can be
+// applied to incoming messages to ensure they meet certain criteria before
+// being processed.
+extend google.protobuf.FieldOptions {
+ // Rules specify the validations to be performed on this field. By default,
+ // no validation is performed against a field.
+ optional FieldRules field = 1159;
+
+ // Specifies predefined rules. When extending a standard rule message,
+ // this adds additional CEL expressions that apply when the extension is used.
+ //
+ // ```proto
+ // extend buf.validate.Int32Rules {
+ // bool is_zero [(buf.validate.predefined).cel = {
+ // id: "int32.is_zero",
+ // message: "value must be zero",
+ // expression: "!rule || this == 0",
+ // }];
+ // }
+ //
+ // message Foo {
+ // int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];
+ // }
+ // ```
+ optional PredefinedRules predefined = 1160;
+}
+
+// `Rule` represents a validation rule written in the Common Expression
+// Language (CEL) syntax. Each Rule includes a unique identifier, an
+// optional error message, and the CEL expression to evaluate. For more
+// information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
+//
+// ```proto
+// message Foo {
+// option (buf.validate.message).cel = {
+// id: "foo.bar"
+// message: "bar must be greater than 0"
+// expression: "this.bar > 0"
+// };
+// int32 bar = 1;
+// }
+// ```
+message Rule {
+ // `id` is a string that serves as a machine-readable name for this Rule.
+ // It should be unique within its scope, which could be either a message or a field.
+ optional string id = 1;
+
+ // `message` is an optional field that provides a human-readable error message
+ // for this Rule when the CEL expression evaluates to false. If a
+ // non-empty message is provided, any strings resulting from the CEL
+ // expression evaluation are ignored.
+ optional string message = 2;
+
+ // `expression` is the actual CEL expression that will be evaluated for
+ // validation. This string must resolve to either a boolean or a string
+ // value. If the expression evaluates to false or a non-empty string, the
+ // validation is considered failed, and the message is rejected.
+ optional string expression = 3;
+}
+
+// MessageRules represents validation rules that are applied to the entire message.
+// It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.
+message MessageRules {
+ // `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation
+ // rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.
+ //
+ // This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for
+ // simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will
+ // be same as the `expression`.
+ //
+ // For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
+ //
+ // ```proto
+ // message MyMessage {
+ // // The field `foo` must be greater than 42.
+ // option (buf.validate.message).cel_expression = "this.foo > 42";
+ // // The field `foo` must be less than 84.
+ // option (buf.validate.message).cel_expression = "this.foo < 84";
+ // optional int32 foo = 1;
+ // }
+ // ```
+ repeated string cel_expression = 5;
+ // `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.
+ // These rules are written in Common Expression Language (CEL) syntax. For more information,
+ // [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
+ //
+ //
+ // ```proto
+ // message MyMessage {
+ // // The field `foo` must be greater than 42.
+ // option (buf.validate.message).cel = {
+ // id: "my_message.value",
+ // message: "value must be greater than 42",
+ // expression: "this.foo > 42",
+ // };
+ // optional int32 foo = 1;
+ // }
+ // ```
+ repeated Rule cel = 3;
+
+ // `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields
+ // of which at most one can be present. If `required` is also specified, then exactly one
+ // of the specified fields _must_ be present.
+ //
+ // This will enforce oneof-like constraints with a few features not provided by
+ // actual Protobuf oneof declarations:
+ // 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,
+ // only scalar fields are allowed.
+ // 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member
+ // fields have explicit presence. This means that, for the purpose of determining
+ // how many fields are set, explicitly setting such a field to its zero value is
+ // effectively the same as not setting it at all.
+ // 3. This will always generate validation errors for a message unmarshalled from
+ // serialized data that sets more than one field. With a Protobuf oneof, when
+ // multiple fields are present in the serialized form, earlier values are usually
+ // silently ignored when unmarshalling, with only the last field being set when
+ // unmarshalling completes.
+ //
+ // Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means
+ // only the field that is set will be validated and the unset fields are not validated according to the field rules.
+ // This behavior can be overridden by setting `ignore` against a field.
+ //
+ // ```proto
+ // message MyMessage {
+ // // Only one of `field1` or `field2` _can_ be present in this message.
+ // option (buf.validate.message).oneof = { fields: ["field1", "field2"] };
+ // // Exactly one of `field3` or `field4` _must_ be present in this message.
+ // option (buf.validate.message).oneof = { fields: ["field3", "field4"], required: true };
+ // string field1 = 1;
+ // bytes field2 = 2;
+ // bool field3 = 3;
+ // int32 field4 = 4;
+ // }
+ // ```
+ repeated MessageOneofRule oneof = 4;
+
+ reserved 1;
+ reserved "disabled";
+}
+
+message MessageOneofRule {
+ // A list of field names to include in the oneof. All field names must be
+ // defined in the message. At least one field must be specified, and
+ // duplicates are not permitted.
+ repeated string fields = 1;
+ // If true, one of the fields specified _must_ be set.
+ optional bool required = 2;
+}
+
+// The `OneofRules` message type enables you to manage rules for
+// oneof fields in your protobuf messages.
+message OneofRules {
+ // If `required` is true, exactly one field of the oneof must be set. A
+ // validation error is returned if no fields in the oneof are set. Further rules
+ // should be placed on the fields themselves to ensure they are valid values,
+ // such as `min_len` or `gt`.
+ //
+ // ```proto
+ // message MyMessage {
+ // oneof value {
+ // // Either `a` or `b` must be set. If `a` is set, it must also be
+ // // non-empty; whereas if `b` is set, it can still be an empty string.
+ // option (buf.validate.oneof).required = true;
+ // string a = 1 [(buf.validate.field).string.min_len = 1];
+ // string b = 2;
+ // }
+ // }
+ // ```
+ optional bool required = 1;
+}
+
+// FieldRules encapsulates the rules for each type of field. Depending on
+// the field, the correct set should be used to ensure proper validations.
+message FieldRules {
+ // `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation
+ // rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.
+ //
+ // This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for
+ // simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will
+ // be same as the `expression`.
+ //
+ // For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
+ //
+ // ```proto
+ // message MyMessage {
+ // // The field `value` must be greater than 42.
+ // optional int32 value = 1 [(buf.validate.field).cel_expression = "this > 42"];
+ // }
+ // ```
+ repeated string cel_expression = 29;
+ // `cel` is a repeated field used to represent a textual expression
+ // in the Common Expression Language (CEL) syntax. For more information,
+ // [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
+ //
+ // ```proto
+ // message MyMessage {
+ // // The field `value` must be greater than 42.
+ // optional int32 value = 1 [(buf.validate.field).cel = {
+ // id: "my_message.value",
+ // message: "value must be greater than 42",
+ // expression: "this > 42",
+ // }];
+ // }
+ // ```
+ repeated Rule cel = 23;
+ // If `required` is true, the field must be set. A validation error is returned
+ // if the field is not set.
+ //
+ // ```proto
+ // syntax="proto3";
+ //
+ // message FieldsWithPresence {
+ // // Requires any string to be set, including the empty string.
+ // optional string link = 1 [
+ // (buf.validate.field).required = true
+ // ];
+ // // Requires true or false to be set.
+ // optional bool disabled = 2 [
+ // (buf.validate.field).required = true
+ // ];
+ // // Requires a message to be set, including the empty message.
+ // SomeMessage msg = 4 [
+ // (buf.validate.field).required = true
+ // ];
+ // }
+ // ```
+ //
+ // All fields in the example above track presence. By default, Protovalidate
+ // ignores rules on those fields if no value is set. `required` ensures that
+ // the fields are set and valid.
+ //
+ // Fields that don't track presence are always validated by Protovalidate,
+ // whether they are set or not. It is not necessary to add `required`. It
+ // can be added to indicate that the field cannot be the zero value.
+ //
+ // ```proto
+ // syntax="proto3";
+ //
+ // message FieldsWithoutPresence {
+ // // `string.email` always applies, even to an empty string.
+ // string link = 1 [
+ // (buf.validate.field).string.email = true
+ // ];
+ // // `repeated.min_items` always applies, even to an empty list.
+ // repeated string labels = 2 [
+ // (buf.validate.field).repeated.min_items = 1
+ // ];
+ // // `required`, for fields that don't track presence, indicates
+ // // the value of the field can't be the zero value.
+ // int32 zero_value_not_allowed = 3 [
+ // (buf.validate.field).required = true
+ // ];
+ // }
+ // ```
+ //
+ // To learn which fields track presence, see the
+ // [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
+ //
+ // Note: While field rules can be applied to repeated items, map keys, and map
+ // values, the elements are always considered to be set. Consequently,
+ // specifying `repeated.items.required` is redundant.
+ optional bool required = 25;
+ // Ignore validation rules on the field if its value matches the specified
+ // criteria. See the `Ignore` enum for details.
+ //
+ // ```proto
+ // message UpdateRequest {
+ // // The uri rule only applies if the field is not an empty string.
+ // string url = 1 [
+ // (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
+ // (buf.validate.field).string.uri = true
+ // ];
+ // }
+ // ```
+ optional Ignore ignore = 27;
+
+ oneof type {
+ // Scalar Field Types
+ FloatRules float = 1;
+ DoubleRules double = 2;
+ Int32Rules int32 = 3;
+ Int64Rules int64 = 4;
+ UInt32Rules uint32 = 5;
+ UInt64Rules uint64 = 6;
+ SInt32Rules sint32 = 7;
+ SInt64Rules sint64 = 8;
+ Fixed32Rules fixed32 = 9;
+ Fixed64Rules fixed64 = 10;
+ SFixed32Rules sfixed32 = 11;
+ SFixed64Rules sfixed64 = 12;
+ BoolRules bool = 13;
+ StringRules string = 14;
+ BytesRules bytes = 15;
+
+ // Complex Field Types
+ EnumRules enum = 16;
+ RepeatedRules repeated = 18;
+ MapRules map = 19;
+
+ // Well-Known Field Types
+ AnyRules any = 20;
+ DurationRules duration = 21;
+ FieldMaskRules field_mask = 28;
+ TimestampRules timestamp = 22;
+ }
+
+ reserved 24, 26;
+ reserved "skipped", "ignore_empty";
+}
+
+// PredefinedRules are custom rules that can be re-used with
+// multiple fields.
+message PredefinedRules {
+ // `cel` is a repeated field used to represent a textual expression
+ // in the Common Expression Language (CEL) syntax. For more information,
+ // [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).
+ //
+ // ```proto
+ // message MyMessage {
+ // // The field `value` must be greater than 42.
+ // optional int32 value = 1 [(buf.validate.predefined).cel = {
+ // id: "my_message.value",
+ // message: "value must be greater than 42",
+ // expression: "this > 42",
+ // }];
+ // }
+ // ```
+ repeated Rule cel = 1;
+
+ reserved 24, 26;
+ reserved "skipped", "ignore_empty";
+}
+
+// Specifies how `FieldRules.ignore` behaves, depending on the field's value, and
+// whether the field tracks presence.
+enum Ignore {
+ // Ignore rules if the field tracks presence and is unset. This is the default
+ // behavior.
+ //
+ // In proto3, only message fields, members of a Protobuf `oneof`, and fields
+ // with the `optional` label track presence. Consequently, the following fields
+ // are always validated, whether a value is set or not:
+ //
+ // ```proto
+ // syntax="proto3";
+ //
+ // message RulesApply {
+ // string email = 1 [
+ // (buf.validate.field).string.email = true
+ // ];
+ // int32 age = 2 [
+ // (buf.validate.field).int32.gt = 0
+ // ];
+ // repeated string labels = 3 [
+ // (buf.validate.field).repeated.min_items = 1
+ // ];
+ // }
+ // ```
+ //
+ // In contrast, the following fields track presence, and are only validated if
+ // a value is set:
+ //
+ // ```proto
+ // syntax="proto3";
+ //
+ // message RulesApplyIfSet {
+ // optional string email = 1 [
+ // (buf.validate.field).string.email = true
+ // ];
+ // oneof ref {
+ // string reference = 2 [
+ // (buf.validate.field).string.uuid = true
+ // ];
+ // string name = 3 [
+ // (buf.validate.field).string.min_len = 4
+ // ];
+ // }
+ // SomeMessage msg = 4 [
+ // (buf.validate.field).cel = {/* ... */}
+ // ];
+ // }
+ // ```
+ //
+ // To ensure that such a field is set, add the `required` rule.
+ //
+ // To learn which fields track presence, see the
+ // [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).
+ IGNORE_UNSPECIFIED = 0;
+
+ // Ignore rules if the field is unset, or set to the zero value.
+ //
+ // The zero value depends on the field type:
+ // - For strings, the zero value is the empty string.
+ // - For bytes, the zero value is empty bytes.
+ // - For bool, the zero value is false.
+ // - For numeric types, the zero value is zero.
+ // - For enums, the zero value is the first defined enum value.
+ // - For repeated fields, the zero is an empty list.
+ // - For map fields, the zero is an empty map.
+ // - For message fields, absence of the message (typically a null-value) is considered zero value.
+ //
+ // For fields that track presence (e.g. adding the `optional` label in proto3),
+ // this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.
+ IGNORE_IF_ZERO_VALUE = 1;
+
+ // Always ignore rules, including the `required` rule.
+ //
+ // This is useful for ignoring the rules of a referenced message, or to
+ // temporarily ignore rules during development.
+ //
+ // ```proto
+ // message MyMessage {
+ // // The field's rules will always be ignored, including any validations
+ // // on value's fields.
+ // MyOtherMessage value = 1 [
+ // (buf.validate.field).ignore = IGNORE_ALWAYS
+ // ];
+ // }
+ // ```
+ IGNORE_ALWAYS = 3;
+
+ reserved 2;
+ reserved "IGNORE_EMPTY", "IGNORE_DEFAULT", "IGNORE_IF_DEFAULT_VALUE", "IGNORE_IF_UNPOPULATED";
+}
+
+// FloatRules describes the rules applied to `float` values. These
+// rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
+message FloatRules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyFloat {
+ // // value must equal 42.0
+ // float value = 1 [(buf.validate.field).float.const = 42.0];
+ // }
+ // ```
+ optional float const = 1 [(predefined).cel = {
+ id: "float.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFloat {
+ // // value must be less than 10.0
+ // float value = 1 [(buf.validate.field).float.lt = 10.0];
+ // }
+ // ```
+ float lt = 2 [(predefined).cel = {
+ id: "float.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyFloat {
+ // // value must be less than or equal to 10.0
+ // float value = 1 [(buf.validate.field).float.lte = 10.0];
+ // }
+ // ```
+ float lte = 3 [(predefined).cel = {
+ id: "float.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFloat {
+ // // value must be greater than 5.0 [float.gt]
+ // float value = 1 [(buf.validate.field).float.gt = 5.0];
+ //
+ // // value must be greater than 5 and less than 10.0 [float.gt_lt]
+ // float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+ //
+ // // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+ // float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+ // }
+ // ```
+ float gt = 4 [
+ (predefined).cel = {
+ id: "float.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFloat {
+ // // value must be greater than or equal to 5.0 [float.gte]
+ // float value = 1 [(buf.validate.field).float.gte = 5.0];
+ //
+ // // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+ // float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+ //
+ // // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+ // float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+ // }
+ // ```
+ float gte = 5 [
+ (predefined).cel = {
+ id: "float.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "float.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message
+ // is generated.
+ //
+ // ```proto
+ // message MyFloat {
+ // // value must be in list [1.0, 2.0, 3.0]
+ // float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];
+ // }
+ // ```
+ repeated float in = 6 [(predefined).cel = {
+ id: "float.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyFloat {
+ // // value must not be in list [1.0, 2.0, 3.0]
+ // float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];
+ // }
+ // ```
+ repeated float not_in = 7 [(predefined).cel = {
+ id: "float.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `finite` requires the field value to be finite. If the field value is
+ // infinite or NaN, an error message is generated.
+ optional bool finite = 8 [(predefined).cel = {
+ id: "float.finite"
+ expression: "rules.finite ? (this.isNan() || this.isInf() ? 'value must be finite' : '') : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyFloat {
+ // float value = 1 [
+ // (buf.validate.field).float.example = 1.0,
+ // (buf.validate.field).float.example = inf
+ // ];
+ // }
+ // ```
+ repeated float example = 9 [(predefined).cel = {
+ id: "float.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// DoubleRules describes the rules applied to `double` values. These
+// rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
+message DoubleRules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyDouble {
+ // // value must equal 42.0
+ // double value = 1 [(buf.validate.field).double.const = 42.0];
+ // }
+ // ```
+ optional double const = 1 [(predefined).cel = {
+ id: "double.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyDouble {
+ // // value must be less than 10.0
+ // double value = 1 [(buf.validate.field).double.lt = 10.0];
+ // }
+ // ```
+ double lt = 2 [(predefined).cel = {
+ id: "double.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified value
+ // (field <= value). If the field value is greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyDouble {
+ // // value must be less than or equal to 10.0
+ // double value = 1 [(buf.validate.field).double.lte = 10.0];
+ // }
+ // ```
+ double lte = 3 [(predefined).cel = {
+ id: "double.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+ // the range is reversed, and the field value must be outside the specified
+ // range. If the field value doesn't meet the required conditions, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyDouble {
+ // // value must be greater than 5.0 [double.gt]
+ // double value = 1 [(buf.validate.field).double.gt = 5.0];
+ //
+ // // value must be greater than 5 and less than 10.0 [double.gt_lt]
+ // double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+ //
+ // // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+ // double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+ // }
+ // ```
+ double gt = 4 [
+ (predefined).cel = {
+ id: "double.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyDouble {
+ // // value must be greater than or equal to 5.0 [double.gte]
+ // double value = 1 [(buf.validate.field).double.gte = 5.0];
+ //
+ // // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+ // double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+ //
+ // // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+ // double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+ // }
+ // ```
+ double gte = 5 [
+ (predefined).cel = {
+ id: "double.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "double.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MyDouble {
+ // // value must be in list [1.0, 2.0, 3.0]
+ // double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];
+ // }
+ // ```
+ repeated double in = 6 [(predefined).cel = {
+ id: "double.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyDouble {
+ // // value must not be in list [1.0, 2.0, 3.0]
+ // double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];
+ // }
+ // ```
+ repeated double not_in = 7 [(predefined).cel = {
+ id: "double.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `finite` requires the field value to be finite. If the field value is
+ // infinite or NaN, an error message is generated.
+ optional bool finite = 8 [(predefined).cel = {
+ id: "double.finite"
+ expression: "rules.finite ? (this.isNan() || this.isInf() ? 'value must be finite' : '') : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyDouble {
+ // double value = 1 [
+ // (buf.validate.field).double.example = 1.0,
+ // (buf.validate.field).double.example = inf
+ // ];
+ // }
+ // ```
+ repeated double example = 9 [(predefined).cel = {
+ id: "double.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// Int32Rules describes the rules applied to `int32` values. These
+// rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
+message Int32Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyInt32 {
+ // // value must equal 42
+ // int32 value = 1 [(buf.validate.field).int32.const = 42];
+ // }
+ // ```
+ optional int32 const = 1 [(predefined).cel = {
+ id: "int32.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field
+ // < value). If the field value is equal to or greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyInt32 {
+ // // value must be less than 10
+ // int32 value = 1 [(buf.validate.field).int32.lt = 10];
+ // }
+ // ```
+ int32 lt = 2 [(predefined).cel = {
+ id: "int32.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyInt32 {
+ // // value must be less than or equal to 10
+ // int32 value = 1 [(buf.validate.field).int32.lte = 10];
+ // }
+ // ```
+ int32 lte = 3 [(predefined).cel = {
+ id: "int32.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyInt32 {
+ // // value must be greater than 5 [int32.gt]
+ // int32 value = 1 [(buf.validate.field).int32.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [int32.gt_lt]
+ // int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+ // int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ int32 gt = 4 [
+ (predefined).cel = {
+ id: "int32.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified value
+ // (exclusive). If the value of `gte` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyInt32 {
+ // // value must be greater than or equal to 5 [int32.gte]
+ // int32 value = 1 [(buf.validate.field).int32.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+ // int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+ // int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ int32 gte = 5 [
+ (predefined).cel = {
+ id: "int32.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "int32.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MyInt32 {
+ // // value must be in list [1, 2, 3]
+ // int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated int32 in = 6 [(predefined).cel = {
+ id: "int32.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error message
+ // is generated.
+ //
+ // ```proto
+ // message MyInt32 {
+ // // value must not be in list [1, 2, 3]
+ // int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated int32 not_in = 7 [(predefined).cel = {
+ id: "int32.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyInt32 {
+ // int32 value = 1 [
+ // (buf.validate.field).int32.example = 1,
+ // (buf.validate.field).int32.example = -10
+ // ];
+ // }
+ // ```
+ repeated int32 example = 8 [(predefined).cel = {
+ id: "int32.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// Int64Rules describes the rules applied to `int64` values. These
+// rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
+message Int64Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyInt64 {
+ // // value must equal 42
+ // int64 value = 1 [(buf.validate.field).int64.const = 42];
+ // }
+ // ```
+ optional int64 const = 1 [(predefined).cel = {
+ id: "int64.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyInt64 {
+ // // value must be less than 10
+ // int64 value = 1 [(buf.validate.field).int64.lt = 10];
+ // }
+ // ```
+ int64 lt = 2 [(predefined).cel = {
+ id: "int64.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyInt64 {
+ // // value must be less than or equal to 10
+ // int64 value = 1 [(buf.validate.field).int64.lte = 10];
+ // }
+ // ```
+ int64 lte = 3 [(predefined).cel = {
+ id: "int64.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyInt64 {
+ // // value must be greater than 5 [int64.gt]
+ // int64 value = 1 [(buf.validate.field).int64.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [int64.gt_lt]
+ // int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+ // int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ int64 gt = 4 [
+ (predefined).cel = {
+ id: "int64.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyInt64 {
+ // // value must be greater than or equal to 5 [int64.gte]
+ // int64 value = 1 [(buf.validate.field).int64.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+ // int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+ // int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ int64 gte = 5 [
+ (predefined).cel = {
+ id: "int64.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "int64.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MyInt64 {
+ // // value must be in list [1, 2, 3]
+ // int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated int64 in = 6 [(predefined).cel = {
+ id: "int64.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyInt64 {
+ // // value must not be in list [1, 2, 3]
+ // int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated int64 not_in = 7 [(predefined).cel = {
+ id: "int64.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyInt64 {
+ // int64 value = 1 [
+ // (buf.validate.field).int64.example = 1,
+ // (buf.validate.field).int64.example = -10
+ // ];
+ // }
+ // ```
+ repeated int64 example = 9 [(predefined).cel = {
+ id: "int64.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// UInt32Rules describes the rules applied to `uint32` values. These
+// rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
+message UInt32Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // // value must equal 42
+ // uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+ // }
+ // ```
+ optional uint32 const = 1 [(predefined).cel = {
+ id: "uint32.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // // value must be less than 10
+ // uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+ // }
+ // ```
+ uint32 lt = 2 [(predefined).cel = {
+ id: "uint32.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // // value must be less than or equal to 10
+ // uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+ // }
+ // ```
+ uint32 lte = 3 [(predefined).cel = {
+ id: "uint32.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // // value must be greater than 5 [uint32.gt]
+ // uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [uint32.gt_lt]
+ // uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+ // uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ uint32 gt = 4 [
+ (predefined).cel = {
+ id: "uint32.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // // value must be greater than or equal to 5 [uint32.gte]
+ // uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+ // uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+ // uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ uint32 gte = 5 [
+ (predefined).cel = {
+ id: "uint32.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint32.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // // value must be in list [1, 2, 3]
+ // uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated uint32 in = 6 [(predefined).cel = {
+ id: "uint32.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // // value must not be in list [1, 2, 3]
+ // uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated uint32 not_in = 7 [(predefined).cel = {
+ id: "uint32.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyUInt32 {
+ // uint32 value = 1 [
+ // (buf.validate.field).uint32.example = 1,
+ // (buf.validate.field).uint32.example = 10
+ // ];
+ // }
+ // ```
+ repeated uint32 example = 8 [(predefined).cel = {
+ id: "uint32.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// UInt64Rules describes the rules applied to `uint64` values. These
+// rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
+message UInt64Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // // value must equal 42
+ // uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+ // }
+ // ```
+ optional uint64 const = 1 [(predefined).cel = {
+ id: "uint64.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // // value must be less than 10
+ // uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+ // }
+ // ```
+ uint64 lt = 2 [(predefined).cel = {
+ id: "uint64.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // // value must be less than or equal to 10
+ // uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+ // }
+ // ```
+ uint64 lte = 3 [(predefined).cel = {
+ id: "uint64.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // // value must be greater than 5 [uint64.gt]
+ // uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [uint64.gt_lt]
+ // uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+ // uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ uint64 gt = 4 [
+ (predefined).cel = {
+ id: "uint64.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // // value must be greater than or equal to 5 [uint64.gte]
+ // uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+ // uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+ // uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ uint64 gte = 5 [
+ (predefined).cel = {
+ id: "uint64.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "uint64.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // // value must be in list [1, 2, 3]
+ // uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated uint64 in = 6 [(predefined).cel = {
+ id: "uint64.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // // value must not be in list [1, 2, 3]
+ // uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated uint64 not_in = 7 [(predefined).cel = {
+ id: "uint64.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyUInt64 {
+ // uint64 value = 1 [
+ // (buf.validate.field).uint64.example = 1,
+ // (buf.validate.field).uint64.example = -10
+ // ];
+ // }
+ // ```
+ repeated uint64 example = 8 [(predefined).cel = {
+ id: "uint64.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// SInt32Rules describes the rules applied to `sint32` values.
+message SInt32Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MySInt32 {
+ // // value must equal 42
+ // sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+ // }
+ // ```
+ optional sint32 const = 1 [(predefined).cel = {
+ id: "sint32.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field
+ // < value). If the field value is equal to or greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MySInt32 {
+ // // value must be less than 10
+ // sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+ // }
+ // ```
+ sint32 lt = 2 [(predefined).cel = {
+ id: "sint32.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MySInt32 {
+ // // value must be less than or equal to 10
+ // sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+ // }
+ // ```
+ sint32 lte = 3 [(predefined).cel = {
+ id: "sint32.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySInt32 {
+ // // value must be greater than 5 [sint32.gt]
+ // sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [sint32.gt_lt]
+ // sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+ // sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ sint32 gt = 4 [
+ (predefined).cel = {
+ id: "sint32.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySInt32 {
+ // // value must be greater than or equal to 5 [sint32.gte]
+ // sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+ // sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+ // sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ sint32 gte = 5 [
+ (predefined).cel = {
+ id: "sint32.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint32.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MySInt32 {
+ // // value must be in list [1, 2, 3]
+ // sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sint32 in = 6 [(predefined).cel = {
+ id: "sint32.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MySInt32 {
+ // // value must not be in list [1, 2, 3]
+ // sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sint32 not_in = 7 [(predefined).cel = {
+ id: "sint32.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MySInt32 {
+ // sint32 value = 1 [
+ // (buf.validate.field).sint32.example = 1,
+ // (buf.validate.field).sint32.example = -10
+ // ];
+ // }
+ // ```
+ repeated sint32 example = 8 [(predefined).cel = {
+ id: "sint32.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// SInt64Rules describes the rules applied to `sint64` values.
+message SInt64Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MySInt64 {
+ // // value must equal 42
+ // sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+ // }
+ // ```
+ optional sint64 const = 1 [(predefined).cel = {
+ id: "sint64.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field
+ // < value). If the field value is equal to or greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MySInt64 {
+ // // value must be less than 10
+ // sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+ // }
+ // ```
+ sint64 lt = 2 [(predefined).cel = {
+ id: "sint64.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MySInt64 {
+ // // value must be less than or equal to 10
+ // sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+ // }
+ // ```
+ sint64 lte = 3 [(predefined).cel = {
+ id: "sint64.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySInt64 {
+ // // value must be greater than 5 [sint64.gt]
+ // sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [sint64.gt_lt]
+ // sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+ // sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ sint64 gt = 4 [
+ (predefined).cel = {
+ id: "sint64.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySInt64 {
+ // // value must be greater than or equal to 5 [sint64.gte]
+ // sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+ // sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+ // sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ sint64 gte = 5 [
+ (predefined).cel = {
+ id: "sint64.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sint64.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message
+ // is generated.
+ //
+ // ```proto
+ // message MySInt64 {
+ // // value must be in list [1, 2, 3]
+ // sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sint64 in = 6 [(predefined).cel = {
+ id: "sint64.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MySInt64 {
+ // // value must not be in list [1, 2, 3]
+ // sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sint64 not_in = 7 [(predefined).cel = {
+ id: "sint64.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MySInt64 {
+ // sint64 value = 1 [
+ // (buf.validate.field).sint64.example = 1,
+ // (buf.validate.field).sint64.example = -10
+ // ];
+ // }
+ // ```
+ repeated sint64 example = 8 [(predefined).cel = {
+ id: "sint64.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// Fixed32Rules describes the rules applied to `fixed32` values.
+message Fixed32Rules {
+ // `const` requires the field value to exactly match the specified value.
+ // If the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // // value must equal 42
+ // fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+ // }
+ // ```
+ optional fixed32 const = 1 [(predefined).cel = {
+ id: "fixed32.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // // value must be less than 10
+ // fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+ // }
+ // ```
+ fixed32 lt = 2 [(predefined).cel = {
+ id: "fixed32.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // // value must be less than or equal to 10
+ // fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+ // }
+ // ```
+ fixed32 lte = 3 [(predefined).cel = {
+ id: "fixed32.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // // value must be greater than 5 [fixed32.gt]
+ // fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+ // fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+ // fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ fixed32 gt = 4 [
+ (predefined).cel = {
+ id: "fixed32.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // // value must be greater than or equal to 5 [fixed32.gte]
+ // fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+ // fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+ // fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ fixed32 gte = 5 [
+ (predefined).cel = {
+ id: "fixed32.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed32.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message
+ // is generated.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // // value must be in list [1, 2, 3]
+ // fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated fixed32 in = 6 [(predefined).cel = {
+ id: "fixed32.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // // value must not be in list [1, 2, 3]
+ // fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated fixed32 not_in = 7 [(predefined).cel = {
+ id: "fixed32.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyFixed32 {
+ // fixed32 value = 1 [
+ // (buf.validate.field).fixed32.example = 1,
+ // (buf.validate.field).fixed32.example = 2
+ // ];
+ // }
+ // ```
+ repeated fixed32 example = 8 [(predefined).cel = {
+ id: "fixed32.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// Fixed64Rules describes the rules applied to `fixed64` values.
+message Fixed64Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // // value must equal 42
+ // fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+ // }
+ // ```
+ optional fixed64 const = 1 [(predefined).cel = {
+ id: "fixed64.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // // value must be less than 10
+ // fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+ // }
+ // ```
+ fixed64 lt = 2 [(predefined).cel = {
+ id: "fixed64.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // // value must be less than or equal to 10
+ // fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+ // }
+ // ```
+ fixed64 lte = 3 [(predefined).cel = {
+ id: "fixed64.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // // value must be greater than 5 [fixed64.gt]
+ // fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+ // fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+ // fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ fixed64 gt = 4 [
+ (predefined).cel = {
+ id: "fixed64.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // // value must be greater than or equal to 5 [fixed64.gte]
+ // fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+ // fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+ // fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ fixed64 gte = 5 [
+ (predefined).cel = {
+ id: "fixed64.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "fixed64.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // // value must be in list [1, 2, 3]
+ // fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated fixed64 in = 6 [(predefined).cel = {
+ id: "fixed64.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // // value must not be in list [1, 2, 3]
+ // fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated fixed64 not_in = 7 [(predefined).cel = {
+ id: "fixed64.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyFixed64 {
+ // fixed64 value = 1 [
+ // (buf.validate.field).fixed64.example = 1,
+ // (buf.validate.field).fixed64.example = 2
+ // ];
+ // }
+ // ```
+ repeated fixed64 example = 8 [(predefined).cel = {
+ id: "fixed64.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// SFixed32Rules describes the rules applied to `fixed32` values.
+message SFixed32Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // // value must equal 42
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+ // }
+ // ```
+ optional sfixed32 const = 1 [(predefined).cel = {
+ id: "sfixed32.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // // value must be less than 10
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+ // }
+ // ```
+ sfixed32 lt = 2 [(predefined).cel = {
+ id: "sfixed32.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // // value must be less than or equal to 10
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+ // }
+ // ```
+ sfixed32 lte = 3 [(predefined).cel = {
+ id: "sfixed32.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // // value must be greater than 5 [sfixed32.gt]
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+ // sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+ // sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ sfixed32 gt = 4 [
+ (predefined).cel = {
+ id: "sfixed32.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // // value must be greater than or equal to 5 [sfixed32.gte]
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+ // sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+ // sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ sfixed32 gte = 5 [
+ (predefined).cel = {
+ id: "sfixed32.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed32.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // // value must be in list [1, 2, 3]
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sfixed32 in = 6 [(predefined).cel = {
+ id: "sfixed32.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // // value must not be in list [1, 2, 3]
+ // sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sfixed32 not_in = 7 [(predefined).cel = {
+ id: "sfixed32.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MySFixed32 {
+ // sfixed32 value = 1 [
+ // (buf.validate.field).sfixed32.example = 1,
+ // (buf.validate.field).sfixed32.example = 2
+ // ];
+ // }
+ // ```
+ repeated sfixed32 example = 8 [(predefined).cel = {
+ id: "sfixed32.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// SFixed64Rules describes the rules applied to `fixed64` values.
+message SFixed64Rules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // // value must equal 42
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+ // }
+ // ```
+ optional sfixed64 const = 1 [(predefined).cel = {
+ id: "sfixed64.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` requires the field value to be less than the specified value (field <
+ // value). If the field value is equal to or greater than the specified value,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // // value must be less than 10
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+ // }
+ // ```
+ sfixed64 lt = 2 [(predefined).cel = {
+ id: "sfixed64.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` requires the field value to be less than or equal to the specified
+ // value (field <= value). If the field value is greater than the specified
+ // value, an error message is generated.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // // value must be less than or equal to 10
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+ // }
+ // ```
+ sfixed64 lte = 3 [(predefined).cel = {
+ id: "sfixed64.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the field value to be greater than the specified value
+ // (exclusive). If the value of `gt` is larger than a specified `lt` or
+ // `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // // value must be greater than 5 [sfixed64.gt]
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+ //
+ // // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+ // sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+ //
+ // // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+ // sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+ // }
+ // ```
+ sfixed64 gt = 4 [
+ (predefined).cel = {
+ id: "sfixed64.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the field value to be greater than or equal to the specified
+ // value (exclusive). If the value of `gte` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // // value must be greater than or equal to 5 [sfixed64.gte]
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+ //
+ // // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+ // sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+ //
+ // // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+ // sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+ // }
+ // ```
+ sfixed64 gte = 5 [
+ (predefined).cel = {
+ id: "sfixed64.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "sfixed64.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` requires the field value to be equal to one of the specified values.
+ // If the field value isn't one of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // // value must be in list [1, 2, 3]
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sfixed64 in = 6 [(predefined).cel = {
+ id: "sfixed64.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not be equal to any of the specified
+ // values. If the field value is one of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // // value must not be in list [1, 2, 3]
+ // sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];
+ // }
+ // ```
+ repeated sfixed64 not_in = 7 [(predefined).cel = {
+ id: "sfixed64.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MySFixed64 {
+ // sfixed64 value = 1 [
+ // (buf.validate.field).sfixed64.example = 1,
+ // (buf.validate.field).sfixed64.example = 2
+ // ];
+ // }
+ // ```
+ repeated sfixed64 example = 8 [(predefined).cel = {
+ id: "sfixed64.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// BoolRules describes the rules applied to `bool` values. These rules
+// may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
+message BoolRules {
+ // `const` requires the field value to exactly match the specified boolean value.
+ // If the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyBool {
+ // // value must equal true
+ // bool value = 1 [(buf.validate.field).bool.const = true];
+ // }
+ // ```
+ optional bool const = 1 [(predefined).cel = {
+ id: "bool.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyBool {
+ // bool value = 1 [
+ // (buf.validate.field).bool.example = 1,
+ // (buf.validate.field).bool.example = 2
+ // ];
+ // }
+ // ```
+ repeated bool example = 2 [(predefined).cel = {
+ id: "bool.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// StringRules describes the rules applied to `string` values These
+// rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
+message StringRules {
+ // `const` requires the field value to exactly match the specified value. If
+ // the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must equal `hello`
+ // string value = 1 [(buf.validate.field).string.const = "hello"];
+ // }
+ // ```
+ optional string const = 1 [(predefined).cel = {
+ id: "string.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal `%s`'.format([getField(rules, 'const')]) : ''"
+ }];
+
+ // `len` dictates that the field value must have the specified
+ // number of characters (Unicode code points), which may differ from the number
+ // of bytes in the string. If the field value does not meet the specified
+ // length, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value length must be 5 characters
+ // string value = 1 [(buf.validate.field).string.len = 5];
+ // }
+ // ```
+ optional uint64 len = 19 [(predefined).cel = {
+ id: "string.len"
+ expression: "uint(this.size()) != rules.len ? 'value length must be %s characters'.format([rules.len]) : ''"
+ }];
+
+ // `min_len` specifies that the field value must have at least the specified
+ // number of characters (Unicode code points), which may differ from the number
+ // of bytes in the string. If the field value contains fewer characters, an error
+ // message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value length must be at least 3 characters
+ // string value = 1 [(buf.validate.field).string.min_len = 3];
+ // }
+ // ```
+ optional uint64 min_len = 2 [(predefined).cel = {
+ id: "string.min_len"
+ expression: "uint(this.size()) < rules.min_len ? 'value length must be at least %s characters'.format([rules.min_len]) : ''"
+ }];
+
+ // `max_len` specifies that the field value must have no more than the specified
+ // number of characters (Unicode code points), which may differ from the
+ // number of bytes in the string. If the field value contains more characters,
+ // an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value length must be at most 10 characters
+ // string value = 1 [(buf.validate.field).string.max_len = 10];
+ // }
+ // ```
+ optional uint64 max_len = 3 [(predefined).cel = {
+ id: "string.max_len"
+ expression: "uint(this.size()) > rules.max_len ? 'value length must be at most %s characters'.format([rules.max_len]) : ''"
+ }];
+
+ // `len_bytes` dictates that the field value must have the specified number of
+ // bytes. If the field value does not match the specified length in bytes,
+ // an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value length must be 6 bytes
+ // string value = 1 [(buf.validate.field).string.len_bytes = 6];
+ // }
+ // ```
+ optional uint64 len_bytes = 20 [(predefined).cel = {
+ id: "string.len_bytes"
+ expression: "uint(bytes(this).size()) != rules.len_bytes ? 'value length must be %s bytes'.format([rules.len_bytes]) : ''"
+ }];
+
+ // `min_bytes` specifies that the field value must have at least the specified
+ // number of bytes. If the field value contains fewer bytes, an error message
+ // will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value length must be at least 4 bytes
+ // string value = 1 [(buf.validate.field).string.min_bytes = 4];
+ // }
+ //
+ // ```
+ optional uint64 min_bytes = 4 [(predefined).cel = {
+ id: "string.min_bytes"
+ expression: "uint(bytes(this).size()) < rules.min_bytes ? 'value length must be at least %s bytes'.format([rules.min_bytes]) : ''"
+ }];
+
+ // `max_bytes` specifies that the field value must have no more than the
+ //specified number of bytes. If the field value contains more bytes, an
+ // error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value length must be at most 8 bytes
+ // string value = 1 [(buf.validate.field).string.max_bytes = 8];
+ // }
+ // ```
+ optional uint64 max_bytes = 5 [(predefined).cel = {
+ id: "string.max_bytes"
+ expression: "uint(bytes(this).size()) > rules.max_bytes ? 'value length must be at most %s bytes'.format([rules.max_bytes]) : ''"
+ }];
+
+ // `pattern` specifies that the field value must match the specified
+ // regular expression (RE2 syntax), with the expression provided without any
+ // delimiters. If the field value doesn't match the regular expression, an
+ // error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value does not match regex pattern `^[a-zA-Z]//$`
+ // string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+ // }
+ // ```
+ optional string pattern = 6 [(predefined).cel = {
+ id: "string.pattern"
+ expression: "!this.matches(rules.pattern) ? 'value does not match regex pattern `%s`'.format([rules.pattern]) : ''"
+ }];
+
+ // `prefix` specifies that the field value must have the
+ //specified substring at the beginning of the string. If the field value
+ // doesn't start with the specified prefix, an error message will be
+ // generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value does not have prefix `pre`
+ // string value = 1 [(buf.validate.field).string.prefix = "pre"];
+ // }
+ // ```
+ optional string prefix = 7 [(predefined).cel = {
+ id: "string.prefix"
+ expression: "!this.startsWith(rules.prefix) ? 'value does not have prefix `%s`'.format([rules.prefix]) : ''"
+ }];
+
+ // `suffix` specifies that the field value must have the
+ //specified substring at the end of the string. If the field value doesn't
+ // end with the specified suffix, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value does not have suffix `post`
+ // string value = 1 [(buf.validate.field).string.suffix = "post"];
+ // }
+ // ```
+ optional string suffix = 8 [(predefined).cel = {
+ id: "string.suffix"
+ expression: "!this.endsWith(rules.suffix) ? 'value does not have suffix `%s`'.format([rules.suffix]) : ''"
+ }];
+
+ // `contains` specifies that the field value must have the
+ //specified substring anywhere in the string. If the field value doesn't
+ // contain the specified substring, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value does not contain substring `inside`.
+ // string value = 1 [(buf.validate.field).string.contains = "inside"];
+ // }
+ // ```
+ optional string contains = 9 [(predefined).cel = {
+ id: "string.contains"
+ expression: "!this.contains(rules.contains) ? 'value does not contain substring `%s`'.format([rules.contains]) : ''"
+ }];
+
+ // `not_contains` specifies that the field value must not have the
+ //specified substring anywhere in the string. If the field value contains
+ // the specified substring, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value contains substring `inside`.
+ // string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+ // }
+ // ```
+ optional string not_contains = 23 [(predefined).cel = {
+ id: "string.not_contains"
+ expression: "this.contains(rules.not_contains) ? 'value contains substring `%s`'.format([rules.not_contains]) : ''"
+ }];
+
+ // `in` specifies that the field value must be equal to one of the specified
+ // values. If the field value isn't one of the specified values, an error
+ // message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be in list ["apple", "banana"]
+ // string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+ // }
+ // ```
+ repeated string in = 10 [(predefined).cel = {
+ id: "string.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` specifies that the field value cannot be equal to any
+ // of the specified values. If the field value is one of the specified values,
+ // an error message will be generated.
+ // ```proto
+ // message MyString {
+ // // value must not be in list ["orange", "grape"]
+ // string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+ // }
+ // ```
+ repeated string not_in = 11 [(predefined).cel = {
+ id: "string.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `WellKnown` rules provide advanced rules against common string
+ // patterns.
+ oneof well_known {
+ // `email` specifies that the field value must be a valid email address, for
+ // example "foo@example.com".
+ //
+ // Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).
+ // Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),
+ // which allows many unexpected forms of email addresses and will easily match
+ // a typographical error.
+ //
+ // If the field value isn't a valid email address, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid email address
+ // string value = 1 [(buf.validate.field).string.email = true];
+ // }
+ // ```
+ bool email = 12 [
+ (predefined).cel = {
+ id: "string.email"
+ message: "value must be a valid email address"
+ expression: "!rules.email || this == '' || this.isEmail()"
+ },
+ (predefined).cel = {
+ id: "string.email_empty"
+ message: "value is empty, which is not a valid email address"
+ expression: "!rules.email || this != ''"
+ }
+ ];
+
+ // `hostname` specifies that the field value must be a valid hostname, for
+ // example "foo.example.com".
+ //
+ // A valid hostname follows the rules below:
+ // - The name consists of one or more labels, separated by a dot (".").
+ // - Each label can be 1 to 63 alphanumeric characters.
+ // - A label can contain hyphens ("-"), but must not start or end with a hyphen.
+ // - The right-most label must not be digits only.
+ // - The name can have a trailing dot—for example, "foo.example.com.".
+ // - The name can be 253 characters at most, excluding the optional trailing dot.
+ //
+ // If the field value isn't a valid hostname, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid hostname
+ // string value = 1 [(buf.validate.field).string.hostname = true];
+ // }
+ // ```
+ bool hostname = 13 [
+ (predefined).cel = {
+ id: "string.hostname"
+ message: "value must be a valid hostname"
+ expression: "!rules.hostname || this == '' || this.isHostname()"
+ },
+ (predefined).cel = {
+ id: "string.hostname_empty"
+ message: "value is empty, which is not a valid hostname"
+ expression: "!rules.hostname || this != ''"
+ }
+ ];
+
+ // `ip` specifies that the field value must be a valid IP (v4 or v6) address.
+ //
+ // IPv4 addresses are expected in the dotted decimal format—for example, "192.168.5.21".
+ // IPv6 addresses are expected in their text representation—for example, "::1",
+ // or "2001:0DB8:ABCD:0012::0".
+ //
+ // Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
+ // Zone identifiers for IPv6 addresses (for example, "fe80::a%en1") are supported.
+ //
+ // If the field value isn't a valid IP address, an error message will be
+ // generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IP address
+ // string value = 1 [(buf.validate.field).string.ip = true];
+ // }
+ // ```
+ bool ip = 14 [
+ (predefined).cel = {
+ id: "string.ip"
+ message: "value must be a valid IP address"
+ expression: "!rules.ip || this == '' || this.isIp()"
+ },
+ (predefined).cel = {
+ id: "string.ip_empty"
+ message: "value is empty, which is not a valid IP address"
+ expression: "!rules.ip || this != ''"
+ }
+ ];
+
+ // `ipv4` specifies that the field value must be a valid IPv4 address—for
+ // example "192.168.5.21". If the field value isn't a valid IPv4 address, an
+ // error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IPv4 address
+ // string value = 1 [(buf.validate.field).string.ipv4 = true];
+ // }
+ // ```
+ bool ipv4 = 15 [
+ (predefined).cel = {
+ id: "string.ipv4"
+ message: "value must be a valid IPv4 address"
+ expression: "!rules.ipv4 || this == '' || this.isIp(4)"
+ },
+ (predefined).cel = {
+ id: "string.ipv4_empty"
+ message: "value is empty, which is not a valid IPv4 address"
+ expression: "!rules.ipv4 || this != ''"
+ }
+ ];
+
+ // `ipv6` specifies that the field value must be a valid IPv6 address—for
+ // example "::1", or "d7a:115c:a1e0:ab12:4843:cd96:626b:430b". If the field
+ // value is not a valid IPv6 address, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IPv6 address
+ // string value = 1 [(buf.validate.field).string.ipv6 = true];
+ // }
+ // ```
+ bool ipv6 = 16 [
+ (predefined).cel = {
+ id: "string.ipv6"
+ message: "value must be a valid IPv6 address"
+ expression: "!rules.ipv6 || this == '' || this.isIp(6)"
+ },
+ (predefined).cel = {
+ id: "string.ipv6_empty"
+ message: "value is empty, which is not a valid IPv6 address"
+ expression: "!rules.ipv6 || this != ''"
+ }
+ ];
+
+ // `uri` specifies that the field value must be a valid URI, for example
+ // "https://example.com/foo/bar?baz=quux#frag".
+ //
+ // URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
+ // Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
+ //
+ // If the field value isn't a valid URI, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid URI
+ // string value = 1 [(buf.validate.field).string.uri = true];
+ // }
+ // ```
+ bool uri = 17 [
+ (predefined).cel = {
+ id: "string.uri"
+ message: "value must be a valid URI"
+ expression: "!rules.uri || this == '' || this.isUri()"
+ },
+ (predefined).cel = {
+ id: "string.uri_empty"
+ message: "value is empty, which is not a valid URI"
+ expression: "!rules.uri || this != ''"
+ }
+ ];
+
+ // `uri_ref` specifies that the field value must be a valid URI Reference—either
+ // a URI such as "https://example.com/foo/bar?baz=quux#frag", or a Relative
+ // Reference such as "./foo/bar?query".
+ //
+ // URI, URI Reference, and Relative Reference are defined in the internet
+ // standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone
+ // Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
+ //
+ // If the field value isn't a valid URI Reference, an error message will be
+ // generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid URI Reference
+ // string value = 1 [(buf.validate.field).string.uri_ref = true];
+ // }
+ // ```
+ bool uri_ref = 18 [(predefined).cel = {
+ id: "string.uri_ref"
+ message: "value must be a valid URI Reference"
+ expression: "!rules.uri_ref || this.isUriRef()"
+ }];
+
+ // `address` specifies that the field value must be either a valid hostname
+ // (for example, "example.com"), or a valid IP (v4 or v6) address (for example,
+ // "192.168.0.1", or "::1"). If the field value isn't a valid hostname or IP,
+ // an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid hostname, or ip address
+ // string value = 1 [(buf.validate.field).string.address = true];
+ // }
+ // ```
+ bool address = 21 [
+ (predefined).cel = {
+ id: "string.address"
+ message: "value must be a valid hostname, or ip address"
+ expression: "!rules.address || this == '' || this.isHostname() || this.isIp()"
+ },
+ (predefined).cel = {
+ id: "string.address_empty"
+ message: "value is empty, which is not a valid hostname, or ip address"
+ expression: "!rules.address || this != ''"
+ }
+ ];
+
+ // `uuid` specifies that the field value must be a valid UUID as defined by
+ // [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the
+ // field value isn't a valid UUID, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid UUID
+ // string value = 1 [(buf.validate.field).string.uuid = true];
+ // }
+ // ```
+ bool uuid = 22 [
+ (predefined).cel = {
+ id: "string.uuid"
+ message: "value must be a valid UUID"
+ expression: "!rules.uuid || this == '' || this.matches('^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$')"
+ },
+ (predefined).cel = {
+ id: "string.uuid_empty"
+ message: "value is empty, which is not a valid UUID"
+ expression: "!rules.uuid || this != ''"
+ }
+ ];
+
+ // `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as
+ // defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes
+ // omitted. If the field value isn't a valid UUID without dashes, an error message
+ // will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid trimmed UUID
+ // string value = 1 [(buf.validate.field).string.tuuid = true];
+ // }
+ // ```
+ bool tuuid = 33 [
+ (predefined).cel = {
+ id: "string.tuuid"
+ message: "value must be a valid trimmed UUID"
+ expression: "!rules.tuuid || this == '' || this.matches('^[0-9a-fA-F]{32}$')"
+ },
+ (predefined).cel = {
+ id: "string.tuuid_empty"
+ message: "value is empty, which is not a valid trimmed UUID"
+ expression: "!rules.tuuid || this != ''"
+ }
+ ];
+
+ // `ip_with_prefixlen` specifies that the field value must be a valid IP
+ // (v4 or v6) address with prefix length—for example, "192.168.5.21/16" or
+ // "2001:0DB8:ABCD:0012::F1/64". If the field value isn't a valid IP with
+ // prefix length, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IP with prefix length
+ // string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+ // }
+ // ```
+ bool ip_with_prefixlen = 26 [
+ (predefined).cel = {
+ id: "string.ip_with_prefixlen"
+ message: "value must be a valid IP prefix"
+ expression: "!rules.ip_with_prefixlen || this == '' || this.isIpPrefix()"
+ },
+ (predefined).cel = {
+ id: "string.ip_with_prefixlen_empty"
+ message: "value is empty, which is not a valid IP prefix"
+ expression: "!rules.ip_with_prefixlen || this != ''"
+ }
+ ];
+
+ // `ipv4_with_prefixlen` specifies that the field value must be a valid
+ // IPv4 address with prefix length—for example, "192.168.5.21/16". If the
+ // field value isn't a valid IPv4 address with prefix length, an error
+ // message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IPv4 address with prefix length
+ // string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+ // }
+ // ```
+ bool ipv4_with_prefixlen = 27 [
+ (predefined).cel = {
+ id: "string.ipv4_with_prefixlen"
+ message: "value must be a valid IPv4 address with prefix length"
+ expression: "!rules.ipv4_with_prefixlen || this == '' || this.isIpPrefix(4)"
+ },
+ (predefined).cel = {
+ id: "string.ipv4_with_prefixlen_empty"
+ message: "value is empty, which is not a valid IPv4 address with prefix length"
+ expression: "!rules.ipv4_with_prefixlen || this != ''"
+ }
+ ];
+
+ // `ipv6_with_prefixlen` specifies that the field value must be a valid
+ // IPv6 address with prefix length—for example, "2001:0DB8:ABCD:0012::F1/64".
+ // If the field value is not a valid IPv6 address with prefix length,
+ // an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IPv6 address prefix length
+ // string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+ // }
+ // ```
+ bool ipv6_with_prefixlen = 28 [
+ (predefined).cel = {
+ id: "string.ipv6_with_prefixlen"
+ message: "value must be a valid IPv6 address with prefix length"
+ expression: "!rules.ipv6_with_prefixlen || this == '' || this.isIpPrefix(6)"
+ },
+ (predefined).cel = {
+ id: "string.ipv6_with_prefixlen_empty"
+ message: "value is empty, which is not a valid IPv6 address with prefix length"
+ expression: "!rules.ipv6_with_prefixlen || this != ''"
+ }
+ ];
+
+ // `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)
+ // prefix—for example, "192.168.0.0/16" or "2001:0DB8:ABCD:0012::0/64".
+ //
+ // The prefix must have all zeros for the unmasked bits. For example,
+ // "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
+ // prefix, and the remaining 64 bits must be zero.
+ //
+ // If the field value isn't a valid IP prefix, an error message will be
+ // generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IP prefix
+ // string value = 1 [(buf.validate.field).string.ip_prefix = true];
+ // }
+ // ```
+ bool ip_prefix = 29 [
+ (predefined).cel = {
+ id: "string.ip_prefix"
+ message: "value must be a valid IP prefix"
+ expression: "!rules.ip_prefix || this == '' || this.isIpPrefix(true)"
+ },
+ (predefined).cel = {
+ id: "string.ip_prefix_empty"
+ message: "value is empty, which is not a valid IP prefix"
+ expression: "!rules.ip_prefix || this != ''"
+ }
+ ];
+
+ // `ipv4_prefix` specifies that the field value must be a valid IPv4
+ // prefix, for example "192.168.0.0/16".
+ //
+ // The prefix must have all zeros for the unmasked bits. For example,
+ // "192.168.0.0/16" designates the left-most 16 bits for the prefix,
+ // and the remaining 16 bits must be zero.
+ //
+ // If the field value isn't a valid IPv4 prefix, an error message
+ // will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IPv4 prefix
+ // string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+ // }
+ // ```
+ bool ipv4_prefix = 30 [
+ (predefined).cel = {
+ id: "string.ipv4_prefix"
+ message: "value must be a valid IPv4 prefix"
+ expression: "!rules.ipv4_prefix || this == '' || this.isIpPrefix(4, true)"
+ },
+ (predefined).cel = {
+ id: "string.ipv4_prefix_empty"
+ message: "value is empty, which is not a valid IPv4 prefix"
+ expression: "!rules.ipv4_prefix || this != ''"
+ }
+ ];
+
+ // `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for
+ // example, "2001:0DB8:ABCD:0012::0/64".
+ //
+ // The prefix must have all zeros for the unmasked bits. For example,
+ // "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
+ // prefix, and the remaining 64 bits must be zero.
+ //
+ // If the field value is not a valid IPv6 prefix, an error message will be
+ // generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid IPv6 prefix
+ // string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+ // }
+ // ```
+ bool ipv6_prefix = 31 [
+ (predefined).cel = {
+ id: "string.ipv6_prefix"
+ message: "value must be a valid IPv6 prefix"
+ expression: "!rules.ipv6_prefix || this == '' || this.isIpPrefix(6, true)"
+ },
+ (predefined).cel = {
+ id: "string.ipv6_prefix_empty"
+ message: "value is empty, which is not a valid IPv6 prefix"
+ expression: "!rules.ipv6_prefix || this != ''"
+ }
+ ];
+
+ // `host_and_port` specifies that the field value must be valid host/port
+ // pair—for example, "example.com:8080".
+ //
+ // The host can be one of:
+ //- An IPv4 address in dotted decimal format—for example, "192.168.5.21".
+ //- An IPv6 address enclosed in square brackets—for example, "[2001:0DB8:ABCD:0012::F1]".
+ //- A hostname—for example, "example.com".
+ //
+ // The port is separated by a colon. It must be non-empty, with a decimal number
+ // in the range of 0-65535, inclusive.
+ bool host_and_port = 32 [
+ (predefined).cel = {
+ id: "string.host_and_port"
+ message: "value must be a valid host (hostname or IP address) and port pair"
+ expression: "!rules.host_and_port || this == '' || this.isHostAndPort(true)"
+ },
+ (predefined).cel = {
+ id: "string.host_and_port_empty"
+ message: "value is empty, which is not a valid host and port pair"
+ expression: "!rules.host_and_port || this != ''"
+ }
+ ];
+
+ // `ulid` specifies that the field value must be a valid ULID (Universally Unique
+ // Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec).
+ // If the field value isn't a valid ULID, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid ULID
+ // string value = 1 [(buf.validate.field).string.ulid = true];
+ // }
+ // ```
+ bool ulid = 35 [
+ (predefined).cel = {
+ id: "string.ulid"
+ message: "value must be a valid ULID"
+ expression: "!rules.ulid || this == '' || this.matches('^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$')"
+ },
+ (predefined).cel = {
+ id: "string.ulid_empty"
+ message: "value is empty, which is not a valid ULID"
+ expression: "!rules.ulid || this != ''"
+ }
+ ];
+
+ // `well_known_regex` specifies a common well-known pattern
+ // defined as a regex. If the field value doesn't match the well-known
+ // regex, an error message will be generated.
+ //
+ // ```proto
+ // message MyString {
+ // // value must be a valid HTTP header value
+ // string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];
+ // }
+ // ```
+ //
+ // #### KnownRegex
+ //
+ // `well_known_regex` contains some well-known patterns.
+ //
+ // | Name | Number | Description |
+ // |-------------------------------|--------|-------------------------------------------|
+ // | KNOWN_REGEX_UNSPECIFIED | 0 | |
+ // | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |
+ // | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |
+ KnownRegex well_known_regex = 24 [
+ (predefined).cel = {
+ id: "string.well_known_regex.header_name"
+ message: "value must be a valid HTTP header name"
+ expression:
+ "rules.well_known_regex != 1 || this == '' || this.matches(!has(rules.strict) || rules.strict ?"
+ "'^:?[0-9a-zA-Z!#$%&\\'*+-.^_|~\\x60]+$' :"
+ "'^[^\\u0000\\u000A\\u000D]+$')"
+ },
+ (predefined).cel = {
+ id: "string.well_known_regex.header_name_empty"
+ message: "value is empty, which is not a valid HTTP header name"
+ expression: "rules.well_known_regex != 1 || this != ''"
+ },
+ (predefined).cel = {
+ id: "string.well_known_regex.header_value"
+ message: "value must be a valid HTTP header value"
+ expression:
+ "rules.well_known_regex != 2 || this.matches(!has(rules.strict) || rules.strict ?"
+ "'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$' :"
+ "'^[^\\u0000\\u000A\\u000D]*$')"
+ }
+ ];
+ }
+
+ // This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+ // enable strict header validation. By default, this is true, and HTTP header
+ // validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser
+ // validations that only disallow `\r\n\0` characters, which can be used to
+ // bypass header matching rules.
+ //
+ // ```proto
+ // message MyString {
+ // // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+ // string value = 1 [(buf.validate.field).string.strict = false];
+ // }
+ // ```
+ optional bool strict = 25;
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyString {
+ // string value = 1 [
+ // (buf.validate.field).string.example = "hello",
+ // (buf.validate.field).string.example = "world"
+ // ];
+ // }
+ // ```
+ repeated string example = 34 [(predefined).cel = {
+ id: "string.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// KnownRegex contains some well-known patterns.
+enum KnownRegex {
+ KNOWN_REGEX_UNSPECIFIED = 0;
+
+ // HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).
+ KNOWN_REGEX_HTTP_HEADER_NAME = 1;
+
+ // HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).
+ KNOWN_REGEX_HTTP_HEADER_VALUE = 2;
+}
+
+// BytesRules describe the rules applied to `bytes` values. These rules
+// may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
+message BytesRules {
+ // `const` requires the field value to exactly match the specified bytes
+ // value. If the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must be "\x01\x02\x03\x04"
+ // bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"];
+ // }
+ // ```
+ optional bytes const = 1 [(predefined).cel = {
+ id: "bytes.const"
+ expression: "this != getField(rules, 'const') ? 'value must be %x'.format([getField(rules, 'const')]) : ''"
+ }];
+
+ // `len` requires the field value to have the specified length in bytes.
+ // If the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value length must be 4 bytes.
+ // optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+ // }
+ // ```
+ optional uint64 len = 13 [(predefined).cel = {
+ id: "bytes.len"
+ expression: "uint(this.size()) != rules.len ? 'value length must be %s bytes'.format([rules.len]) : ''"
+ }];
+
+ // `min_len` requires the field value to have at least the specified minimum
+ // length in bytes.
+ // If the field value doesn't meet the requirement, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value length must be at least 2 bytes.
+ // optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+ // }
+ // ```
+ optional uint64 min_len = 2 [(predefined).cel = {
+ id: "bytes.min_len"
+ expression: "uint(this.size()) < rules.min_len ? 'value length must be at least %s bytes'.format([rules.min_len]) : ''"
+ }];
+
+ // `max_len` requires the field value to have at most the specified maximum
+ // length in bytes.
+ // If the field value exceeds the requirement, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must be at most 6 bytes.
+ // optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+ // }
+ // ```
+ optional uint64 max_len = 3 [(predefined).cel = {
+ id: "bytes.max_len"
+ expression: "uint(this.size()) > rules.max_len ? 'value must be at most %s bytes'.format([rules.max_len]) : ''"
+ }];
+
+ // `pattern` requires the field value to match the specified regular
+ // expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+ // The value of the field must be valid UTF-8 or validation will fail with a
+ // runtime error.
+ // If the field value doesn't match the pattern, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must match regex pattern "^[a-zA-Z0-9]+$".
+ // optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+ // }
+ // ```
+ optional string pattern = 4 [(predefined).cel = {
+ id: "bytes.pattern"
+ expression: "!string(this).matches(rules.pattern) ? 'value must match regex pattern `%s`'.format([rules.pattern]) : ''"
+ }];
+
+ // `prefix` requires the field value to have the specified bytes at the
+ // beginning of the string.
+ // If the field value doesn't meet the requirement, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value does not have prefix \x01\x02
+ // optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"];
+ // }
+ // ```
+ optional bytes prefix = 5 [(predefined).cel = {
+ id: "bytes.prefix"
+ expression: "!this.startsWith(rules.prefix) ? 'value does not have prefix %x'.format([rules.prefix]) : ''"
+ }];
+
+ // `suffix` requires the field value to have the specified bytes at the end
+ // of the string.
+ // If the field value doesn't meet the requirement, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value does not have suffix \x03\x04
+ // optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"];
+ // }
+ // ```
+ optional bytes suffix = 6 [(predefined).cel = {
+ id: "bytes.suffix"
+ expression: "!this.endsWith(rules.suffix) ? 'value does not have suffix %x'.format([rules.suffix]) : ''"
+ }];
+
+ // `contains` requires the field value to have the specified bytes anywhere in
+ // the string.
+ // If the field value doesn't meet the requirement, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value does not contain \x02\x03
+ // optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"];
+ // }
+ // ```
+ optional bytes contains = 7 [(predefined).cel = {
+ id: "bytes.contains"
+ expression: "!this.contains(rules.contains) ? 'value does not contain %x'.format([rules.contains]) : ''"
+ }];
+
+ // `in` requires the field value to be equal to one of the specified
+ // values. If the field value doesn't match any of the specified values, an
+ // error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must in ["\x01\x02", "\x02\x03", "\x03\x04"]
+ // optional bytes value = 1 [(buf.validate.field).bytes.in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
+ // }
+ // ```
+ repeated bytes in = 8 [(predefined).cel = {
+ id: "bytes.in"
+ expression: "getField(rules, 'in').size() > 0 && !(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to be not equal to any of the specified
+ // values.
+ // If the field value matches any of the specified values, an error message is
+ // generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"]
+ // optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
+ // }
+ // ```
+ repeated bytes not_in = 9 [(predefined).cel = {
+ id: "bytes.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // WellKnown rules provide advanced rules against common byte
+ // patterns
+ oneof well_known {
+ // `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+ // If the field value doesn't meet this rule, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must be a valid IP address
+ // optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+ // }
+ // ```
+ bool ip = 10 [
+ (predefined).cel = {
+ id: "bytes.ip"
+ message: "value must be a valid IP address"
+ expression: "!rules.ip || this.size() == 0 || this.size() == 4 || this.size() == 16"
+ },
+ (predefined).cel = {
+ id: "bytes.ip_empty"
+ message: "value is empty, which is not a valid IP address"
+ expression: "!rules.ip || this.size() != 0"
+ }
+ ];
+
+ // `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+ // If the field value doesn't meet this rule, an error message is generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must be a valid IPv4 address
+ // optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+ // }
+ // ```
+ bool ipv4 = 11 [
+ (predefined).cel = {
+ id: "bytes.ipv4"
+ message: "value must be a valid IPv4 address"
+ expression: "!rules.ipv4 || this.size() == 0 || this.size() == 4"
+ },
+ (predefined).cel = {
+ id: "bytes.ipv4_empty"
+ message: "value is empty, which is not a valid IPv4 address"
+ expression: "!rules.ipv4 || this.size() != 0"
+ }
+ ];
+
+ // `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+ // If the field value doesn't meet this rule, an error message is generated.
+ // ```proto
+ // message MyBytes {
+ // // value must be a valid IPv6 address
+ // optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+ // }
+ // ```
+ bool ipv6 = 12 [
+ (predefined).cel = {
+ id: "bytes.ipv6"
+ message: "value must be a valid IPv6 address"
+ expression: "!rules.ipv6 || this.size() == 0 || this.size() == 16"
+ },
+ (predefined).cel = {
+ id: "bytes.ipv6_empty"
+ message: "value is empty, which is not a valid IPv6 address"
+ expression: "!rules.ipv6 || this.size() != 0"
+ }
+ ];
+
+ // `uuid` ensures that the field `value` encodes the 128-bit UUID data as
+ // defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2).
+ // The field must contain exactly 16 bytes
+ // representing the UUID. If the field value isn't a valid UUID, an error
+ // message will be generated.
+ //
+ // ```proto
+ // message MyBytes {
+ // // value must be a valid UUID
+ // optional bytes value = 1 [(buf.validate.field).bytes.uuid = true];
+ // }
+ // ```
+ bool uuid = 15 [
+ (predefined).cel = {
+ id: "bytes.uuid"
+ message: "value must be a valid UUID"
+ expression: "!rules.uuid || this.size() == 0 || this.size() == 16"
+ },
+ (predefined).cel = {
+ id: "bytes.uuid_empty"
+ message: "value is empty, which is not a valid UUID"
+ expression: "!rules.uuid || this.size() != 0"
+ }
+ ];
+ }
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyBytes {
+ // bytes value = 1 [
+ // (buf.validate.field).bytes.example = "\x01\x02",
+ // (buf.validate.field).bytes.example = "\x02\x03"
+ // ];
+ // }
+ // ```
+ repeated bytes example = 14 [(predefined).cel = {
+ id: "bytes.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// EnumRules describe the rules applied to `enum` values.
+message EnumRules {
+ // `const` requires the field value to exactly match the specified enum value.
+ // If the field value doesn't match, an error message is generated.
+ //
+ // ```proto
+ // enum MyEnum {
+ // MY_ENUM_UNSPECIFIED = 0;
+ // MY_ENUM_VALUE1 = 1;
+ // MY_ENUM_VALUE2 = 2;
+ // }
+ //
+ // message MyMessage {
+ // // The field `value` must be exactly MY_ENUM_VALUE1.
+ // MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+ // }
+ // ```
+ optional int32 const = 1 [(predefined).cel = {
+ id: "enum.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+
+ // `defined_only` requires the field value to be one of the defined values for
+ // this enum, failing on any undefined value.
+ //
+ // ```proto
+ // enum MyEnum {
+ // MY_ENUM_UNSPECIFIED = 0;
+ // MY_ENUM_VALUE1 = 1;
+ // MY_ENUM_VALUE2 = 2;
+ // }
+ //
+ // message MyMessage {
+ // // The field `value` must be a defined value of MyEnum.
+ // MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+ // }
+ // ```
+ optional bool defined_only = 2;
+
+ // `in` requires the field value to be equal to one of the
+ //specified enum values. If the field value doesn't match any of the
+ //specified values, an error message is generated.
+ //
+ // ```proto
+ // enum MyEnum {
+ // MY_ENUM_UNSPECIFIED = 0;
+ // MY_ENUM_VALUE1 = 1;
+ // MY_ENUM_VALUE2 = 2;
+ // }
+ //
+ // message MyMessage {
+ // // The field `value` must be equal to one of the specified values.
+ // MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];
+ // }
+ // ```
+ repeated int32 in = 3 [(predefined).cel = {
+ id: "enum.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to be not equal to any of the
+ //specified enum values. If the field value matches one of the specified
+ // values, an error message is generated.
+ //
+ // ```proto
+ // enum MyEnum {
+ // MY_ENUM_UNSPECIFIED = 0;
+ // MY_ENUM_VALUE1 = 1;
+ // MY_ENUM_VALUE2 = 2;
+ // }
+ //
+ // message MyMessage {
+ // // The field `value` must not be equal to any of the specified values.
+ // MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];
+ // }
+ // ```
+ repeated int32 not_in = 4 [(predefined).cel = {
+ id: "enum.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // enum MyEnum {
+ // MY_ENUM_UNSPECIFIED = 0;
+ // MY_ENUM_VALUE1 = 1;
+ // MY_ENUM_VALUE2 = 2;
+ // }
+ //
+ // message MyMessage {
+ // (buf.validate.field).enum.example = 1,
+ // (buf.validate.field).enum.example = 2
+ // }
+ // ```
+ repeated int32 example = 5 [(predefined).cel = {
+ id: "enum.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// RepeatedRules describe the rules applied to `repeated` values.
+message RepeatedRules {
+ // `min_items` requires that this field must contain at least the specified
+ // minimum number of items.
+ //
+ // Note that `min_items = 1` is equivalent to setting a field as `required`.
+ //
+ // ```proto
+ // message MyRepeated {
+ // // value must contain at least 2 items
+ // repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+ // }
+ // ```
+ optional uint64 min_items = 1 [(predefined).cel = {
+ id: "repeated.min_items"
+ expression: "uint(this.size()) < rules.min_items ? 'value must contain at least %d item(s)'.format([rules.min_items]) : ''"
+ }];
+
+ // `max_items` denotes that this field must not exceed a
+ // certain number of items as the upper limit. If the field contains more
+ // items than specified, an error message will be generated, requiring the
+ // field to maintain no more than the specified number of items.
+ //
+ // ```proto
+ // message MyRepeated {
+ // // value must contain no more than 3 item(s)
+ // repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+ // }
+ // ```
+ optional uint64 max_items = 2 [(predefined).cel = {
+ id: "repeated.max_items"
+ expression: "uint(this.size()) > rules.max_items ? 'value must contain no more than %s item(s)'.format([rules.max_items]) : ''"
+ }];
+
+ // `unique` indicates that all elements in this field must
+ // be unique. This rule is strictly applicable to scalar and enum
+ // types, with message types not being supported.
+ //
+ // ```proto
+ // message MyRepeated {
+ // // repeated value must contain unique items
+ // repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+ // }
+ // ```
+ optional bool unique = 3 [(predefined).cel = {
+ id: "repeated.unique"
+ message: "repeated value must contain unique items"
+ expression: "!rules.unique || this.unique()"
+ }];
+
+ // `items` details the rules to be applied to each item
+ // in the field. Even for repeated message fields, validation is executed
+ // against each item unless `ignore` is specified.
+ //
+ // ```proto
+ // message MyRepeated {
+ // // The items in the field `value` must follow the specified rules.
+ // repeated string value = 1 [(buf.validate.field).repeated.items = {
+ // string: {
+ // min_len: 3
+ // max_len: 10
+ // }
+ // }];
+ // }
+ // ```
+ //
+ // Note that the `required` rule does not apply. Repeated items
+ // cannot be unset.
+ optional FieldRules items = 4;
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// MapRules describe the rules applied to `map` values.
+message MapRules {
+ // Specifies the minimum number of key-value pairs allowed. If the field has
+ // fewer key-value pairs than specified, an error message is generated.
+ //
+ // ```proto
+ // message MyMap {
+ // // The field `value` must have at least 2 key-value pairs.
+ // map value = 1 [(buf.validate.field).map.min_pairs = 2];
+ // }
+ // ```
+ optional uint64 min_pairs = 1 [(predefined).cel = {
+ id: "map.min_pairs"
+ expression: "uint(this.size()) < rules.min_pairs ? 'map must be at least %d entries'.format([rules.min_pairs]) : ''"
+ }];
+
+ // Specifies the maximum number of key-value pairs allowed. If the field has
+ // more key-value pairs than specified, an error message is generated.
+ //
+ // ```proto
+ // message MyMap {
+ // // The field `value` must have at most 3 key-value pairs.
+ // map value = 1 [(buf.validate.field).map.max_pairs = 3];
+ // }
+ // ```
+ optional uint64 max_pairs = 2 [(predefined).cel = {
+ id: "map.max_pairs"
+ expression: "uint(this.size()) > rules.max_pairs ? 'map must be at most %d entries'.format([rules.max_pairs]) : ''"
+ }];
+
+ // Specifies the rules to be applied to each key in the field.
+ //
+ // ```proto
+ // message MyMap {
+ // // The keys in the field `value` must follow the specified rules.
+ // map value = 1 [(buf.validate.field).map.keys = {
+ // string: {
+ // min_len: 3
+ // max_len: 10
+ // }
+ // }];
+ // }
+ // ```
+ //
+ // Note that the `required` rule does not apply. Map keys cannot be unset.
+ optional FieldRules keys = 4;
+
+ // Specifies the rules to be applied to the value of each key in the
+ // field. Message values will still have their validations evaluated unless
+ // `ignore` is specified.
+ //
+ // ```proto
+ // message MyMap {
+ // // The values in the field `value` must follow the specified rules.
+ // map value = 1 [(buf.validate.field).map.values = {
+ // string: {
+ // min_len: 5
+ // max_len: 20
+ // }
+ // }];
+ // }
+ // ```
+ // Note that the `required` rule does not apply. Map values cannot be unset.
+ optional FieldRules values = 5;
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.
+message AnyRules {
+ // `in` requires the field's `type_url` to be equal to one of the
+ //specified values. If it doesn't match any of the specified values, an error
+ // message is generated.
+ //
+ // ```proto
+ // message MyAny {
+ // // The `value` field must have a `type_url` equal to one of the specified values.
+ // google.protobuf.Any value = 1 [(buf.validate.field).any = {
+ // in: ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]
+ // }];
+ // }
+ // ```
+ repeated string in = 2;
+
+ // requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+ //
+ // ```proto
+ // message MyAny {
+ // // The `value` field must not have a `type_url` equal to any of the specified values.
+ // google.protobuf.Any value = 1 [(buf.validate.field).any = {
+ // not_in: ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]
+ // }];
+ // }
+ // ```
+ repeated string not_in = 3;
+}
+
+// DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.
+message DurationRules {
+ // `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+ // If the field's value deviates from the specified value, an error message
+ // will be generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // value must equal 5s
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+ // }
+ // ```
+ optional google.protobuf.Duration const = 2 [(predefined).cel = {
+ id: "duration.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+ // exclusive. If the field's value is greater than or equal to the specified
+ // value, an error message will be generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // value must be less than 5s
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+ // }
+ // ```
+ google.protobuf.Duration lt = 3 [(predefined).cel = {
+ id: "duration.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // `lte` indicates that the field must be less than or equal to the specified
+ // value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+ // an error message will be generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // value must be less than or equal to 10s
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+ // }
+ // ```
+ google.protobuf.Duration lte = 4 [(predefined).cel = {
+ id: "duration.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the duration field value to be greater than the specified
+ // value (exclusive). If the value of `gt` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // duration must be greater than 5s [duration.gt]
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+ //
+ // // duration must be greater than 5s and less than 10s [duration.gt_lt]
+ // google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+ //
+ // // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+ // google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+ // }
+ // ```
+ google.protobuf.Duration gt = 5 [
+ (predefined).cel = {
+ id: "duration.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the duration field value to be greater than or equal to the
+ // specified value (exclusive). If the value of `gte` is larger than a
+ // specified `lt` or `lte`, the range is reversed, and the field value must
+ // be outside the specified range. If the field value doesn't meet the
+ // required conditions, an error message is generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // duration must be greater than or equal to 5s [duration.gte]
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+ //
+ // // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+ // google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+ //
+ // // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+ // google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+ // }
+ // ```
+ google.protobuf.Duration gte = 6 [
+ (predefined).cel = {
+ id: "duration.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "duration.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+ }
+
+ // `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+ // If the field's value doesn't correspond to any of the specified values,
+ // an error message will be generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // value must be in list [1s, 2s, 3s]
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+ // }
+ // ```
+ repeated google.protobuf.Duration in = 7 [(predefined).cel = {
+ id: "duration.in"
+ expression: "!(this in getField(rules, 'in')) ? 'value must be in list %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` denotes that the field must not be equal to
+ // any of the specified values of the `google.protobuf.Duration` type.
+ // If the field's value matches any of these values, an error message will be
+ // generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // value must not be in list [1s, 2s, 3s]
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+ // }
+ // ```
+ repeated google.protobuf.Duration not_in = 8 [(predefined).cel = {
+ id: "duration.not_in"
+ expression: "this in rules.not_in ? 'value must not be in list %s'.format([rules.not_in]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyDuration {
+ // google.protobuf.Duration value = 1 [
+ // (buf.validate.field).duration.example = { seconds: 1 },
+ // (buf.validate.field).duration.example = { seconds: 2 },
+ // ];
+ // }
+ // ```
+ repeated google.protobuf.Duration example = 9 [(predefined).cel = {
+ id: "duration.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type.
+message FieldMaskRules {
+ // `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly.
+ // If the field's value deviates from the specified value, an error message
+ // will be generated.
+ //
+ // ```proto
+ // message MyFieldMask {
+ // // value must equal ["a"]
+ // google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = {
+ // paths: ["a"]
+ // }];
+ // }
+ // ```
+ optional google.protobuf.FieldMask const = 1 [(predefined).cel = {
+ id: "field_mask.const"
+ expression: "this.paths != getField(rules, 'const').paths ? 'value must equal paths %s'.format([getField(rules, 'const').paths]) : ''"
+ }];
+
+ // `in` requires the field value to only contain paths matching specified
+ // values or their subpaths.
+ // If any of the field value's paths doesn't match the rule,
+ // an error message is generated.
+ // See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask
+ //
+ // ```proto
+ // message MyFieldMask {
+ // // The `value` FieldMask must only contain paths listed in `in`.
+ // google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {
+ // in: ["a", "b", "c.a"]
+ // }];
+ // }
+ // ```
+ repeated string in = 2 [(predefined).cel = {
+ id: "field_mask.in"
+ expression: "!this.paths.all(p, p in getField(rules, 'in') || getField(rules, 'in').exists(f, p.startsWith(f+'.'))) ? 'value must only contain paths in %s'.format([getField(rules, 'in')]) : ''"
+ }];
+
+ // `not_in` requires the field value to not contain paths matching specified
+ // values or their subpaths.
+ // If any of the field value's paths matches the rule,
+ // an error message is generated.
+ // See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask
+ //
+ // ```proto
+ // message MyFieldMask {
+ // // The `value` FieldMask shall not contain paths listed in `not_in`.
+ // google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {
+ // not_in: ["forbidden", "immutable", "c.a"]
+ // }];
+ // }
+ // ```
+ repeated string not_in = 3 [(predefined).cel = {
+ id: "field_mask.not_in"
+ expression: "!this.paths.all(p, !(p in getField(rules, 'not_in') || getField(rules, 'not_in').exists(f, p.startsWith(f+'.')))) ? 'value must not contain any paths in %s'.format([getField(rules, 'not_in')]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyFieldMask {
+ // google.protobuf.FieldMask value = 1 [
+ // (buf.validate.field).field_mask.example = { paths: ["a", "b"] },
+ // (buf.validate.field).field_mask.example = { paths: ["c.a", "d"] },
+ // ];
+ // }
+ // ```
+ repeated google.protobuf.FieldMask example = 4 [(predefined).cel = {
+ id: "field_mask.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.
+message TimestampRules {
+ // `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // // value must equal 2023-05-03T10:00:00Z
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+ // }
+ // ```
+ optional google.protobuf.Timestamp const = 2 [(predefined).cel = {
+ id: "timestamp.const"
+ expression: "this != getField(rules, 'const') ? 'value must equal %s'.format([getField(rules, 'const')]) : ''"
+ }];
+ oneof less_than {
+ // requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.
+ //
+ // ```proto
+ // message MyDuration {
+ // // duration must be less than 'P3D' [duration.lt]
+ // google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+ // }
+ // ```
+ google.protobuf.Timestamp lt = 3 [(predefined).cel = {
+ id: "timestamp.lt"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this >= rules.lt"
+ "? 'value must be less than %s'.format([rules.lt]) : ''"
+ }];
+
+ // requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+ // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+ // }
+ // ```
+ google.protobuf.Timestamp lte = 4 [(predefined).cel = {
+ id: "timestamp.lte"
+ expression:
+ "!has(rules.gte) && !has(rules.gt) && this > rules.lte"
+ "? 'value must be less than or equal to %s'.format([rules.lte]) : ''"
+ }];
+
+ // `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // // value must be less than now
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+ // }
+ // ```
+ bool lt_now = 7 [(predefined).cel = {
+ id: "timestamp.lt_now"
+ expression: "(rules.lt_now && this > now) ? 'value must be less than now' : ''"
+ }];
+ }
+ oneof greater_than {
+ // `gt` requires the timestamp field value to be greater than the specified
+ // value (exclusive). If the value of `gt` is larger than a specified `lt`
+ // or `lte`, the range is reversed, and the field value must be outside the
+ // specified range. If the field value doesn't meet the required conditions,
+ // an error message is generated.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+ // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+ //
+ // // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+ // google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+ //
+ // // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+ // google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+ // }
+ // ```
+ google.protobuf.Timestamp gt = 5 [
+ (predefined).cel = {
+ id: "timestamp.gt"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this <= rules.gt"
+ "? 'value must be greater than %s'.format([rules.gt]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gt_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)"
+ "? 'value must be greater than %s and less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gt_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than %s'.format([rules.gt, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gt_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)"
+ "? 'value must be greater than %s and less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gt_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)"
+ "? 'value must be greater than %s or less than or equal to %s'.format([rules.gt, rules.lte]) : ''"
+ }
+ ];
+
+ // `gte` requires the timestamp field value to be greater than or equal to the
+ // specified value (exclusive). If the value of `gte` is larger than a
+ // specified `lt` or `lte`, the range is reversed, and the field value
+ // must be outside the specified range. If the field value doesn't meet
+ // the required conditions, an error message is generated.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+ // google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+ //
+ // // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+ // google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+ //
+ // // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+ // google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+ // }
+ // ```
+ google.protobuf.Timestamp gte = 6 [
+ (predefined).cel = {
+ id: "timestamp.gte"
+ expression:
+ "!has(rules.lt) && !has(rules.lte) && this < rules.gte"
+ "? 'value must be greater than or equal to %s'.format([rules.gte]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gte_lt"
+ expression:
+ "has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gte_lt_exclusive"
+ expression:
+ "has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than %s'.format([rules.gte, rules.lt]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gte_lte"
+ expression:
+ "has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)"
+ "? 'value must be greater than or equal to %s and less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ },
+ (predefined).cel = {
+ id: "timestamp.gte_lte_exclusive"
+ expression:
+ "has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)"
+ "? 'value must be greater than or equal to %s or less than or equal to %s'.format([rules.gte, rules.lte]) : ''"
+ }
+ ];
+
+ // `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // // value must be greater than now
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+ // }
+ // ```
+ bool gt_now = 8 [(predefined).cel = {
+ id: "timestamp.gt_now"
+ expression: "(rules.gt_now && this < now) ? 'value must be greater than now' : ''"
+ }];
+ }
+
+ // `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // // value must be within 1 hour of now
+ // google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+ // }
+ // ```
+ optional google.protobuf.Duration within = 9 [(predefined).cel = {
+ id: "timestamp.within"
+ expression: "this < now-rules.within || this > now+rules.within ? 'value must be within %s of now'.format([rules.within]) : ''"
+ }];
+
+ // `example` specifies values that the field may have. These values SHOULD
+ // conform to other rules. `example` values will not impact validation
+ // but may be used as helpful guidance on how to populate the given field.
+ //
+ // ```proto
+ // message MyTimestamp {
+ // google.protobuf.Timestamp value = 1 [
+ // (buf.validate.field).timestamp.example = { seconds: 1672444800 },
+ // (buf.validate.field).timestamp.example = { seconds: 1672531200 },
+ // ];
+ // }
+ // ```
+ repeated google.protobuf.Timestamp example = 10 [(predefined).cel = {
+ id: "timestamp.example"
+ expression: "true"
+ }];
+
+ // Extension fields that have the (buf.validate.predefined) option set
+ // will be treated as predefined field rules.
+ // See https://protovalidate.com/schemas/predefined-rules/
+ extensions 1000 to max;
+}
+
+// `Violations` is a collection of `Violation` messages. This message type is returned by
+// Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.
+// Each individual violation is represented by a `Violation` message.
+message Violations {
+ // `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+ repeated Violation violations = 1;
+}
+
+// `Violation` represents a single instance where a validation rule, expressed
+// as a `Rule`, was not met. It provides information about the field that
+// caused the violation, the specific rule that wasn't fulfilled, and a
+// human-readable error message.
+//
+// For example, consider the following message:
+//
+// ```proto
+// message User {
+// int32 age = 1 [(buf.validate.field).cel = {
+// id: "user.age",
+// expression: "this < 18 ? 'User must be at least 18 years old' : ''",
+// }];
+// }
+// ```
+//
+// It could produce the following violation:
+//
+// ```json
+// {
+// "ruleId": "user.age",
+// "message": "User must be at least 18 years old",
+// "field": {
+// "elements": [
+// {
+// "fieldNumber": 1,
+// "fieldName": "age",
+// "fieldType": "TYPE_INT32"
+// }
+// ]
+// },
+// "rule": {
+// "elements": [
+// {
+// "fieldNumber": 23,
+// "fieldName": "cel",
+// "fieldType": "TYPE_MESSAGE",
+// "index": "0"
+// }
+// ]
+// }
+// }
+// ```
+message Violation {
+ // `field` is a machine-readable path to the field that failed validation.
+ // This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+ //
+ // For example, consider the following message:
+ //
+ // ```proto
+ // message Message {
+ // bool a = 1 [(buf.validate.field).required = true];
+ // }
+ // ```
+ //
+ // It could produce the following violation:
+ //
+ // ```textproto
+ // violation {
+ // field { element { field_number: 1, field_name: "a", field_type: 8 } }
+ // ...
+ // }
+ // ```
+ optional FieldPath field = 5;
+
+ // `rule` is a machine-readable path that points to the specific rule that failed validation.
+ // This will be a nested field starting from the FieldRules of the field that failed validation.
+ // For custom rules, this will provide the path of the rule, e.g. `cel[0]`.
+ //
+ // For example, consider the following message:
+ //
+ // ```proto
+ // message Message {
+ // bool a = 1 [(buf.validate.field).required = true];
+ // bool b = 2 [(buf.validate.field).cel = {
+ // id: "custom_rule",
+ // expression: "!this ? 'b must be true': ''"
+ // }]
+ // }
+ // ```
+ //
+ // It could produce the following violations:
+ //
+ // ```textproto
+ // violation {
+ // rule { element { field_number: 25, field_name: "required", field_type: 8 } }
+ // ...
+ // }
+ // violation {
+ // rule { element { field_number: 23, field_name: "cel", field_type: 11, index: 0 } }
+ // ...
+ // }
+ // ```
+ optional FieldPath rule = 6;
+
+ // `rule_id` is the unique identifier of the `Rule` that was not fulfilled.
+ // This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.
+ optional string rule_id = 2;
+
+ // `message` is a human-readable error message that describes the nature of the violation.
+ // This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.
+ optional string message = 3;
+
+ // `for_key` indicates whether the violation was caused by a map key, rather than a value.
+ optional bool for_key = 4;
+
+ reserved 1;
+ reserved "field_path";
+}
+
+// `FieldPath` provides a path to a nested protobuf field.
+//
+// This message provides enough information to render a dotted field path even without protobuf descriptors.
+// It also provides enough information to resolve a nested field through unknown wire data.
+message FieldPath {
+ // `elements` contains each element of the path, starting from the root and recursing downward.
+ repeated FieldPathElement elements = 1;
+}
+
+// `FieldPathElement` provides enough information to nest through a single protobuf field.
+//
+// If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.
+// A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.
+// The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.
+message FieldPathElement {
+ // `field_number` is the field number this path element refers to.
+ optional int32 field_number = 1;
+
+ // `field_name` contains the field name this path element refers to.
+ // This can be used to display a human-readable path even if the field number is unknown.
+ optional string field_name = 2;
+
+ // `field_type` specifies the type of this field. When using reflection, this value is not needed.
+ //
+ // This value is provided to make it possible to traverse unknown fields through wire data.
+ // When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.
+ //
+ // [1]: https://protobuf.dev/programming-guides/encoding/#packed
+ // [2]: https://protobuf.dev/programming-guides/encoding/#groups
+ //
+ // N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and
+ // can be explicitly used in Protocol Buffers 2023 Edition.
+ optional google.protobuf.FieldDescriptorProto.Type field_type = 3;
+
+ // `key_type` specifies the map key type of this field. This value is useful when traversing
+ // unknown fields through wire data: specifically, it allows handling the differences between
+ // different integer encodings.
+ optional google.protobuf.FieldDescriptorProto.Type key_type = 4;
+
+ // `value_type` specifies map value type of this field. This is useful if you want to display a
+ // value inside unknown fields through wire data.
+ optional google.protobuf.FieldDescriptorProto.Type value_type = 5;
+
+ // `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.
+ oneof subscript {
+ // `index` specifies a 0-based index into a repeated field.
+ uint64 index = 6;
+
+ // `bool_key` specifies a map key of type bool.
+ bool bool_key = 7;
+
+ // `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.
+ int64 int_key = 8;
+
+ // `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.
+ uint64 uint_key = 9;
+
+ // `string_key` specifies a map key of type string.
+ string string_key = 10;
+ }
+}