diff --git a/.gitignore b/.gitignore
index d260b01..0294e6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,75 +3,28 @@
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-# User-specific stuff
-.idea/**/workspace.xml
-.idea/**/tasks.xml
-.idea/**/usage.statistics.xml
-.idea/**/dictionaries
-.idea/**/shelf
-
-# Generated files
-.idea/**/contentModel.xml
-
-# Sensitive or high-churn files
-.idea/**/dataSources/
-.idea/**/dataSources.ids
-.idea/**/dataSources.local.xml
-.idea/**/sqlDataSources.xml
-.idea/**/dynamic.xml
-.idea/**/uiDesigner.xml
-.idea/**/dbnavigator.xml
-
-# Gradle
-.idea/**/gradle.xml
-.idea/**/libraries
-
-# Gradle and Maven with auto-import
-# When using Gradle or Maven with auto-import, you should exclude module files,
-# since they will be recreated, and may cause churn. Uncomment if using
-# auto-import.
-# .idea/artifacts
-# .idea/compiler.xml
-# .idea/jarRepositories.xml
-# .idea/modules.xml
-# .idea/*.iml
-# .idea/modules
-# *.iml
-# *.ipr
+.idea/
+.idea_modules/
+*.iml
# CMake
cmake-build-*/
-# Mongo Explorer plugin
-.idea/**/mongoSettings.xml
-
# File-based project format
*.iws
# IntelliJ
out/
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
# JIRA plugin
atlassian-ide-plugin.xml
-# Cursive Clojure plugin
-.idea/replstate.xml
-
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
-# Editor-based Rest Client
-.idea/httpRequests
-
-# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
-
### macOS template
# General
.DS_Store
diff --git a/config/crd/bases/traffic.opensergo.io_trafficerouters.yaml b/config/crd/bases/traffic.opensergo.io_trafficerouters.yaml
new file mode 100644
index 0000000..1fce457
--- /dev/null
+++ b/config/crd/bases/traffic.opensergo.io_trafficerouters.yaml
@@ -0,0 +1,722 @@
+# DO NOT EDIT - Generated by Cue OpenAPI generator based on Istio APIs.
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ "helm.sh/resource-policy": keep
+ labels:
+ app: istio-pilot
+ chart: istio
+ heritage: Tiller
+ release: istio
+ name: trafficrouters.traffic.opensergo.io
+spec:
+ group: traffic.opensergo.io
+ names:
+ categories:
+ - istio-io
+ - networking-istio-io
+ kind: TrafficRouter
+ listKind: TrafficRouterList
+ plural: trafficrouters
+ shortNames:
+ - tr
+ singular: trafficrouter
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - description: The names of gateways and sidecars that should apply these routes
+ jsonPath: .spec.gateways
+ name: Gateways
+ type: string
+ - description: The destination hosts to which traffic is being sent
+ jsonPath: .spec.hosts
+ name: Hosts
+ type: string
+ - description: 'CreationTimestamp is a timestamp representing the server time
+ when this object was created. It is not guaranteed to be set in happens-before
+ order across separate operations. Clients may not set this value. It is represented
+ in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for
+ lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata'
+ jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ properties:
+ spec:
+ description: Configuration affecting traffic routing.
+ properties:
+ exportTo:
+ description: A list of namespaces to which this virtual service is
+ exported.
+ items:
+ type: string
+ type: array
+ gateways:
+ description: The names of gateways and sidecars that should apply
+ these routes.
+ items:
+ type: string
+ type: array
+ hosts:
+ description: The destination hosts to which traffic is being sent.
+ items:
+ type: string
+ type: array
+ http:
+ description: An ordered list of route rules for HTTP traffic.
+ items:
+ properties:
+ corsPolicy:
+ description: Cross-Origin Resource Sharing policy (CORS).
+ properties:
+ allowCredentials:
+ nullable: true
+ type: boolean
+ allowHeaders:
+ items:
+ type: string
+ type: array
+ allowMethods:
+ description: List of HTTP methods allowed to access the
+ resource.
+ items:
+ type: string
+ type: array
+ allowOrigin:
+ description: The list of origins that are allowed to perform
+ CORS requests.
+ items:
+ type: string
+ type: array
+ allowOrigins:
+ description: String patterns that match allowed origins.
+ items:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ type: array
+ exposeHeaders:
+ items:
+ type: string
+ type: array
+ maxAge:
+ type: string
+ type: object
+ delegate:
+ properties:
+ name:
+ description: Name specifies the name of the delegate VirtualService.
+ type: string
+ namespace:
+ description: Namespace specifies the namespace where the
+ delegate VirtualService resides.
+ type: string
+ type: object
+ directResponse:
+ description: A HTTP rule can either return a direct_response,
+ redirect or forward (default) traffic.
+ properties:
+ body:
+ description: Specifies the content of the response body.
+ oneOf:
+ - not:
+ anyOf:
+ - required:
+ - string
+ - required:
+ - bytes
+ - required:
+ - string
+ - required:
+ - bytes
+ properties:
+ bytes:
+ description: response body as base64 encoded bytes.
+ format: binary
+ type: string
+ string:
+ type: string
+ type: object
+ status:
+ description: Specifies the HTTP response status to be returned.
+ type: integer
+ type: object
+ fault:
+ description: Fault injection policy to apply on HTTP traffic
+ at the client side.
+ properties:
+ abort:
+ oneOf:
+ - not:
+ anyOf:
+ - required:
+ - httpStatus
+ - required:
+ - grpcStatus
+ - required:
+ - http2Error
+ - required:
+ - httpStatus
+ - required:
+ - grpcStatus
+ - required:
+ - http2Error
+ properties:
+ grpcStatus:
+ description: GRPC status code to use to abort the request.
+ type: string
+ http2Error:
+ type: string
+ httpStatus:
+ description: HTTP status code to use to abort the Http
+ request.
+ format: int32
+ type: integer
+ percentage:
+ description: Percentage of requests to be aborted with
+ the error code provided.
+ properties:
+ value:
+ format: double
+ type: number
+ type: object
+ type: object
+ delay:
+ oneOf:
+ - not:
+ anyOf:
+ - required:
+ - fixedDelay
+ - required:
+ - exponentialDelay
+ - required:
+ - fixedDelay
+ - required:
+ - exponentialDelay
+ properties:
+ exponentialDelay:
+ type: string
+ fixedDelay:
+ description: Add a fixed delay before forwarding the
+ request.
+ type: string
+ percent:
+ description: Percentage of requests on which the delay
+ will be injected (0-100).
+ format: int32
+ type: integer
+ percentage:
+ description: Percentage of requests on which the delay
+ will be injected.
+ properties:
+ value:
+ format: double
+ type: number
+ type: object
+ type: object
+ type: object
+ headers:
+ properties:
+ request:
+ properties:
+ add:
+ additionalProperties:
+ type: string
+ type: object
+ remove:
+ items:
+ type: string
+ type: array
+ set:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ response:
+ properties:
+ add:
+ additionalProperties:
+ type: string
+ type: object
+ remove:
+ items:
+ type: string
+ type: array
+ set:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ type: object
+ match:
+ items:
+ properties:
+ authority:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ gateways:
+ description: Names of gateways where the rule should be
+ applied.
+ items:
+ type: string
+ type: array
+ headers:
+ additionalProperties:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ type: object
+ ignoreUriCase:
+ description: Flag to specify whether the URI matching
+ should be case-insensitive.
+ type: boolean
+ method:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ name:
+ description: The name assigned to a match.
+ type: string
+ port:
+ description: Specifies the ports on the host that is being
+ addressed.
+ type: integer
+ queryParams:
+ additionalProperties:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ description: Query parameters for matching.
+ type: object
+ scheme:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ sourceLabels:
+ additionalProperties:
+ type: string
+ type: object
+ sourceNamespace:
+ description: Source namespace constraining the applicability
+ of a rule to workloads in that namespace.
+ type: string
+ statPrefix:
+ description: The human readable prefix to use when emitting
+ statistics for this route.
+ type: string
+ uri:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ withoutHeaders:
+ additionalProperties:
+ properties:
+ exact:
+ type: string
+ prefix:
+ type: string
+ regex:
+ description: RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ type: string
+ type: object
+ description: withoutHeader has the same syntax with the
+ header, but has opposite meaning.
+ type: object
+ type: object
+ type: array
+ mirror:
+ properties:
+ fallback:
+ properties:
+ host:
+ type: string
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ host:
+ description: The name of a service from the service registry.
+ type: string
+ port:
+ description: Specifies the port on the host that is being
+ addressed.
+ properties:
+ number:
+ type: integer
+ type: object
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ mirror_percent:
+ description: Percentage of the traffic to be mirrored by the
+ `mirror` field.
+ nullable: true
+ type: integer
+ mirrorPercent:
+ description: Percentage of the traffic to be mirrored by the
+ `mirror` field.
+ nullable: true
+ type: integer
+ mirrorPercentage:
+ description: Percentage of the traffic to be mirrored by the
+ `mirror` field.
+ properties:
+ value:
+ format: double
+ type: number
+ type: object
+ name:
+ description: The name assigned to the route for debugging purposes.
+ type: string
+ redirect:
+ description: A HTTP rule can either return a direct_response,
+ redirect or forward (default) traffic.
+ oneOf:
+ - not:
+ anyOf:
+ - required:
+ - port
+ - required:
+ - derivePort
+ - required:
+ - port
+ - required:
+ - derivePort
+ properties:
+ authority:
+ type: string
+ derivePort:
+ enum:
+ - FROM_PROTOCOL_DEFAULT
+ - FROM_REQUEST_PORT
+ type: string
+ port:
+ description: On a redirect, overwrite the port portion of
+ the URL with this value.
+ type: integer
+ redirectCode:
+ type: integer
+ scheme:
+ description: On a redirect, overwrite the scheme portion
+ of the URL with this value.
+ type: string
+ uri:
+ type: string
+ type: object
+ retries:
+ description: Retry policy for HTTP requests.
+ properties:
+ attempts:
+ description: Number of retries to be allowed for a given
+ request.
+ format: int32
+ type: integer
+ perTryTimeout:
+ description: Timeout per attempt for a given request, including
+ the initial call and any retries.
+ type: string
+ retryOn:
+ description: Specifies the conditions under which retry
+ takes place.
+ type: string
+ retryRemoteLocalities:
+ description: Flag to specify whether the retries should
+ retry to other localities.
+ nullable: true
+ type: boolean
+ type: object
+ rewrite:
+ description: Rewrite HTTP URIs and Authority headers.
+ properties:
+ authority:
+ description: rewrite the Authority/Host header with this
+ value.
+ type: string
+ uri:
+ type: string
+ type: object
+ route:
+ description: A HTTP rule can either return a direct_response,
+ redirect or forward (default) traffic.
+ items:
+ properties:
+ destination:
+ properties:
+ fallback:
+ properties:
+ host:
+ type: string
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ host:
+ description: The name of a service from the service
+ registry.
+ type: string
+ port:
+ description: Specifies the port on the host that is
+ being addressed.
+ properties:
+ number:
+ type: integer
+ type: object
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ headers:
+ properties:
+ request:
+ properties:
+ add:
+ additionalProperties:
+ type: string
+ type: object
+ remove:
+ items:
+ type: string
+ type: array
+ set:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ response:
+ properties:
+ add:
+ additionalProperties:
+ type: string
+ type: object
+ remove:
+ items:
+ type: string
+ type: array
+ set:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ type: object
+ weight:
+ description: Weight specifies the relative proportion
+ of traffic to be forwarded to the destination.
+ format: int32
+ type: integer
+ type: object
+ type: array
+ timeout:
+ description: Timeout for HTTP requests, default is disabled.
+ type: string
+ type: object
+ type: array
+ tcp:
+ description: An ordered list of route rules for opaque TCP traffic.
+ items:
+ properties:
+ match:
+ items:
+ properties:
+ destinationSubnets:
+ description: IPv4 or IPv6 ip addresses of destination
+ with optional subnet.
+ items:
+ type: string
+ type: array
+ gateways:
+ description: Names of gateways where the rule should be
+ applied.
+ items:
+ type: string
+ type: array
+ port:
+ description: Specifies the port on the host that is being
+ addressed.
+ type: integer
+ sourceLabels:
+ additionalProperties:
+ type: string
+ type: object
+ sourceNamespace:
+ description: Source namespace constraining the applicability
+ of a rule to workloads in that namespace.
+ type: string
+ sourceSubnet:
+ description: IPv4 or IPv6 ip address of source with optional
+ subnet.
+ type: string
+ type: object
+ type: array
+ route:
+ description: The destination to which the connection should
+ be forwarded to.
+ items:
+ properties:
+ destination:
+ properties:
+ fallback:
+ properties:
+ host:
+ type: string
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ host:
+ description: The name of a service from the service
+ registry.
+ type: string
+ port:
+ description: Specifies the port on the host that is
+ being addressed.
+ properties:
+ number:
+ type: integer
+ type: object
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ weight:
+ description: Weight specifies the relative proportion
+ of traffic to be forwarded to the destination.
+ format: int32
+ type: integer
+ type: object
+ type: array
+ type: object
+ type: array
+ tls:
+ items:
+ properties:
+ match:
+ items:
+ properties:
+ destinationSubnets:
+ description: IPv4 or IPv6 ip addresses of destination
+ with optional subnet.
+ items:
+ type: string
+ type: array
+ gateways:
+ description: Names of gateways where the rule should be
+ applied.
+ items:
+ type: string
+ type: array
+ port:
+ description: Specifies the port on the host that is being
+ addressed.
+ type: integer
+ sniHosts:
+ description: SNI (server name indicator) to match on.
+ items:
+ type: string
+ type: array
+ sourceLabels:
+ additionalProperties:
+ type: string
+ type: object
+ sourceNamespace:
+ description: Source namespace constraining the applicability
+ of a rule to workloads in that namespace.
+ type: string
+ type: object
+ type: array
+ route:
+ description: The destination to which the connection should
+ be forwarded to.
+ items:
+ properties:
+ destination:
+ properties:
+ fallback:
+ properties:
+ host:
+ type: string
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ host:
+ description: The name of a service from the service
+ registry.
+ type: string
+ port:
+ description: Specifies the port on the host that is
+ being addressed.
+ properties:
+ number:
+ type: integer
+ type: object
+ subset:
+ description: The name of a subset within the service.
+ type: string
+ type: object
+ weight:
+ description: Weight specifies the relative proportion
+ of traffic to be forwarded to the destination.
+ format: int32
+ type: integer
+ type: object
+ type: array
+ type: object
+ type: array
+ type: object
+ status:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+
+---
diff --git a/config/samples/opensergo_traffic_router_samples.yaml b/config/samples/opensergo_traffic_router_samples.yaml
new file mode 100644
index 0000000..7732644
--- /dev/null
+++ b/config/samples/opensergo_traffic_router_samples.yaml
@@ -0,0 +1,26 @@
+apiVersion: traffic.opensergo.io/v1alpha1
+kind: TrafficRouter
+metadata:
+ name: service-provider
+ namespace: default
+ labels:
+ app: service-provider
+spec:
+ hosts:
+ - service-provider
+ http:
+ - match:
+ - headers:
+ x-mse-tag:
+ exact: v2
+ route:
+ - destination:
+ host: service-provider
+ subset: v2
+ fallback:
+ host: service-provider
+ subset: v1
+ - route:
+ - destination:
+ host: service-provider
+ subset: v1
diff --git a/control_plane.go b/control_plane.go
index c0febf0..8e0686e 100644
--- a/control_plane.go
+++ b/control_plane.go
@@ -136,7 +136,7 @@ func (c *ControlPlane) handleSubscribeRequest(clientIdentifier model.ClientIdent
continue
}
_ = c.server.ConnectionManager().Add(request.Target.Namespace, request.Target.App, kind, transport.NewConnection(clientIdentifier, stream))
- // watcher缓存不空就发送
+ // send if the watcher cache is not empty
rules, version := crdWatcher.GetRules(model.NamespacedApp{
Namespace: request.Target.Namespace,
App: request.Target.App,
diff --git a/go.mod b/go.mod
index 8d430a9..61ecf71 100644
--- a/go.mod
+++ b/go.mod
@@ -4,18 +4,19 @@ go 1.14
require (
github.com/alibaba/sentinel-golang v1.0.3
- github.com/envoyproxy/protoc-gen-validate v0.1.0
+ github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc
+ github.com/envoyproxy/go-control-plane v0.10.3-0.20221109183938-2935a23e638f
+ github.com/envoyproxy/protoc-gen-validate v0.6.7
github.com/go-logr/logr v0.4.0
+ github.com/golang/protobuf v1.5.2
github.com/json-iterator/go v1.1.12 // indirect
github.com/kr/pretty v0.3.0 // indirect
github.com/pkg/errors v0.9.1
github.com/rogpeppe/go-internal v1.8.0 // indirect
- github.com/stretchr/testify v1.7.1 // indirect
go.uber.org/atomic v1.7.0
- golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect
- google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 // indirect
- google.golang.org/grpc v1.40.0
- google.golang.org/protobuf v1.28.0
+ google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7
+ google.golang.org/grpc v1.51.0
+ google.golang.org/protobuf v1.28.1
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
k8s.io/apimachinery v0.21.4
k8s.io/client-go v0.21.4
diff --git a/go.sum b/go.sum
index c7d8905..736c4bc 100644
--- a/go.sum
+++ b/go.sum
@@ -8,20 +8,30 @@ cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
-cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
+cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8=
+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
@@ -74,6 +84,7 @@ github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnweb
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
@@ -85,7 +96,14 @@ github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc h1:PYXxkRUBGUMa5xgMVMDl62vEklZvKpVaxQeN9ie7Hfk=
+github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
@@ -123,8 +141,13 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
-github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
+github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
+github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
+github.com/envoyproxy/go-control-plane v0.10.3-0.20221109183938-2935a23e638f h1:WM6jD/5NGnwG5ZiZIZtYldAt0j+Q7xOvEEEMQtbuk5M=
+github.com/envoyproxy/go-control-plane v0.10.3-0.20221109183938-2935a23e638f/go.mod h1:ufpOdMVWU+v42FYQiIBUhSWglFcK3S1Ml8bbzLwkdcE=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/envoyproxy/protoc-gen-validate v0.6.7 h1:qcZcULcd/abmQg6dwigimCNEyi4gg31M/xaciQlDml8=
+github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo=
github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.11.0+incompatible h1:glyUF9yIYtMHzn8xaKw5rMhdWcwsYV8dZHIq5567/xs=
@@ -172,6 +195,7 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -183,11 +207,14 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
@@ -206,19 +233,26 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -242,6 +276,7 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
@@ -269,6 +304,7 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
+github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
@@ -296,6 +332,7 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -309,6 +346,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
+github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -396,6 +434,7 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
+github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
@@ -414,8 +453,9 @@ github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
+github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
@@ -459,6 +499,8 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
+github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
@@ -492,8 +534,12 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
@@ -505,7 +551,9 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
@@ -531,10 +579,12 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -556,8 +606,9 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
@@ -566,8 +617,11 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ=
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -585,6 +639,7 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -595,29 +650,41 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
-golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI=
-golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
+golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -653,8 +720,14 @@ golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -668,12 +741,17 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 h1:c8PlLMqBbOHoqtjteWm5/kbe6rNY2pbRfbIMVnepueo=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -681,8 +759,10 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
+golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -729,13 +809,25 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
+golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -753,13 +845,20 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -780,13 +879,24 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA=
-google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7 h1:HOL66YCI20JvN2hVk6o2YIp9i/3RvzVUz82PqNr7fXw=
+google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
@@ -800,10 +910,17 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
+google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
+google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
+google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
+google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -819,6 +936,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -862,6 +981,7 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.21.4 h1:WtDkzTAuI31WZKDPeIYpEUA+WeUfXAmA7gwj6nzFfbc=
k8s.io/api v0.21.4/go.mod h1:fTVGP+M4D8+00FN2cMnJqk/eb/GH53bvmNs2SVTmpFk=
k8s.io/apiextensions-apiserver v0.21.4 h1:HkajN/vmT/9HnFmUxvpXfSGkTCvH/ax4e3+j6mqWUDU=
diff --git a/pkg/api/v1alpha1/traffic/groupversion_info.go b/pkg/api/v1alpha1/traffic/groupversion_info.go
new file mode 100644
index 0000000..466e945
--- /dev/null
+++ b/pkg/api/v1alpha1/traffic/groupversion_info.go
@@ -0,0 +1,35 @@
+// Copyright 2022, OpenSergo Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Package v1alpha1 contains API Schema definitions for the OpenSergo traffic-router v1alpha1 CRD.
+// +kubebuilder:object:generate=true
+// +groupName=traffic.opensergo.io
+// +versionName=v1alpha1
+package traffic
+
+import (
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "sigs.k8s.io/controller-runtime/pkg/scheme"
+)
+
+var (
+ // GroupVersion is group version used to register these objects
+ GroupVersion = schema.GroupVersion{Group: "traffic.opensergo.io", Version: "v1alpha1"}
+
+ // SchemeBuilder is used to add go types to the GroupVersionKind scheme
+ SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
+
+ // AddToScheme adds the types in this group-version to the given scheme.
+ AddToScheme = SchemeBuilder.AddToScheme
+)
diff --git a/pkg/api/v1alpha1/traffic/traffic_router.go b/pkg/api/v1alpha1/traffic/traffic_router.go
new file mode 100644
index 0000000..467e167
--- /dev/null
+++ b/pkg/api/v1alpha1/traffic/traffic_router.go
@@ -0,0 +1,47 @@
+// Copyright 2022, OpenSergo Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package traffic
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// +kubebuilder:object:root=true
+type TrafficRouter struct {
+ metav1.TypeMeta `json:",inline"`
+ metav1.ObjectMeta `json:"metadata,omitempty"`
+
+ Spec TrafficRouterSpec `json:"spec,omitempty"`
+
+ Status TrafficRouterStatus `json:"status,omitempty"`
+}
+
+// HttpRequestMatchRuleList contains a list of HttpRequestMatchRule.
+// +kubebuilder:object:root=true
+type TrafficRouterList struct {
+ metav1.TypeMeta `json:",inline"`
+ metav1.ListMeta `json:"metadata,omitempty"`
+ Items []TrafficRouter `json:"items"`
+}
+
+// HttpRequestMatchRuleStatus defines the observed state of HttpRequestMatchRule.
+type TrafficRouterStatus struct {
+ // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
+ // Important: Run "make" to regenerate code after modifying this file
+}
+
+func init() {
+ SchemeBuilder.Register(&TrafficRouter{}, &TrafficRouterList{})
+}
diff --git a/pkg/api/v1alpha1/traffic/traffic_router.pb.go b/pkg/api/v1alpha1/traffic/traffic_router.pb.go
new file mode 100644
index 0000000..83af546
--- /dev/null
+++ b/pkg/api/v1alpha1/traffic/traffic_router.pb.go
@@ -0,0 +1,4751 @@
+// Copyright 2020 Istio Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.28.1
+// protoc v3.19.4
+// source: traffic/v1alpha1/traffic_router.proto
+
+// $schema: opensergo.traffic.v1alpha1.VirtualService
+// $title: Virtual Service
+// $description: Configuration affecting label/content routing, sni routing, etc.
+// $location: https://istio.io/docs/reference/config/networking/virtual-service.html
+// $aliases: [/docs/reference/config/networking/v1beta1/virtual-service]
+// $mode: none
+
+// Configuration affecting traffic routing. Here are a few terms useful to define
+// in the context of traffic routing.
+//
+// `Service` a unit of application behavior bound to a unique name in a
+// service registry. Services consist of multiple network *endpoints*
+// implemented by workload instances running on pods, containers, VMs etc.
+//
+// `Service versions (a.k.a. subsets)` - In a continuous deployment
+// scenario, for a given service, there can be distinct subsets of
+// instances running different variants of the application binary. These
+// variants are not necessarily different API versions. They could be
+// iterative changes to the same service, deployed in different
+// environments (prod, staging, dev, etc.). Common scenarios where this
+// occurs include A/B testing, canary rollouts, etc. The choice of a
+// particular version can be decided based on various criterion (headers,
+// url, etc.) and/or by weights assigned to each version. Each service has
+// a default version consisting of all its instances.
+//
+// `Source` - A downstream client calling a service.
+//
+// `Host` - The address used by a client when attempting to connect to a
+// service.
+//
+// `Access model` - Applications address only the destination service
+// (Host) without knowledge of individual service versions (subsets). The
+// actual choice of the version is determined by the proxy/sidecar, enabling the
+// application code to decouple itself from the evolution of dependent
+// services.
+//
+// A `VirtualService` defines a set of traffic routing rules to apply when a host is
+// addressed. Each routing rule defines matching criteria for traffic of a specific
+// protocol. If the traffic is matched, then it is sent to a named destination service
+// (or subset/version of it) defined in the registry.
+//
+// The source of traffic can also be matched in a routing rule. This allows routing
+// to be customized for specific client contexts.
+//
+// The following example on Kubernetes, routes all HTTP traffic by default to
+// pods of the reviews service with label "version: v1". In addition,
+// HTTP requests with path starting with /wpcatalog/ or /consumercatalog/ will
+// be rewritten to /newcatalog and sent to pods with label "version: v2".
+//
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - name: "reviews-v2-routes"
+// match:
+// - uri:
+// prefix: "/wpcatalog"
+// - uri:
+// prefix: "/consumercatalog"
+// rewrite:
+// uri: "/newcatalog"
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v2
+// - name: "reviews-v1-route"
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - name: "reviews-v2-routes"
+// match:
+// - uri:
+// prefix: "/wpcatalog"
+// - uri:
+// prefix: "/consumercatalog"
+// rewrite:
+// uri: "/newcatalog"
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v2
+// - name: "reviews-v1-route"
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// ```
+// {{}}
+// {{}}
+//
+// A subset/version of a route destination is identified with a reference
+// to a named service subset which must be declared in a corresponding
+// `DestinationRule`.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: DestinationRule
+// metadata:
+// name: reviews-destination
+// spec:
+// host: reviews.prod.svc.cluster.local
+// subsets:
+// - name: v1
+// labels:
+// version: v1
+// - name: v2
+// labels:
+// version: v2
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: DestinationRule
+// metadata:
+// name: reviews-destination
+// spec:
+// host: reviews.prod.svc.cluster.local
+// subsets:
+// - name: v1
+// labels:
+// version: v1
+// - name: v2
+// labels:
+// version: v2
+// ```
+// {{}}
+// {{}}
+//
+
+package traffic
+
+import (
+ duration "github.com/golang/protobuf/ptypes/duration"
+ wrappers "github.com/golang/protobuf/ptypes/wrappers"
+ _ "google.golang.org/genproto/googleapis/api/annotations"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type HTTPRedirect_RedirectPortSelection int32
+
+const (
+ HTTPRedirect_FROM_PROTOCOL_DEFAULT HTTPRedirect_RedirectPortSelection = 0
+ HTTPRedirect_FROM_REQUEST_PORT HTTPRedirect_RedirectPortSelection = 1
+)
+
+// Enum value maps for HTTPRedirect_RedirectPortSelection.
+var (
+ HTTPRedirect_RedirectPortSelection_name = map[int32]string{
+ 0: "FROM_PROTOCOL_DEFAULT",
+ 1: "FROM_REQUEST_PORT",
+ }
+ HTTPRedirect_RedirectPortSelection_value = map[string]int32{
+ "FROM_PROTOCOL_DEFAULT": 0,
+ "FROM_REQUEST_PORT": 1,
+ }
+)
+
+func (x HTTPRedirect_RedirectPortSelection) Enum() *HTTPRedirect_RedirectPortSelection {
+ p := new(HTTPRedirect_RedirectPortSelection)
+ *p = x
+ return p
+}
+
+func (x HTTPRedirect_RedirectPortSelection) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (HTTPRedirect_RedirectPortSelection) Descriptor() protoreflect.EnumDescriptor {
+ return file_traffic_v1alpha1_traffic_router_proto_enumTypes[0].Descriptor()
+}
+
+func (HTTPRedirect_RedirectPortSelection) Type() protoreflect.EnumType {
+ return &file_traffic_v1alpha1_traffic_router_proto_enumTypes[0]
+}
+
+func (x HTTPRedirect_RedirectPortSelection) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use HTTPRedirect_RedirectPortSelection.Descriptor instead.
+func (HTTPRedirect_RedirectPortSelection) EnumDescriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{13, 0}
+}
+
+// Configuration affecting traffic routing.
+//
+//
+//
+//
+//
+type TrafficRouterSpec struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The destination hosts to which traffic is being sent. Could
+ // be a DNS name with wildcard prefix or an IP address. Depending on the
+ // platform, short-names can also be used instead of a FQDN (i.e. has no
+ // dots in the name). In such a scenario, the FQDN of the host would be
+ // derived based on the underlying platform.
+ //
+ // A single VirtualService can be used to describe all the traffic
+ // properties of the corresponding hosts, including those for multiple
+ // HTTP and TCP ports. Alternatively, the traffic properties of a host
+ // can be defined using more than one VirtualService, with certain
+ // caveats. Refer to the
+ // [Operations Guide](https://istio.io/docs/ops/best-practices/traffic-management/#split-virtual-services)
+ // for details.
+ //
+ // *Note for Kubernetes users*: When short names are used (e.g. "reviews"
+ // instead of "reviews.default.svc.cluster.local"), Istio will interpret
+ // the short name based on the namespace of the rule, not the service. A
+ // rule in the "default" namespace containing a host "reviews" will be
+ // interpreted as "reviews.default.svc.cluster.local", irrespective of
+ // the actual namespace associated with the reviews service. _To avoid
+ // potential misconfigurations, it is recommended to always use fully
+ // qualified domain names over short names._
+ //
+ // The hosts field applies to both HTTP and TCP services. Service inside
+ // the mesh, i.e., those found in the service registry, must always be
+ // referred to using their alphanumeric names. IP addresses are allowed
+ // only for services defined via the Gateway.
+ //
+ // *Note*: It must be empty for a delegate VirtualService.
+ Hosts []string `protobuf:"bytes,1,rep,name=hosts,proto3" json:"hosts,omitempty"`
+ // The names of gateways and sidecars that should apply these routes.
+ // Gateways in other namespaces may be referred to by
+ // `/`; specifying a gateway with no
+ // namespace qualifier is the same as specifying the VirtualService's
+ // namespace. A single VirtualService is used for sidecars inside the mesh as
+ // well as for one or more gateways. The selection condition imposed by this
+ // field can be overridden using the source field in the match conditions
+ // of protocol-specific routes. The reserved word `mesh` is used to imply
+ // all the sidecars in the mesh. When this field is omitted, the default
+ // gateway (`mesh`) will be used, which would apply the rule to all
+ // sidecars in the mesh. If a list of gateway names is provided, the
+ // rules will apply only to the gateways. To apply the rules to both
+ // gateways and sidecars, specify `mesh` as one of the gateway names.
+ Gateways []string `protobuf:"bytes,2,rep,name=gateways,proto3" json:"gateways,omitempty"`
+ // An ordered list of route rules for HTTP traffic. HTTP routes will be
+ // applied to platform service ports named 'http-*'/'http2-*'/'grpc-*', gateway
+ // ports with protocol HTTP/HTTP2/GRPC/ TLS-terminated-HTTPS and service
+ // entry ports using HTTP/HTTP2/GRPC protocols. The first rule matching
+ // an incoming request is used.
+ Http []*HTTPRoute `protobuf:"bytes,3,rep,name=http,proto3" json:"http,omitempty"`
+ // An ordered list of route rule for non-terminated TLS & HTTPS
+ // traffic. Routing is typically performed using the SNI value presented
+ // by the ClientHello message. TLS routes will be applied to platform
+ // service ports named 'https-*', 'tls-*', unterminated gateway ports using
+ // HTTPS/TLS protocols (i.e. with "passthrough" TLS mode) and service
+ // entry ports using HTTPS/TLS protocols. The first rule matching an
+ // incoming request is used. NOTE: Traffic 'https-*' or 'tls-*' ports
+ // without associated virtual service will be treated as opaque TCP
+ // traffic.
+ Tls []*TLSRoute `protobuf:"bytes,5,rep,name=tls,proto3" json:"tls,omitempty"`
+ // An ordered list of route rules for opaque TCP traffic. TCP routes will
+ // be applied to any port that is not a HTTP or TLS port. The first rule
+ // matching an incoming request is used.
+ Tcp []*TCPRoute `protobuf:"bytes,4,rep,name=tcp,proto3" json:"tcp,omitempty"`
+ // A list of namespaces to which this virtual service is exported. Exporting a
+ // virtual service allows it to be used by sidecars and gateways defined in
+ // other namespaces. This feature provides a mechanism for service owners
+ // and mesh administrators to control the visibility of virtual services
+ // across namespace boundaries.
+ //
+ // If no namespaces are specified then the virtual service is exported to all
+ // namespaces by default.
+ //
+ // The value "." is reserved and defines an export to the same namespace that
+ // the virtual service is declared in. Similarly the value "*" is reserved and
+ // defines an export to all namespaces.
+ ExportTo []string `protobuf:"bytes,6,rep,name=export_to,json=exportTo,proto3" json:"export_to,omitempty"`
+}
+
+func (x *TrafficRouterSpec) Reset() {
+ *x = TrafficRouterSpec{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TrafficRouterSpec) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TrafficRouterSpec) ProtoMessage() {}
+
+func (x *TrafficRouterSpec) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TrafficRouterSpec.ProtoReflect.Descriptor instead.
+func (*TrafficRouterSpec) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *TrafficRouterSpec) GetHosts() []string {
+ if x != nil {
+ return x.Hosts
+ }
+ return nil
+}
+
+func (x *TrafficRouterSpec) GetGateways() []string {
+ if x != nil {
+ return x.Gateways
+ }
+ return nil
+}
+
+func (x *TrafficRouterSpec) GetHttp() []*HTTPRoute {
+ if x != nil {
+ return x.Http
+ }
+ return nil
+}
+
+func (x *TrafficRouterSpec) GetTls() []*TLSRoute {
+ if x != nil {
+ return x.Tls
+ }
+ return nil
+}
+
+func (x *TrafficRouterSpec) GetTcp() []*TCPRoute {
+ if x != nil {
+ return x.Tcp
+ }
+ return nil
+}
+
+func (x *TrafficRouterSpec) GetExportTo() []string {
+ if x != nil {
+ return x.ExportTo
+ }
+ return nil
+}
+
+// Destination indicates the network addressable service to which the
+// request/connection will be sent after processing a routing rule. The
+// destination.host should unambiguously refer to a service in the service
+// registry. Istio's service registry is composed of all the services found
+// in the platform's service registry (e.g., Kubernetes services, Consul
+// services), as well as services declared through the
+// [ServiceEntry](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry) resource.
+//
+// *Note for Kubernetes users*: When short names are used (e.g. "reviews"
+// instead of "reviews.default.svc.cluster.local"), Istio will interpret
+// the short name based on the namespace of the rule, not the service. A
+// rule in the "default" namespace containing a host "reviews will be
+// interpreted as "reviews.default.svc.cluster.local", irrespective of the
+// actual namespace associated with the reviews service. _To avoid potential
+// misconfigurations, it is recommended to always use fully qualified
+// domain names over short names._
+//
+// The following Kubernetes example routes all traffic by default to pods
+// of the reviews service with label "version: v1" (i.e., subset v1), and
+// some to subset v2, in a Kubernetes environment.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// namespace: foo
+// spec:
+// hosts:
+// - reviews # interpreted as reviews.foo.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// prefix: "/wpcatalog"
+// - uri:
+// prefix: "/consumercatalog"
+// rewrite:
+// uri: "/newcatalog"
+// route:
+// - destination:
+// host: reviews # interpreted as reviews.foo.svc.cluster.local
+// subset: v2
+// - route:
+// - destination:
+// host: reviews # interpreted as reviews.foo.svc.cluster.local
+// subset: v1
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// namespace: foo
+// spec:
+// hosts:
+// - reviews # interpreted as reviews.foo.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// prefix: "/wpcatalog"
+// - uri:
+// prefix: "/consumercatalog"
+// rewrite:
+// uri: "/newcatalog"
+// route:
+// - destination:
+// host: reviews # interpreted as reviews.foo.svc.cluster.local
+// subset: v2
+// - route:
+// - destination:
+// host: reviews # interpreted as reviews.foo.svc.cluster.local
+// subset: v1
+// ```
+// {{}}
+// {{}}
+//
+// And the associated DestinationRule
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: DestinationRule
+// metadata:
+// name: reviews-destination
+// namespace: foo
+// spec:
+// host: reviews # interpreted as reviews.foo.svc.cluster.local
+// subsets:
+// - name: v1
+// labels:
+// version: v1
+// - name: v2
+// labels:
+// version: v2
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: DestinationRule
+// metadata:
+// name: reviews-destination
+// namespace: foo
+// spec:
+// host: reviews # interpreted as reviews.foo.svc.cluster.local
+// subsets:
+// - name: v1
+// labels:
+// version: v1
+// - name: v2
+// labels:
+// version: v2
+// ```
+// {{}}
+// {{}}
+//
+// The following VirtualService sets a timeout of 5s for all calls to
+// productpage.prod.svc.cluster.local service in Kubernetes. Notice that
+// there are no subsets defined in this rule. Istio will fetch all
+// instances of productpage.prod.svc.cluster.local service from the service
+// registry and populate the sidecar's load balancing pool. Also, notice
+// that this rule is set in the istio-system namespace but uses the fully
+// qualified domain name of the productpage service,
+// productpage.prod.svc.cluster.local. Therefore the rule's namespace does
+// not have an impact in resolving the name of the productpage service.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: my-productpage-rule
+// namespace: istio-system
+// spec:
+// hosts:
+// - productpage.prod.svc.cluster.local # ignores rule namespace
+// http:
+// - timeout: 5s
+// route:
+// - destination:
+// host: productpage.prod.svc.cluster.local
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: my-productpage-rule
+// namespace: istio-system
+// spec:
+// hosts:
+// - productpage.prod.svc.cluster.local # ignores rule namespace
+// http:
+// - timeout: 5s
+// route:
+// - destination:
+// host: productpage.prod.svc.cluster.local
+// ```
+// {{}}
+// {{}}
+//
+// To control routing for traffic bound to services outside the mesh, external
+// services must first be added to Istio's internal service registry using the
+// ServiceEntry resource. VirtualServices can then be defined to control traffic
+// bound to these external services. For example, the following rules define a
+// Service for wikipedia.org and set a timeout of 5s for HTTP requests.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: ServiceEntry
+// metadata:
+// name: external-svc-wikipedia
+// spec:
+// hosts:
+// - wikipedia.org
+// location: MESH_EXTERNAL
+// ports:
+// - number: 80
+// name: example-http
+// protocol: HTTP
+// resolution: DNS
+// ---
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: my-wiki-rule
+// spec:
+// hosts:
+// - wikipedia.org
+// http:
+// - timeout: 5s
+// route:
+// - destination:
+// host: wikipedia.org
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: ServiceEntry
+// metadata:
+// name: external-svc-wikipedia
+// spec:
+// hosts:
+// - wikipedia.org
+// location: MESH_EXTERNAL
+// ports:
+// - number: 80
+// name: example-http
+// protocol: HTTP
+// resolution: DNS
+// ---
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: my-wiki-rule
+// spec:
+// hosts:
+// - wikipedia.org
+// http:
+// - timeout: 5s
+// route:
+// - destination:
+// host: wikipedia.org
+// ```
+// {{}}
+// {{}}
+//
+type Destination struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name of a service from the service registry. Service
+ // names are looked up from the platform's service registry (e.g.,
+ // Kubernetes services, Consul services, etc.) and from the hosts
+ // declared by [ServiceEntry](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry). Traffic forwarded to
+ // destinations that are not found in either of the two, will be dropped.
+ //
+ // *Note for Kubernetes users*: When short names are used (e.g. "reviews"
+ // instead of "reviews.default.svc.cluster.local"), Istio will interpret
+ // the short name based on the namespace of the rule, not the service. A
+ // rule in the "default" namespace containing a host "reviews will be
+ // interpreted as "reviews.default.svc.cluster.local", irrespective of
+ // the actual namespace associated with the reviews service. To avoid
+ // potential misconfiguration, it is recommended to always use fully
+ // qualified domain names over short names.
+ Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
+ // The name of a subset within the service. Applicable only to services
+ // within the mesh. The subset must be defined in a corresponding
+ // DestinationRule.
+ Subset string `protobuf:"bytes,2,opt,name=subset,proto3" json:"subset,omitempty"`
+ // Specifies the port on the host that is being addressed. If a service
+ // exposes only a single port it is not required to explicitly select the
+ // port.
+ Port *PortSelector `protobuf:"bytes,3,opt,name=port,proto3" json:"port,omitempty"`
+ Fallback *Fallback `protobuf:"bytes,4,opt,name=fallback,proto3" json:"fallback,omitempty"`
+}
+
+func (x *Destination) Reset() {
+ *x = Destination{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Destination) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Destination) ProtoMessage() {}
+
+func (x *Destination) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Destination.ProtoReflect.Descriptor instead.
+func (*Destination) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Destination) GetHost() string {
+ if x != nil {
+ return x.Host
+ }
+ return ""
+}
+
+func (x *Destination) GetSubset() string {
+ if x != nil {
+ return x.Subset
+ }
+ return ""
+}
+
+func (x *Destination) GetPort() *PortSelector {
+ if x != nil {
+ return x.Port
+ }
+ return nil
+}
+
+func (x *Destination) GetFallback() *Fallback {
+ if x != nil {
+ return x.Fallback
+ }
+ return nil
+}
+
+// Describes match conditions and actions for routing HTTP/1.1, HTTP2, and
+// gRPC traffic. See VirtualService for usage examples.
+type HTTPRoute struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name assigned to the route for debugging purposes. The
+ // route's name will be concatenated with the match's name and will
+ // be logged in the access logs for requests matching this
+ // route/match.
+ Name string `protobuf:"bytes,17,opt,name=name,proto3" json:"name,omitempty"`
+ // Match conditions to be satisfied for the rule to be
+ // activated. All conditions inside a single match block have AND
+ // semantics, while the list of match blocks have OR semantics. The rule
+ // is matched if any one of the match blocks succeed.
+ Match []*HTTPMatchRequest `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"`
+ // A HTTP rule can either return a direct_response, redirect or forward (default) traffic.
+ // The forwarding target can be one of several versions of a service (see
+ // glossary in beginning of document). Weights associated with the
+ // service version determine the proportion of traffic it receives.
+ Route []*HTTPRouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"`
+ // A HTTP rule can either return a direct_response, redirect or forward (default) traffic.
+ // If traffic passthrough option is specified in the rule,
+ // route/redirect will be ignored. The redirect primitive can be used to
+ // send a HTTP 301 redirect to a different URI or Authority.
+ Redirect *HTTPRedirect `protobuf:"bytes,3,opt,name=redirect,proto3" json:"redirect,omitempty"`
+ // A HTTP rule can either return a direct_response, redirect or forward (default) traffic.
+ // Direct Response is used to specify a fixed response that should
+ // be sent to clients.
+ //
+ // It can be set only when `Route` and `Redirect` are empty.
+ DirectResponse *HTTPDirectResponse `protobuf:"bytes,21,opt,name=direct_response,json=directResponse,proto3" json:"direct_response,omitempty"`
+ // Delegate is used to specify the particular VirtualService which
+ // can be used to define delegate HTTPRoute.
+ //
+ // It can be set only when `Route` and `Redirect` are empty, and the route
+ // rules of the delegate VirtualService will be merged with that in the
+ // current one.
+ //
+ // **NOTE**:
+ //
+ // 1. Only one level delegation is supported.
+ // 2. The delegate's HTTPMatchRequest must be a strict subset of the root's,
+ // otherwise there is a conflict and the HTTPRoute will not take effect.
+ Delegate *Delegate `protobuf:"bytes,20,opt,name=delegate,proto3" json:"delegate,omitempty"`
+ // Rewrite HTTP URIs and Authority headers. Rewrite cannot be used with
+ // Redirect primitive. Rewrite will be performed before forwarding.
+ Rewrite *HTTPRewrite `protobuf:"bytes,4,opt,name=rewrite,proto3" json:"rewrite,omitempty"`
+ // Timeout for HTTP requests, default is disabled.
+ Timeout *duration.Duration `protobuf:"bytes,6,opt,name=timeout,proto3" json:"timeout,omitempty"`
+ // Retry policy for HTTP requests.
+ Retries *HTTPRetry `protobuf:"bytes,7,opt,name=retries,proto3" json:"retries,omitempty"`
+ // Fault injection policy to apply on HTTP traffic at the client side.
+ // Note that timeouts or retries will not be enabled when faults are
+ // enabled on the client side.
+ Fault *HTTPFaultInjection `protobuf:"bytes,8,opt,name=fault,proto3" json:"fault,omitempty"`
+ // Mirror HTTP traffic to a another destination in addition to forwarding
+ // the requests to the intended destination. Mirrored traffic is on a
+ // best effort basis where the sidecar/gateway will not wait for the
+ // mirrored cluster to respond before returning the response from the
+ // original destination. Statistics will be generated for the mirrored
+ // destination.
+ Mirror *Destination `protobuf:"bytes,9,opt,name=mirror,proto3" json:"mirror,omitempty"`
+ // Percentage of the traffic to be mirrored by the `mirror` field.
+ // Use of integer `mirror_percent` value is deprecated. Use the
+ // double `mirror_percentage` field instead
+ // $hide_from_docs
+ //
+ // Deprecated: Do not use.
+ MirrorPercent *wrappers.UInt32Value `protobuf:"bytes,18,opt,name=mirror_percent,json=mirrorPercent,proto3" json:"mirror_percent,omitempty"`
+ // Percentage of the traffic to be mirrored by the `mirror` field.
+ // If this field is absent, all the traffic (100%) will be mirrored.
+ // Max value is 100.
+ MirrorPercentage *Percent `protobuf:"bytes,19,opt,name=mirror_percentage,json=mirrorPercentage,proto3" json:"mirror_percentage,omitempty"`
+ // Cross-Origin Resource Sharing policy (CORS). Refer to
+ // [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
+ // for further details about cross origin resource sharing.
+ CorsPolicy *CorsPolicy `protobuf:"bytes,10,opt,name=cors_policy,json=corsPolicy,proto3" json:"cors_policy,omitempty"`
+ // Header manipulation rules
+ Headers *Headers `protobuf:"bytes,16,opt,name=headers,proto3" json:"headers,omitempty"`
+}
+
+func (x *HTTPRoute) Reset() {
+ *x = HTTPRoute{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPRoute) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPRoute) ProtoMessage() {}
+
+func (x *HTTPRoute) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPRoute.ProtoReflect.Descriptor instead.
+func (*HTTPRoute) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *HTTPRoute) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *HTTPRoute) GetMatch() []*HTTPMatchRequest {
+ if x != nil {
+ return x.Match
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetRoute() []*HTTPRouteDestination {
+ if x != nil {
+ return x.Route
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetRedirect() *HTTPRedirect {
+ if x != nil {
+ return x.Redirect
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetDirectResponse() *HTTPDirectResponse {
+ if x != nil {
+ return x.DirectResponse
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetDelegate() *Delegate {
+ if x != nil {
+ return x.Delegate
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetRewrite() *HTTPRewrite {
+ if x != nil {
+ return x.Rewrite
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetTimeout() *duration.Duration {
+ if x != nil {
+ return x.Timeout
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetRetries() *HTTPRetry {
+ if x != nil {
+ return x.Retries
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetFault() *HTTPFaultInjection {
+ if x != nil {
+ return x.Fault
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetMirror() *Destination {
+ if x != nil {
+ return x.Mirror
+ }
+ return nil
+}
+
+// Deprecated: Do not use.
+func (x *HTTPRoute) GetMirrorPercent() *wrappers.UInt32Value {
+ if x != nil {
+ return x.MirrorPercent
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetMirrorPercentage() *Percent {
+ if x != nil {
+ return x.MirrorPercentage
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetCorsPolicy() *CorsPolicy {
+ if x != nil {
+ return x.CorsPolicy
+ }
+ return nil
+}
+
+func (x *HTTPRoute) GetHeaders() *Headers {
+ if x != nil {
+ return x.Headers
+ }
+ return nil
+}
+
+// Describes the delegate VirtualService.
+// The following routing rules forward the traffic to `/productpage` by a delegate VirtualService named `productpage`,
+// forward the traffic to `/reviews` by a delegate VirtualService named `reviews`.
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: bookinfo
+// spec:
+// hosts:
+// - "bookinfo.com"
+// gateways:
+// - mygateway
+// http:
+// - match:
+// - uri:
+// prefix: "/productpage"
+// delegate:
+// name: productpage
+// namespace: nsA
+// - match:
+// - uri:
+// prefix: "/reviews"
+// delegate:
+// name: reviews
+// namespace: nsB
+// ```
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: productpage
+// namespace: nsA
+// spec:
+// http:
+// - match:
+// - uri:
+// prefix: "/productpage/v1/"
+// route:
+// - destination:
+// host: productpage-v1.nsA.svc.cluster.local
+// - route:
+// - destination:
+// host: productpage.nsA.svc.cluster.local
+// ```
+//
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: reviews
+// namespace: nsB
+// spec:
+// http:
+// - route:
+// - destination:
+// host: reviews.nsB.svc.cluster.local
+// ```
+type Delegate struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Name specifies the name of the delegate VirtualService.
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // Namespace specifies the namespace where the delegate VirtualService resides.
+ // By default, it is same to the root's.
+ Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"`
+}
+
+func (x *Delegate) Reset() {
+ *x = Delegate{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Delegate) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Delegate) ProtoMessage() {}
+
+func (x *Delegate) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Delegate.ProtoReflect.Descriptor instead.
+func (*Delegate) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Delegate) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Delegate) GetNamespace() string {
+ if x != nil {
+ return x.Namespace
+ }
+ return ""
+}
+
+// Message headers can be manipulated when Envoy forwards requests to,
+// or responses from, a destination service. Header manipulation rules can
+// be specified for a specific route destination or for all destinations.
+// The following VirtualService adds a `test` header with the value `true`
+// to requests that are routed to any `reviews` service destination.
+// It also removes the `foo` response header, but only from responses
+// coming from the `v1` subset (version) of the `reviews` service.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - headers:
+// request:
+// set:
+// test: "true"
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v2
+// weight: 25
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// headers:
+// response:
+// remove:
+// - foo
+// weight: 75
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - headers:
+// request:
+// set:
+// test: "true"
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v2
+// weight: 25
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// headers:
+// response:
+// remove:
+// - foo
+// weight: 75
+// ```
+// {{}}
+// {{}}
+type Headers struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Header manipulation rules to apply before forwarding a request
+ // to the destination service
+ Request *Headers_HeaderOperations `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"`
+ // Header manipulation rules to apply before returning a response
+ // to the caller
+ Response *Headers_HeaderOperations `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"`
+}
+
+func (x *Headers) Reset() {
+ *x = Headers{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Headers) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Headers) ProtoMessage() {}
+
+func (x *Headers) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Headers.ProtoReflect.Descriptor instead.
+func (*Headers) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *Headers) GetRequest() *Headers_HeaderOperations {
+ if x != nil {
+ return x.Request
+ }
+ return nil
+}
+
+func (x *Headers) GetResponse() *Headers_HeaderOperations {
+ if x != nil {
+ return x.Response
+ }
+ return nil
+}
+
+// Describes match conditions and actions for routing unterminated TLS
+// traffic (TLS/HTTPS) The following routing rule forwards unterminated TLS
+// traffic arriving at port 443 of gateway called "mygateway" to internal
+// services in the mesh based on the SNI value.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: bookinfo-sni
+// spec:
+// hosts:
+// - "*.bookinfo.com"
+// gateways:
+// - mygateway
+// tls:
+// - match:
+// - port: 443
+// sniHosts:
+// - login.bookinfo.com
+// route:
+// - destination:
+// host: login.prod.svc.cluster.local
+// - match:
+// - port: 443
+// sniHosts:
+// - reviews.bookinfo.com
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: bookinfo-sni
+// spec:
+// hosts:
+// - "*.bookinfo.com"
+// gateways:
+// - mygateway
+// tls:
+// - match:
+// - port: 443
+// sniHosts:
+// - login.bookinfo.com
+// route:
+// - destination:
+// host: login.prod.svc.cluster.local
+// - match:
+// - port: 443
+// sniHosts:
+// - reviews.bookinfo.com
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// ```
+// {{}}
+// {{}}
+type TLSRoute struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Match conditions to be satisfied for the rule to be
+ // activated. All conditions inside a single match block have AND
+ // semantics, while the list of match blocks have OR semantics. The rule
+ // is matched if any one of the match blocks succeed.
+ Match []*TLSMatchAttributes `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"`
+ // The destination to which the connection should be forwarded to.
+ Route []*RouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"`
+}
+
+func (x *TLSRoute) Reset() {
+ *x = TLSRoute{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TLSRoute) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TLSRoute) ProtoMessage() {}
+
+func (x *TLSRoute) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TLSRoute.ProtoReflect.Descriptor instead.
+func (*TLSRoute) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *TLSRoute) GetMatch() []*TLSMatchAttributes {
+ if x != nil {
+ return x.Match
+ }
+ return nil
+}
+
+func (x *TLSRoute) GetRoute() []*RouteDestination {
+ if x != nil {
+ return x.Route
+ }
+ return nil
+}
+
+// Describes match conditions and actions for routing TCP traffic. The
+// following routing rule forwards traffic arriving at port 27017 for
+// mongo.prod.svc.cluster.local to another Mongo server on port 5555.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: bookinfo-mongo
+// spec:
+// hosts:
+// - mongo.prod.svc.cluster.local
+// tcp:
+// - match:
+// - port: 27017
+// route:
+// - destination:
+// host: mongo.backup.svc.cluster.local
+// port:
+// number: 5555
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: bookinfo-mongo
+// spec:
+// hosts:
+// - mongo.prod.svc.cluster.local
+// tcp:
+// - match:
+// - port: 27017
+// route:
+// - destination:
+// host: mongo.backup.svc.cluster.local
+// port:
+// number: 5555
+// ```
+// {{}}
+// {{}}
+type TCPRoute struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Match conditions to be satisfied for the rule to be
+ // activated. All conditions inside a single match block have AND
+ // semantics, while the list of match blocks have OR semantics. The rule
+ // is matched if any one of the match blocks succeed.
+ Match []*L4MatchAttributes `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"`
+ // The destination to which the connection should be forwarded to.
+ Route []*RouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"`
+}
+
+func (x *TCPRoute) Reset() {
+ *x = TCPRoute{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TCPRoute) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TCPRoute) ProtoMessage() {}
+
+func (x *TCPRoute) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TCPRoute.ProtoReflect.Descriptor instead.
+func (*TCPRoute) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *TCPRoute) GetMatch() []*L4MatchAttributes {
+ if x != nil {
+ return x.Match
+ }
+ return nil
+}
+
+func (x *TCPRoute) GetRoute() []*RouteDestination {
+ if x != nil {
+ return x.Route
+ }
+ return nil
+}
+
+// HttpMatchRequest specifies a set of criterion to be met in order for the
+// rule to be applied to the HTTP request. For example, the following
+// restricts the rule to match only requests where the URL path
+// starts with /ratings/v2/ and the request contains a custom `end-user` header
+// with value `jason`.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - headers:
+// end-user:
+// exact: jason
+// uri:
+// prefix: "/ratings/v2/"
+// ignoreUriCase: true
+// route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - headers:
+// end-user:
+// exact: jason
+// uri:
+// prefix: "/ratings/v2/"
+// ignoreUriCase: true
+// route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// ```
+// {{}}
+// {{}}
+//
+// HTTPMatchRequest CANNOT be empty.
+// **Note:** No regex string match can be set when delegate VirtualService is specified.
+type HTTPMatchRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The name assigned to a match. The match's name will be
+ // concatenated with the parent route's name and will be logged in
+ // the access logs for requests matching this route.
+ Name string `protobuf:"bytes,11,opt,name=name,proto3" json:"name,omitempty"`
+ // URI to match
+ // values are case-sensitive and formatted as follows:
+ //
+ // - `exact: "value"` for exact string match
+ //
+ // - `prefix: "value"` for prefix-based match
+ //
+ // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ //
+ // **Note:** Case-insensitive matching could be enabled via the
+ // `ignore_uri_case` flag.
+ Uri *StringMatch `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+ // URI Scheme
+ // values are case-sensitive and formatted as follows:
+ //
+ // - `exact: "value"` for exact string match
+ //
+ // - `prefix: "value"` for prefix-based match
+ //
+ // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ //
+ Scheme *StringMatch `protobuf:"bytes,2,opt,name=scheme,proto3" json:"scheme,omitempty"`
+ // HTTP Method
+ // values are case-sensitive and formatted as follows:
+ //
+ // - `exact: "value"` for exact string match
+ //
+ // - `prefix: "value"` for prefix-based match
+ //
+ // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ //
+ Method *StringMatch `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"`
+ // HTTP Authority
+ // values are case-sensitive and formatted as follows:
+ //
+ // - `exact: "value"` for exact string match
+ //
+ // - `prefix: "value"` for prefix-based match
+ //
+ // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ //
+ Authority *StringMatch `protobuf:"bytes,4,opt,name=authority,proto3" json:"authority,omitempty"`
+ // The header keys must be lowercase and use hyphen as the separator,
+ // e.g. _x-request-id_.
+ //
+ // Header values are case-sensitive and formatted as follows:
+ //
+ // - `exact: "value"` for exact string match
+ //
+ // - `prefix: "value"` for prefix-based match
+ //
+ // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ //
+ // If the value is empty and only the name of header is specfied, presence of the header is checked.
+ // **Note:** The keys `uri`, `scheme`, `method`, and `authority` will be ignored.
+ Headers map[string]*StringMatch `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Specifies the ports on the host that is being addressed. Many services
+ // only expose a single port or label ports with the protocols they support,
+ // in these cases it is not required to explicitly select the port.
+ Port uint32 `protobuf:"varint,6,opt,name=port,proto3" json:"port,omitempty"`
+ // One or more labels that constrain the applicability of a rule to source (client) workloads
+ // with the given labels. If the VirtualService has a list of gateways specified
+ // in the top-level `gateways` field, it must include the reserved gateway
+ // `mesh` for this field to be applicable.
+ SourceLabels map[string]string `protobuf:"bytes,7,rep,name=source_labels,json=sourceLabels,proto3" json:"source_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Names of gateways where the rule should be applied. Gateway names
+ // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway
+ // match is independent of sourceLabels.
+ Gateways []string `protobuf:"bytes,8,rep,name=gateways,proto3" json:"gateways,omitempty"`
+ // Query parameters for matching.
+ //
+ // Ex:
+ //
+ // - For a query parameter like "?key=true", the map key would be "key" and
+ // the string match could be defined as `exact: "true"`.
+ //
+ // - For a query parameter like "?key", the map key would be "key" and the
+ // string match could be defined as `exact: ""`.
+ //
+ // - For a query parameter like "?key=123", the map key would be "key" and the
+ // string match could be defined as `regex: "\d+$"`. Note that this
+ // configuration will only match values like "123" but not "a123" or "123a".
+ //
+ // **Note:** `prefix` matching is currently not supported.
+ QueryParams map[string]*StringMatch `protobuf:"bytes,9,rep,name=query_params,json=queryParams,proto3" json:"query_params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Flag to specify whether the URI matching should be case-insensitive.
+ //
+ // **Note:** The case will be ignored only in the case of `exact` and `prefix`
+ // URI matches.
+ IgnoreUriCase bool `protobuf:"varint,10,opt,name=ignore_uri_case,json=ignoreUriCase,proto3" json:"ignore_uri_case,omitempty"`
+ // withoutHeader has the same syntax with the header, but has opposite meaning.
+ // If a header is matched with a matching rule among withoutHeader, the traffic becomes not matched one.
+ WithoutHeaders map[string]*StringMatch `protobuf:"bytes,12,rep,name=without_headers,json=withoutHeaders,proto3" json:"without_headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Source namespace constraining the applicability of a rule to workloads in that namespace.
+ // If the VirtualService has a list of gateways specified in the top-level `gateways` field,
+ // it must include the reserved gateway `mesh` for this field to be applicable.
+ SourceNamespace string `protobuf:"bytes,13,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"`
+ // The human readable prefix to use when emitting statistics for this route.
+ // The statistics are generated with prefix route..
+ // This should be set for highly critical routes that one wishes to get "per-route" statistics on.
+ // This prefix is only for proxy-level statistics (envoy_*) and not service-level (istio_*) statistics.
+ // Refer to https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-route-stat-prefix
+ // for statistics that are generated when this is configured.
+ StatPrefix string `protobuf:"bytes,14,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"`
+}
+
+func (x *HTTPMatchRequest) Reset() {
+ *x = HTTPMatchRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPMatchRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPMatchRequest) ProtoMessage() {}
+
+func (x *HTTPMatchRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPMatchRequest.ProtoReflect.Descriptor instead.
+func (*HTTPMatchRequest) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *HTTPMatchRequest) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *HTTPMatchRequest) GetUri() *StringMatch {
+ if x != nil {
+ return x.Uri
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetScheme() *StringMatch {
+ if x != nil {
+ return x.Scheme
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetMethod() *StringMatch {
+ if x != nil {
+ return x.Method
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetAuthority() *StringMatch {
+ if x != nil {
+ return x.Authority
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetHeaders() map[string]*StringMatch {
+ if x != nil {
+ return x.Headers
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetPort() uint32 {
+ if x != nil {
+ return x.Port
+ }
+ return 0
+}
+
+func (x *HTTPMatchRequest) GetSourceLabels() map[string]string {
+ if x != nil {
+ return x.SourceLabels
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetGateways() []string {
+ if x != nil {
+ return x.Gateways
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetQueryParams() map[string]*StringMatch {
+ if x != nil {
+ return x.QueryParams
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetIgnoreUriCase() bool {
+ if x != nil {
+ return x.IgnoreUriCase
+ }
+ return false
+}
+
+func (x *HTTPMatchRequest) GetWithoutHeaders() map[string]*StringMatch {
+ if x != nil {
+ return x.WithoutHeaders
+ }
+ return nil
+}
+
+func (x *HTTPMatchRequest) GetSourceNamespace() string {
+ if x != nil {
+ return x.SourceNamespace
+ }
+ return ""
+}
+
+func (x *HTTPMatchRequest) GetStatPrefix() string {
+ if x != nil {
+ return x.StatPrefix
+ }
+ return ""
+}
+
+// Each routing rule is associated with one or more service versions (see
+// glossary in beginning of document). Weights associated with the version
+// determine the proportion of traffic it receives. For example, the
+// following rule will route 25% of traffic for the "reviews" service to
+// instances with the "v2" tag and the remaining traffic (i.e., 75%) to
+// "v1".
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v2
+// weight: 25
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// weight: 75
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v2
+// weight: 25
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// weight: 75
+// ```
+// {{}}
+// {{}}
+//
+// And the associated DestinationRule
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: DestinationRule
+// metadata:
+// name: reviews-destination
+// spec:
+// host: reviews.prod.svc.cluster.local
+// subsets:
+// - name: v1
+// labels:
+// version: v1
+// - name: v2
+// labels:
+// version: v2
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: DestinationRule
+// metadata:
+// name: reviews-destination
+// spec:
+// host: reviews.prod.svc.cluster.local
+// subsets:
+// - name: v1
+// labels:
+// version: v1
+// - name: v2
+// labels:
+// version: v2
+// ```
+// {{}}
+// {{}}
+//
+// Traffic can also be split across two entirely different services without
+// having to define new subsets. For example, the following rule forwards 25% of
+// traffic to reviews.com to dev.reviews.com
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: reviews-route-two-domains
+// spec:
+// hosts:
+// - reviews.com
+// http:
+// - route:
+// - destination:
+// host: dev.reviews.com
+// weight: 25
+// - destination:
+// host: reviews.com
+// weight: 75
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: reviews-route-two-domains
+// spec:
+// hosts:
+// - reviews.com
+// http:
+// - route:
+// - destination:
+// host: dev.reviews.com
+// weight: 25
+// - destination:
+// host: reviews.com
+// weight: 75
+// ```
+// {{}}
+// {{}}
+//
+type HTTPRouteDestination struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Destination uniquely identifies the instances of a service
+ // to which the request/connection should be forwarded to.
+ Destination *Destination `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"`
+ // Weight specifies the relative proportion of traffic to be forwarded to the destination. A destination will receive `weight/(sum of all weights)` requests.
+ // If there is only one destination in a rule, it will receive all traffic.
+ // Otherwise, if weight is `0`, the destination will not receive any traffic.
+ Weight int32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"`
+ // Header manipulation rules
+ Headers *Headers `protobuf:"bytes,7,opt,name=headers,proto3" json:"headers,omitempty"`
+}
+
+func (x *HTTPRouteDestination) Reset() {
+ *x = HTTPRouteDestination{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPRouteDestination) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPRouteDestination) ProtoMessage() {}
+
+func (x *HTTPRouteDestination) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPRouteDestination.ProtoReflect.Descriptor instead.
+func (*HTTPRouteDestination) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *HTTPRouteDestination) GetDestination() *Destination {
+ if x != nil {
+ return x.Destination
+ }
+ return nil
+}
+
+func (x *HTTPRouteDestination) GetWeight() int32 {
+ if x != nil {
+ return x.Weight
+ }
+ return 0
+}
+
+func (x *HTTPRouteDestination) GetHeaders() *Headers {
+ if x != nil {
+ return x.Headers
+ }
+ return nil
+}
+
+type Fallback struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
+ // The name of a subset within the service. Applicable only to services
+ // within the mesh. The subset must be defined in a corresponding
+ // DestinationRule.
+ Subset string `protobuf:"bytes,2,opt,name=subset,proto3" json:"subset,omitempty"`
+}
+
+func (x *Fallback) Reset() {
+ *x = Fallback{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Fallback) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Fallback) ProtoMessage() {}
+
+func (x *Fallback) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Fallback.ProtoReflect.Descriptor instead.
+func (*Fallback) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *Fallback) GetHost() string {
+ if x != nil {
+ return x.Host
+ }
+ return ""
+}
+
+func (x *Fallback) GetSubset() string {
+ if x != nil {
+ return x.Subset
+ }
+ return ""
+}
+
+// L4 routing rule weighted destination.
+type RouteDestination struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Destination uniquely identifies the instances of a service
+ // to which the request/connection should be forwarded to.
+ Destination *Destination `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"`
+ // Weight specifies the relative proportion of traffic to be forwarded to the destination. A destination will receive `weight/(sum of all weights)` requests.
+ // If there is only one destination in a rule, it will receive all traffic.
+ // Otherwise, if weight is `0`, the destination will not receive any traffic.
+ Weight int32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"`
+}
+
+func (x *RouteDestination) Reset() {
+ *x = RouteDestination{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RouteDestination) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RouteDestination) ProtoMessage() {}
+
+func (x *RouteDestination) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[10]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RouteDestination.ProtoReflect.Descriptor instead.
+func (*RouteDestination) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *RouteDestination) GetDestination() *Destination {
+ if x != nil {
+ return x.Destination
+ }
+ return nil
+}
+
+func (x *RouteDestination) GetWeight() int32 {
+ if x != nil {
+ return x.Weight
+ }
+ return 0
+}
+
+// L4 connection match attributes. Note that L4 connection matching support
+// is incomplete.
+type L4MatchAttributes struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // IPv4 or IPv6 ip addresses of destination with optional subnet. E.g.,
+ // a.b.c.d/xx form or just a.b.c.d.
+ DestinationSubnets []string `protobuf:"bytes,1,rep,name=destination_subnets,json=destinationSubnets,proto3" json:"destination_subnets,omitempty"`
+ // Specifies the port on the host that is being addressed. Many services
+ // only expose a single port or label ports with the protocols they support,
+ // in these cases it is not required to explicitly select the port.
+ Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
+ // IPv4 or IPv6 ip address of source with optional subnet. E.g., a.b.c.d/xx
+ // form or just a.b.c.d
+ // $hide_from_docs
+ SourceSubnet string `protobuf:"bytes,3,opt,name=source_subnet,json=sourceSubnet,proto3" json:"source_subnet,omitempty"`
+ // One or more labels that constrain the applicability of a rule to
+ // workloads with the given labels. If the VirtualService has a list of
+ // gateways specified in the top-level `gateways` field, it should include the reserved gateway
+ // `mesh` in order for this field to be applicable.
+ SourceLabels map[string]string `protobuf:"bytes,4,rep,name=source_labels,json=sourceLabels,proto3" json:"source_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Names of gateways where the rule should be applied. Gateway names
+ // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway
+ // match is independent of sourceLabels.
+ Gateways []string `protobuf:"bytes,5,rep,name=gateways,proto3" json:"gateways,omitempty"`
+ // Source namespace constraining the applicability of a rule to workloads in that namespace.
+ // If the VirtualService has a list of gateways specified in the top-level `gateways` field,
+ // it must include the reserved gateway `mesh` for this field to be applicable.
+ SourceNamespace string `protobuf:"bytes,6,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"`
+}
+
+func (x *L4MatchAttributes) Reset() {
+ *x = L4MatchAttributes{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *L4MatchAttributes) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*L4MatchAttributes) ProtoMessage() {}
+
+func (x *L4MatchAttributes) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[11]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use L4MatchAttributes.ProtoReflect.Descriptor instead.
+func (*L4MatchAttributes) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *L4MatchAttributes) GetDestinationSubnets() []string {
+ if x != nil {
+ return x.DestinationSubnets
+ }
+ return nil
+}
+
+func (x *L4MatchAttributes) GetPort() uint32 {
+ if x != nil {
+ return x.Port
+ }
+ return 0
+}
+
+func (x *L4MatchAttributes) GetSourceSubnet() string {
+ if x != nil {
+ return x.SourceSubnet
+ }
+ return ""
+}
+
+func (x *L4MatchAttributes) GetSourceLabels() map[string]string {
+ if x != nil {
+ return x.SourceLabels
+ }
+ return nil
+}
+
+func (x *L4MatchAttributes) GetGateways() []string {
+ if x != nil {
+ return x.Gateways
+ }
+ return nil
+}
+
+func (x *L4MatchAttributes) GetSourceNamespace() string {
+ if x != nil {
+ return x.SourceNamespace
+ }
+ return ""
+}
+
+// TLS connection match attributes.
+type TLSMatchAttributes struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // SNI (server name indicator) to match on. Wildcard prefixes
+ // can be used in the SNI value, e.g., *.com will match foo.example.com
+ // as well as example.com. An SNI value must be a subset (i.e., fall
+ // within the domain) of the corresponding virtual serivce's hosts.
+ SniHosts []string `protobuf:"bytes,1,rep,name=sni_hosts,json=sniHosts,proto3" json:"sni_hosts,omitempty"`
+ // IPv4 or IPv6 ip addresses of destination with optional subnet. E.g.,
+ // a.b.c.d/xx form or just a.b.c.d.
+ DestinationSubnets []string `protobuf:"bytes,2,rep,name=destination_subnets,json=destinationSubnets,proto3" json:"destination_subnets,omitempty"`
+ // Specifies the port on the host that is being addressed. Many services
+ // only expose a single port or label ports with the protocols they
+ // support, in these cases it is not required to explicitly select the
+ // port.
+ Port uint32 `protobuf:"varint,3,opt,name=port,proto3" json:"port,omitempty"`
+ // One or more labels that constrain the applicability of a rule to
+ // workloads with the given labels. If the VirtualService has a list of
+ // gateways specified in the top-level `gateways` field, it should include the reserved gateway
+ // `mesh` in order for this field to be applicable.
+ SourceLabels map[string]string `protobuf:"bytes,5,rep,name=source_labels,json=sourceLabels,proto3" json:"source_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Names of gateways where the rule should be applied. Gateway names
+ // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway
+ // match is independent of sourceLabels.
+ Gateways []string `protobuf:"bytes,6,rep,name=gateways,proto3" json:"gateways,omitempty"`
+ // Source namespace constraining the applicability of a rule to workloads in that namespace.
+ // If the VirtualService has a list of gateways specified in the top-level `gateways` field,
+ // it must include the reserved gateway `mesh` for this field to be applicable.
+ SourceNamespace string `protobuf:"bytes,7,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"`
+}
+
+func (x *TLSMatchAttributes) Reset() {
+ *x = TLSMatchAttributes{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TLSMatchAttributes) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TLSMatchAttributes) ProtoMessage() {}
+
+func (x *TLSMatchAttributes) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[12]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TLSMatchAttributes.ProtoReflect.Descriptor instead.
+func (*TLSMatchAttributes) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *TLSMatchAttributes) GetSniHosts() []string {
+ if x != nil {
+ return x.SniHosts
+ }
+ return nil
+}
+
+func (x *TLSMatchAttributes) GetDestinationSubnets() []string {
+ if x != nil {
+ return x.DestinationSubnets
+ }
+ return nil
+}
+
+func (x *TLSMatchAttributes) GetPort() uint32 {
+ if x != nil {
+ return x.Port
+ }
+ return 0
+}
+
+func (x *TLSMatchAttributes) GetSourceLabels() map[string]string {
+ if x != nil {
+ return x.SourceLabels
+ }
+ return nil
+}
+
+func (x *TLSMatchAttributes) GetGateways() []string {
+ if x != nil {
+ return x.Gateways
+ }
+ return nil
+}
+
+func (x *TLSMatchAttributes) GetSourceNamespace() string {
+ if x != nil {
+ return x.SourceNamespace
+ }
+ return ""
+}
+
+// HTTPRedirect can be used to send a 301 redirect response to the caller,
+// where the Authority/Host and the URI in the response can be swapped with
+// the specified values. For example, the following rule redirects
+// requests for /v1/getProductRatings API on the ratings service to
+// /v1/bookRatings provided by the bookratings service.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// redirect:
+// uri: /v1/bookRatings
+// authority: newratings.default.svc.cluster.local
+// ...
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// redirect:
+// uri: /v1/bookRatings
+// authority: newratings.default.svc.cluster.local
+// ...
+// ```
+// {{}}
+// {{}}
+//
+type HTTPRedirect struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // On a redirect, overwrite the Path portion of the URL with this
+ // value. Note that the entire path will be replaced, irrespective of the
+ // request URI being matched as an exact path or prefix.
+ Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+ // On a redirect, overwrite the Authority/Host portion of the URL with
+ // this value.
+ Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"`
+ // Types that are assignable to RedirectPort:
+ // *HTTPRedirect_Port
+ // *HTTPRedirect_DerivePort
+ RedirectPort isHTTPRedirect_RedirectPort `protobuf_oneof:"redirect_port"`
+ // On a redirect, overwrite the scheme portion of the URL with this value.
+ // For example, `http` or `https`.
+ // If unset, the original scheme will be used.
+ // If `derivePort` is set to `FROM_PROTOCOL_DEFAULT`, this will impact the port used as well
+ Scheme string `protobuf:"bytes,6,opt,name=scheme,proto3" json:"scheme,omitempty"`
+ // On a redirect, Specifies the HTTP status code to use in the redirect
+ // response. The default response code is MOVED_PERMANENTLY (301).
+ RedirectCode uint32 `protobuf:"varint,3,opt,name=redirect_code,json=redirectCode,proto3" json:"redirect_code,omitempty"`
+}
+
+func (x *HTTPRedirect) Reset() {
+ *x = HTTPRedirect{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPRedirect) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPRedirect) ProtoMessage() {}
+
+func (x *HTTPRedirect) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[13]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPRedirect.ProtoReflect.Descriptor instead.
+func (*HTTPRedirect) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *HTTPRedirect) GetUri() string {
+ if x != nil {
+ return x.Uri
+ }
+ return ""
+}
+
+func (x *HTTPRedirect) GetAuthority() string {
+ if x != nil {
+ return x.Authority
+ }
+ return ""
+}
+
+func (m *HTTPRedirect) GetRedirectPort() isHTTPRedirect_RedirectPort {
+ if m != nil {
+ return m.RedirectPort
+ }
+ return nil
+}
+
+func (x *HTTPRedirect) GetPort() uint32 {
+ if x, ok := x.GetRedirectPort().(*HTTPRedirect_Port); ok {
+ return x.Port
+ }
+ return 0
+}
+
+func (x *HTTPRedirect) GetDerivePort() HTTPRedirect_RedirectPortSelection {
+ if x, ok := x.GetRedirectPort().(*HTTPRedirect_DerivePort); ok {
+ return x.DerivePort
+ }
+ return HTTPRedirect_FROM_PROTOCOL_DEFAULT
+}
+
+func (x *HTTPRedirect) GetScheme() string {
+ if x != nil {
+ return x.Scheme
+ }
+ return ""
+}
+
+func (x *HTTPRedirect) GetRedirectCode() uint32 {
+ if x != nil {
+ return x.RedirectCode
+ }
+ return 0
+}
+
+type isHTTPRedirect_RedirectPort interface {
+ isHTTPRedirect_RedirectPort()
+}
+
+type HTTPRedirect_Port struct {
+ // On a redirect, overwrite the port portion of the URL with this value.
+ Port uint32 `protobuf:"varint,4,opt,name=port,proto3,oneof"`
+}
+
+type HTTPRedirect_DerivePort struct {
+ // On a redirect, dynamically set the port:
+ // * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS.
+ // * FROM_REQUEST_PORT: automatically use the port of the request.
+ DerivePort HTTPRedirect_RedirectPortSelection `protobuf:"varint,5,opt,name=derive_port,json=derivePort,proto3,enum=opensergo.traffic.v1alpha1.HTTPRedirect_RedirectPortSelection,oneof"`
+}
+
+func (*HTTPRedirect_Port) isHTTPRedirect_RedirectPort() {}
+
+func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {}
+
+// HTTPDirectResponse can be used to send a fixed response to clients.
+// For example, the following rule returns a fixed 503 status with a body
+// to requests for /v1/getProductRatings API.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// directResponse:
+// status: 503
+// body:
+// string: "unknown error"
+// ...
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// directResponse:
+// status: 503
+// body:
+// string: "unknown error"
+// ...
+// ```
+// {{}}
+// {{}}
+//
+// It is also possible to specify a binary response body.
+// This is mostly useful for non text-based protocols such as gRPC.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// directResponse:
+// status: 503
+// body:
+// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64
+// ...
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// directResponse:
+// status: 503
+// body:
+// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64
+// ...
+// ```
+// {{}}
+// {{}}
+//
+// It is good practice to add headers in the HTTPRoute
+// as well as the direct_response, for example to specify
+// the returned Content-Type.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// directResponse:
+// status: 503
+// body:
+// string: "{\"error\": \"unknown error\"}"
+// headers:
+// response:
+// set:
+// content-type: "appliation/json"
+// ...
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// exact: /v1/getProductRatings
+// directResponse:
+// status: 503
+// body:
+// string: "{\"error\": \"unknown error\"}"
+// headers:
+// response:
+// set:
+// content-type: "text/plain"
+// ...
+// ```
+// {{}}
+// {{}}
+//
+type HTTPDirectResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Specifies the HTTP response status to be returned.
+ Status uint32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
+ // Specifies the content of the response body. If this setting is omitted,
+ // no body is included in the generated response.
+ Body *HTTPBody `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"`
+}
+
+func (x *HTTPDirectResponse) Reset() {
+ *x = HTTPDirectResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPDirectResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPDirectResponse) ProtoMessage() {}
+
+func (x *HTTPDirectResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[14]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPDirectResponse.ProtoReflect.Descriptor instead.
+func (*HTTPDirectResponse) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *HTTPDirectResponse) GetStatus() uint32 {
+ if x != nil {
+ return x.Status
+ }
+ return 0
+}
+
+func (x *HTTPDirectResponse) GetBody() *HTTPBody {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+
+type HTTPBody struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to Specifier:
+ // *HTTPBody_String_
+ // *HTTPBody_Bytes
+ Specifier isHTTPBody_Specifier `protobuf_oneof:"specifier"`
+}
+
+func (x *HTTPBody) Reset() {
+ *x = HTTPBody{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPBody) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPBody) ProtoMessage() {}
+
+func (x *HTTPBody) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[15]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPBody.ProtoReflect.Descriptor instead.
+func (*HTTPBody) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{15}
+}
+
+func (m *HTTPBody) GetSpecifier() isHTTPBody_Specifier {
+ if m != nil {
+ return m.Specifier
+ }
+ return nil
+}
+
+func (x *HTTPBody) GetString_() string {
+ if x, ok := x.GetSpecifier().(*HTTPBody_String_); ok {
+ return x.String_
+ }
+ return ""
+}
+
+func (x *HTTPBody) GetBytes() []byte {
+ if x, ok := x.GetSpecifier().(*HTTPBody_Bytes); ok {
+ return x.Bytes
+ }
+ return nil
+}
+
+type isHTTPBody_Specifier interface {
+ isHTTPBody_Specifier()
+}
+
+type HTTPBody_String_ struct {
+ // response body as a string
+ String_ string `protobuf:"bytes,1,opt,name=string,proto3,oneof"`
+}
+
+type HTTPBody_Bytes struct {
+ // response body as base64 encoded bytes.
+ Bytes []byte `protobuf:"bytes,2,opt,name=bytes,proto3,oneof"`
+}
+
+func (*HTTPBody_String_) isHTTPBody_Specifier() {}
+
+func (*HTTPBody_Bytes) isHTTPBody_Specifier() {}
+
+// HTTPRewrite can be used to rewrite specific parts of a HTTP request
+// before forwarding the request to the destination. Rewrite primitive can
+// be used only with HTTPRouteDestination. The following example
+// demonstrates how to rewrite the URL prefix for api call (/ratings) to
+// ratings service before making the actual API call.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// prefix: /ratings
+// rewrite:
+// uri: /v1/bookRatings
+// route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - match:
+// - uri:
+// prefix: /ratings
+// rewrite:
+// uri: /v1/bookRatings
+// route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// ```
+// {{}}
+// {{}}
+//
+type HTTPRewrite struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // rewrite the path (or the prefix) portion of the URI with this
+ // value. If the original URI was matched based on prefix, the value
+ // provided in this field will replace the corresponding matched prefix.
+ Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
+ // rewrite the Authority/Host header with this value.
+ Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"`
+}
+
+func (x *HTTPRewrite) Reset() {
+ *x = HTTPRewrite{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPRewrite) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPRewrite) ProtoMessage() {}
+
+func (x *HTTPRewrite) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[16]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPRewrite.ProtoReflect.Descriptor instead.
+func (*HTTPRewrite) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *HTTPRewrite) GetUri() string {
+ if x != nil {
+ return x.Uri
+ }
+ return ""
+}
+
+func (x *HTTPRewrite) GetAuthority() string {
+ if x != nil {
+ return x.Authority
+ }
+ return ""
+}
+
+// Describes how to match a given string in HTTP headers. Match is
+// case-sensitive.
+type StringMatch struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // exact string match
+ Exact string `protobuf:"bytes,1,opt,name=exact,proto3" json:"exact,omitempty"`
+ // prefix-based match
+ Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"`
+ // RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).
+ Regex string `protobuf:"bytes,3,opt,name=regex,proto3" json:"regex,omitempty"` // }
+}
+
+func (x *StringMatch) Reset() {
+ *x = StringMatch{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StringMatch) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StringMatch) ProtoMessage() {}
+
+func (x *StringMatch) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[17]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StringMatch.ProtoReflect.Descriptor instead.
+func (*StringMatch) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *StringMatch) GetExact() string {
+ if x != nil {
+ return x.Exact
+ }
+ return ""
+}
+
+func (x *StringMatch) GetPrefix() string {
+ if x != nil {
+ return x.Prefix
+ }
+ return ""
+}
+
+func (x *StringMatch) GetRegex() string {
+ if x != nil {
+ return x.Regex
+ }
+ return ""
+}
+
+// Describes the retry policy to use when a HTTP request fails. For
+// example, the following rule sets the maximum number of retries to 3 when
+// calling ratings:v1 service, with a 2s timeout per retry attempt.
+// A retry will be attempted if there is a connect-failure, refused_stream
+// or when the upstream server responds with Service Unavailable(503).
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// retries:
+// attempts: 3
+// perTryTimeout: 2s
+// retryOn: connect-failure,refused-stream,503
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// retries:
+// attempts: 3
+// perTryTimeout: 2s
+// retryOn: gateway-error,connect-failure,refused-stream
+// ```
+// {{}}
+// {{}}
+//
+type HTTPRetry struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Number of retries to be allowed for a given request. The interval
+ // between retries will be determined automatically (25ms+). When request
+ // `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute)
+ // or `per_try_timeout` is configured, the actual number of retries attempted also depends on
+ // the specified request `timeout` and `per_try_timeout` values.
+ Attempts int32 `protobuf:"varint,1,opt,name=attempts,proto3" json:"attempts,omitempty"`
+ // Timeout per attempt for a given request, including the initial call and any retries. Format: 1h/1m/1s/1ms. MUST BE >=1ms.
+ // Default is same value as request
+ // `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute),
+ // which means no timeout.
+ PerTryTimeout *duration.Duration `protobuf:"bytes,2,opt,name=per_try_timeout,json=perTryTimeout,proto3" json:"per_try_timeout,omitempty"`
+ // Specifies the conditions under which retry takes place.
+ // One or more policies can be specified using a ‘,’ delimited list.
+ // If `retry_on` specifies a valid HTTP status, it will be added to retriable_status_codes retry policy.
+ // See the [retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on)
+ // and [gRPC retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-grpc-on) for more details.
+ RetryOn string `protobuf:"bytes,3,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"`
+ // Flag to specify whether the retries should retry to other localities.
+ // See the [retry plugin configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management#retry-plugin-configuration) for more details.
+ RetryRemoteLocalities *wrappers.BoolValue `protobuf:"bytes,4,opt,name=retry_remote_localities,json=retryRemoteLocalities,proto3" json:"retry_remote_localities,omitempty"`
+}
+
+func (x *HTTPRetry) Reset() {
+ *x = HTTPRetry{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPRetry) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPRetry) ProtoMessage() {}
+
+func (x *HTTPRetry) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[18]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPRetry.ProtoReflect.Descriptor instead.
+func (*HTTPRetry) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *HTTPRetry) GetAttempts() int32 {
+ if x != nil {
+ return x.Attempts
+ }
+ return 0
+}
+
+func (x *HTTPRetry) GetPerTryTimeout() *duration.Duration {
+ if x != nil {
+ return x.PerTryTimeout
+ }
+ return nil
+}
+
+func (x *HTTPRetry) GetRetryOn() string {
+ if x != nil {
+ return x.RetryOn
+ }
+ return ""
+}
+
+func (x *HTTPRetry) GetRetryRemoteLocalities() *wrappers.BoolValue {
+ if x != nil {
+ return x.RetryRemoteLocalities
+ }
+ return nil
+}
+
+// Describes the Cross-Origin Resource Sharing (CORS) policy, for a given
+// service. Refer to [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)
+// for further details about cross origin resource sharing. For example,
+// the following rule restricts cross origin requests to those originating
+// from example.com domain using HTTP POST/GET, and sets the
+// `Access-Control-Allow-Credentials` header to false. In addition, it only
+// exposes `X-Foo-bar` header and sets an expiry period of 1 day.
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// corsPolicy:
+// allowOrigins:
+// - exact: https://example.com
+// allowMethods:
+// - POST
+// - GET
+// allowCredentials: false
+// allowHeaders:
+// - X-Foo-Bar
+// maxAge: "24h"
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// corsPolicy:
+// allowOrigins:
+// - exact: https://example.com
+// allowMethods:
+// - POST
+// - GET
+// allowCredentials: false
+// allowHeaders:
+// - X-Foo-Bar
+// maxAge: "24h"
+// ```
+// {{}}
+// {{}}
+//
+type CorsPolicy struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The list of origins that are allowed to perform CORS requests. The
+ // content will be serialized into the Access-Control-Allow-Origin
+ // header. Wildcard * will allow all origins.
+ // $hide_from_docs
+ //
+ // Deprecated: Do not use.
+ AllowOrigin []string `protobuf:"bytes,1,rep,name=allow_origin,json=allowOrigin,proto3" json:"allow_origin,omitempty"`
+ // String patterns that match allowed origins.
+ // An origin is allowed if any of the string matchers match.
+ // If a match is found, then the outgoing Access-Control-Allow-Origin would be set to the origin as provided by the client.
+ AllowOrigins []*StringMatch `protobuf:"bytes,7,rep,name=allow_origins,json=allowOrigins,proto3" json:"allow_origins,omitempty"`
+ // List of HTTP methods allowed to access the resource. The content will
+ // be serialized into the Access-Control-Allow-Methods header.
+ AllowMethods []string `protobuf:"bytes,2,rep,name=allow_methods,json=allowMethods,proto3" json:"allow_methods,omitempty"`
+ // List of HTTP headers that can be used when requesting the
+ // resource. Serialized to Access-Control-Allow-Headers header.
+ AllowHeaders []string `protobuf:"bytes,3,rep,name=allow_headers,json=allowHeaders,proto3" json:"allow_headers,omitempty"`
+ // A list of HTTP headers that the browsers are allowed to
+ // access. Serialized into Access-Control-Expose-Headers header.
+ ExposeHeaders []string `protobuf:"bytes,4,rep,name=expose_headers,json=exposeHeaders,proto3" json:"expose_headers,omitempty"`
+ // Specifies how long the results of a preflight request can be
+ // cached. Translates to the `Access-Control-Max-Age` header.
+ MaxAge *duration.Duration `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"`
+ // Indicates whether the caller is allowed to send the actual request
+ // (not the preflight) using credentials. Translates to
+ // `Access-Control-Allow-Credentials` header.
+ AllowCredentials *wrappers.BoolValue `protobuf:"bytes,6,opt,name=allow_credentials,json=allowCredentials,proto3" json:"allow_credentials,omitempty"`
+}
+
+func (x *CorsPolicy) Reset() {
+ *x = CorsPolicy{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *CorsPolicy) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CorsPolicy) ProtoMessage() {}
+
+func (x *CorsPolicy) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[19]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CorsPolicy.ProtoReflect.Descriptor instead.
+func (*CorsPolicy) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{19}
+}
+
+// Deprecated: Do not use.
+func (x *CorsPolicy) GetAllowOrigin() []string {
+ if x != nil {
+ return x.AllowOrigin
+ }
+ return nil
+}
+
+func (x *CorsPolicy) GetAllowOrigins() []*StringMatch {
+ if x != nil {
+ return x.AllowOrigins
+ }
+ return nil
+}
+
+func (x *CorsPolicy) GetAllowMethods() []string {
+ if x != nil {
+ return x.AllowMethods
+ }
+ return nil
+}
+
+func (x *CorsPolicy) GetAllowHeaders() []string {
+ if x != nil {
+ return x.AllowHeaders
+ }
+ return nil
+}
+
+func (x *CorsPolicy) GetExposeHeaders() []string {
+ if x != nil {
+ return x.ExposeHeaders
+ }
+ return nil
+}
+
+func (x *CorsPolicy) GetMaxAge() *duration.Duration {
+ if x != nil {
+ return x.MaxAge
+ }
+ return nil
+}
+
+func (x *CorsPolicy) GetAllowCredentials() *wrappers.BoolValue {
+ if x != nil {
+ return x.AllowCredentials
+ }
+ return nil
+}
+
+// HTTPFaultInjection can be used to specify one or more faults to inject
+// while forwarding HTTP requests to the destination specified in a route.
+// Fault specification is part of a VirtualService rule. Faults include
+// aborting the Http request from downstream service, and/or delaying
+// proxying of requests. A fault rule MUST HAVE delay or abort or both.
+//
+// *Note:* Delay and abort faults are independent of one another, even if
+// both are specified simultaneously.
+type HTTPFaultInjection struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Delay requests before forwarding, emulating various failures such as
+ // network issues, overloaded upstream service, etc.
+ Delay *HTTPFaultInjection_Delay `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"`
+ // Abort Http request attempts and return error codes back to downstream
+ // service, giving the impression that the upstream service is faulty.
+ Abort *HTTPFaultInjection_Abort `protobuf:"bytes,2,opt,name=abort,proto3" json:"abort,omitempty"`
+}
+
+func (x *HTTPFaultInjection) Reset() {
+ *x = HTTPFaultInjection{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPFaultInjection) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPFaultInjection) ProtoMessage() {}
+
+func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[20]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPFaultInjection.ProtoReflect.Descriptor instead.
+func (*HTTPFaultInjection) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *HTTPFaultInjection) GetDelay() *HTTPFaultInjection_Delay {
+ if x != nil {
+ return x.Delay
+ }
+ return nil
+}
+
+func (x *HTTPFaultInjection) GetAbort() *HTTPFaultInjection_Abort {
+ if x != nil {
+ return x.Abort
+ }
+ return nil
+}
+
+// PortSelector specifies the number of a port to be used for
+// matching or selection for final routing.
+type PortSelector struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Valid port number
+ Number uint32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
+}
+
+func (x *PortSelector) Reset() {
+ *x = PortSelector{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *PortSelector) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PortSelector) ProtoMessage() {}
+
+func (x *PortSelector) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[21]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PortSelector.ProtoReflect.Descriptor instead.
+func (*PortSelector) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *PortSelector) GetNumber() uint32 {
+ if x != nil {
+ return x.Number
+ }
+ return 0
+}
+
+// Percent specifies a percentage in the range of [0.0, 100.0].
+type Percent struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *Percent) Reset() {
+ *x = Percent{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Percent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Percent) ProtoMessage() {}
+
+func (x *Percent) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[22]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Percent.ProtoReflect.Descriptor instead.
+func (*Percent) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *Percent) GetValue() float64 {
+ if x != nil {
+ return x.Value
+ }
+ return 0
+}
+
+// HeaderOperations Describes the header manipulations to apply
+type Headers_HeaderOperations struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Overwrite the headers specified by key with the given values
+ Set map[string]string `protobuf:"bytes,1,rep,name=set,proto3" json:"set,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Append the given values to the headers specified by keys
+ // (will create a comma-separated list of values)
+ Add map[string]string `protobuf:"bytes,2,rep,name=add,proto3" json:"add,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Remove the specified headers
+ Remove []string `protobuf:"bytes,3,rep,name=remove,proto3" json:"remove,omitempty"`
+}
+
+func (x *Headers_HeaderOperations) Reset() {
+ *x = Headers_HeaderOperations{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Headers_HeaderOperations) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Headers_HeaderOperations) ProtoMessage() {}
+
+func (x *Headers_HeaderOperations) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[23]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Headers_HeaderOperations.ProtoReflect.Descriptor instead.
+func (*Headers_HeaderOperations) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{4, 0}
+}
+
+func (x *Headers_HeaderOperations) GetSet() map[string]string {
+ if x != nil {
+ return x.Set
+ }
+ return nil
+}
+
+func (x *Headers_HeaderOperations) GetAdd() map[string]string {
+ if x != nil {
+ return x.Add
+ }
+ return nil
+}
+
+func (x *Headers_HeaderOperations) GetRemove() []string {
+ if x != nil {
+ return x.Remove
+ }
+ return nil
+}
+
+// Delay specification is used to inject latency into the request
+// forwarding path. The following example will introduce a 5 second delay
+// in 1 out of every 1000 requests to the "v1" version of the "reviews"
+// service from all pods with label env: prod
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - match:
+// - sourceLabels:
+// env: prod
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// fault:
+// delay:
+// percentage:
+// value: 0.1
+// fixedDelay: 5s
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: reviews-route
+// spec:
+// hosts:
+// - reviews.prod.svc.cluster.local
+// http:
+// - match:
+// - sourceLabels:
+// env: prod
+// route:
+// - destination:
+// host: reviews.prod.svc.cluster.local
+// subset: v1
+// fault:
+// delay:
+// percentage:
+// value: 0.1
+// fixedDelay: 5s
+// ```
+// {{}}
+// {{}}
+//
+// The _fixedDelay_ field is used to indicate the amount of delay in seconds.
+// The optional _percentage_ field can be used to only delay a certain
+// percentage of requests. If left unspecified, no request will be delayed.
+type HTTPFaultInjection_Delay struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Percentage of requests on which the delay will be injected (0-100).
+ // Use of integer `percent` value is deprecated. Use the double `percentage`
+ // field instead.
+ //
+ // Deprecated: Do not use.
+ Percent int32 `protobuf:"varint,1,opt,name=percent,proto3" json:"percent,omitempty"`
+ // Types that are assignable to HttpDelayType:
+ // *HTTPFaultInjection_Delay_FixedDelay
+ // *HTTPFaultInjection_Delay_ExponentialDelay
+ HttpDelayType isHTTPFaultInjection_Delay_HttpDelayType `protobuf_oneof:"http_delay_type"`
+ // Percentage of requests on which the delay will be injected.
+ // If left unspecified, no request will be delayed.
+ Percentage *Percent `protobuf:"bytes,5,opt,name=percentage,proto3" json:"percentage,omitempty"`
+}
+
+func (x *HTTPFaultInjection_Delay) Reset() {
+ *x = HTTPFaultInjection_Delay{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPFaultInjection_Delay) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPFaultInjection_Delay) ProtoMessage() {}
+
+func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[32]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPFaultInjection_Delay.ProtoReflect.Descriptor instead.
+func (*HTTPFaultInjection_Delay) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{20, 0}
+}
+
+// Deprecated: Do not use.
+func (x *HTTPFaultInjection_Delay) GetPercent() int32 {
+ if x != nil {
+ return x.Percent
+ }
+ return 0
+}
+
+func (m *HTTPFaultInjection_Delay) GetHttpDelayType() isHTTPFaultInjection_Delay_HttpDelayType {
+ if m != nil {
+ return m.HttpDelayType
+ }
+ return nil
+}
+
+func (x *HTTPFaultInjection_Delay) GetFixedDelay() *duration.Duration {
+ if x, ok := x.GetHttpDelayType().(*HTTPFaultInjection_Delay_FixedDelay); ok {
+ return x.FixedDelay
+ }
+ return nil
+}
+
+func (x *HTTPFaultInjection_Delay) GetExponentialDelay() *duration.Duration {
+ if x, ok := x.GetHttpDelayType().(*HTTPFaultInjection_Delay_ExponentialDelay); ok {
+ return x.ExponentialDelay
+ }
+ return nil
+}
+
+func (x *HTTPFaultInjection_Delay) GetPercentage() *Percent {
+ if x != nil {
+ return x.Percentage
+ }
+ return nil
+}
+
+type isHTTPFaultInjection_Delay_HttpDelayType interface {
+ isHTTPFaultInjection_Delay_HttpDelayType()
+}
+
+type HTTPFaultInjection_Delay_FixedDelay struct {
+ // Add a fixed delay before forwarding the request. Format:
+ // 1h/1m/1s/1ms. MUST be >=1ms.
+ FixedDelay *duration.Duration `protobuf:"bytes,2,opt,name=fixed_delay,json=fixedDelay,proto3,oneof"`
+}
+
+type HTTPFaultInjection_Delay_ExponentialDelay struct {
+ // $hide_from_docs
+ ExponentialDelay *duration.Duration `protobuf:"bytes,3,opt,name=exponential_delay,json=exponentialDelay,proto3,oneof"`
+}
+
+func (*HTTPFaultInjection_Delay_FixedDelay) isHTTPFaultInjection_Delay_HttpDelayType() {}
+
+func (*HTTPFaultInjection_Delay_ExponentialDelay) isHTTPFaultInjection_Delay_HttpDelayType() {}
+
+// Abort specification is used to prematurely abort a request with a
+// pre-specified error code. The following example will return an HTTP 400
+// error code for 1 out of every 1000 requests to the "ratings" service "v1".
+//
+// {{}}
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1alpha3
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// fault:
+// abort:
+// percentage:
+// value: 0.1
+// httpStatus: 400
+// ```
+// {{}}
+//
+// {{}}
+// ```yaml
+// apiVersion: networking.istio.io/v1beta1
+// kind: VirtualService
+// metadata:
+// name: ratings-route
+// spec:
+// hosts:
+// - ratings.prod.svc.cluster.local
+// http:
+// - route:
+// - destination:
+// host: ratings.prod.svc.cluster.local
+// subset: v1
+// fault:
+// abort:
+// percentage:
+// value: 0.1
+// httpStatus: 400
+// ```
+// {{}}
+// {{}}
+//
+// The _httpStatus_ field is used to indicate the HTTP status code to
+// return to the caller. The optional _percentage_ field can be used to only
+// abort a certain percentage of requests. If not specified, no request will be
+// aborted.
+type HTTPFaultInjection_Abort struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to ErrorType:
+ // *HTTPFaultInjection_Abort_HttpStatus
+ // *HTTPFaultInjection_Abort_GrpcStatus
+ // *HTTPFaultInjection_Abort_Http2Error
+ ErrorType isHTTPFaultInjection_Abort_ErrorType `protobuf_oneof:"error_type"`
+ // Percentage of requests to be aborted with the error code provided.
+ // If not specified, no request will be aborted.
+ Percentage *Percent `protobuf:"bytes,5,opt,name=percentage,proto3" json:"percentage,omitempty"`
+}
+
+func (x *HTTPFaultInjection_Abort) Reset() {
+ *x = HTTPFaultInjection_Abort{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *HTTPFaultInjection_Abort) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HTTPFaultInjection_Abort) ProtoMessage() {}
+
+func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message {
+ mi := &file_traffic_v1alpha1_traffic_router_proto_msgTypes[33]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HTTPFaultInjection_Abort.ProtoReflect.Descriptor instead.
+func (*HTTPFaultInjection_Abort) Descriptor() ([]byte, []int) {
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP(), []int{20, 1}
+}
+
+func (m *HTTPFaultInjection_Abort) GetErrorType() isHTTPFaultInjection_Abort_ErrorType {
+ if m != nil {
+ return m.ErrorType
+ }
+ return nil
+}
+
+func (x *HTTPFaultInjection_Abort) GetHttpStatus() int32 {
+ if x, ok := x.GetErrorType().(*HTTPFaultInjection_Abort_HttpStatus); ok {
+ return x.HttpStatus
+ }
+ return 0
+}
+
+func (x *HTTPFaultInjection_Abort) GetGrpcStatus() string {
+ if x, ok := x.GetErrorType().(*HTTPFaultInjection_Abort_GrpcStatus); ok {
+ return x.GrpcStatus
+ }
+ return ""
+}
+
+func (x *HTTPFaultInjection_Abort) GetHttp2Error() string {
+ if x, ok := x.GetErrorType().(*HTTPFaultInjection_Abort_Http2Error); ok {
+ return x.Http2Error
+ }
+ return ""
+}
+
+func (x *HTTPFaultInjection_Abort) GetPercentage() *Percent {
+ if x != nil {
+ return x.Percentage
+ }
+ return nil
+}
+
+type isHTTPFaultInjection_Abort_ErrorType interface {
+ isHTTPFaultInjection_Abort_ErrorType()
+}
+
+type HTTPFaultInjection_Abort_HttpStatus struct {
+ // HTTP status code to use to abort the Http request.
+ HttpStatus int32 `protobuf:"varint,2,opt,name=http_status,json=httpStatus,proto3,oneof"`
+}
+
+type HTTPFaultInjection_Abort_GrpcStatus struct {
+ // GRPC status code to use to abort the request. The supported
+ // codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
+ // Note: If you want to return the status "Unavailable", then you should
+ // specify the code as `UNAVAILABLE`(all caps), but not `14`.
+ GrpcStatus string `protobuf:"bytes,3,opt,name=grpc_status,json=grpcStatus,proto3,oneof"`
+}
+
+type HTTPFaultInjection_Abort_Http2Error struct {
+ // $hide_from_docs
+ Http2Error string `protobuf:"bytes,4,opt,name=http2_error,json=http2Error,proto3,oneof"`
+}
+
+func (*HTTPFaultInjection_Abort_HttpStatus) isHTTPFaultInjection_Abort_ErrorType() {}
+
+func (*HTTPFaultInjection_Abort_GrpcStatus) isHTTPFaultInjection_Abort_ErrorType() {}
+
+func (*HTTPFaultInjection_Abort_Http2Error) isHTTPFaultInjection_Abort_ErrorType() {}
+
+var File_traffic_v1alpha1_traffic_router_proto protoreflect.FileDescriptor
+
+var file_traffic_v1alpha1_traffic_router_proto_rawDesc = []byte{
+ 0x0a, 0x25, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+ 0x61, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65,
+ 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72,
+ 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+ 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, 0x02, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
+ 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08,
+ 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,
+ 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x39, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70,
+ 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72,
+ 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x04, 0x68,
+ 0x74, 0x74, 0x70, 0x12, 0x36, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x4c,
+ 0x53, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x03, 0x74,
+ 0x63, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73,
+ 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61,
+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x03,
+ 0x74, 0x63, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x6f,
+ 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x6f,
+ 0x22, 0xbe, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x12, 0x17, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03,
+ 0xe0, 0x41, 0x02, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x75, 0x62, 0x73, 0x65,
+ 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66,
+ 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x72,
+ 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12,
+ 0x40, 0x0a, 0x08, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72,
+ 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46,
+ 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x08, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63,
+ 0x6b, 0x22, 0x80, 0x09, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12,
+ 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74,
+ 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+ 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x46, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72,
+ 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73,
+ 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12,
+ 0x44, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72,
+ 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48,
+ 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x64,
+ 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x57, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f,
+ 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e,
+ 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66,
+ 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50,
+ 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0e,
+ 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40,
+ 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65,
+ 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65,
+ 0x12, 0x41, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72,
+ 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48,
+ 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x07, 0x72, 0x65, 0x77, 0x72,
+ 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72,
+ 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e,
+ 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31,
+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79,
+ 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x05, 0x66, 0x61, 0x75,
+ 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73,
+ 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61,
+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49,
+ 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12,
+ 0x3f, 0x0a, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66,
+ 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73,
+ 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72,
+ 0x12, 0x47, 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65,
+ 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
+ 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72,
+ 0x6f, 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x6d, 0x69, 0x72,
+ 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x13,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f,
+ 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+ 0x31, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, 0x69, 0x72, 0x72, 0x6f,
+ 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x63,
+ 0x6f, 0x72, 0x73, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f,
+ 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x73, 0x50, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3d, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18,
+ 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67,
+ 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+ 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x10, 0x52,
+ 0x11, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61,
+ 0x64, 0x65, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65,
+ 0x72, 0x73, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70,
+ 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70,
+ 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x22, 0x3c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65,
+ 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+ 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x22, 0xea, 0x03, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4e,
+ 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66,
+ 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50,
+ 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x1a, 0xbc, 0x02, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74,
+ 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+ 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70,
+ 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x4f, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e,
+ 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+ 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f,
+ 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76,
+ 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a,
+ 0x36, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
+ 0x99, 0x01, 0x0a, 0x08, 0x54, 0x4c, 0x53, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x05,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x6f, 0x70,
+ 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e,
+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63,
+ 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x02,
+ 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x42, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72,
+ 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x08,
+ 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65,
+ 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x42, 0x0a,
+ 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f,
+ 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44,
+ 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74,
+ 0x65, 0x22, 0xd0, 0x09, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x03, 0x75, 0x72,
+ 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65,
+ 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68,
+ 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67,
+ 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+ 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x06,
+ 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72,
+ 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52,
+ 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x45, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65,
+ 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76,
+ 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61,
+ 0x74, 0x63, 0x68, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x53,
+ 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66,
+ 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54,
+ 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x63, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e,
+ 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66,
+ 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50,
+ 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08,
+ 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,
+ 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72,
+ 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d,
+ 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66,
+ 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50,
+ 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65,
+ 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x71,
+ 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x67,
+ 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x0a, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x55, 0x72, 0x69, 0x43, 0x61,
+ 0x73, 0x65, 0x12, 0x69, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65,
+ 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x6f, 0x70,
+ 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e,
+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74,
+ 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75,
+ 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x77,
+ 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a,
+ 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74,
+ 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73,
+ 0x74, 0x61, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x63, 0x0a, 0x0c, 0x48, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65,
+ 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76,
+ 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61,
+ 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f,
+ 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
+ 0x67, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f,
+ 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+ 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x6a, 0x0a, 0x13, 0x57, 0x69, 0x74, 0x68,
+ 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa5, 0x02, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75,
+ 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a,
+ 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74,
+ 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+ 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02,
+ 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a,
+ 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
+ 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72,
+ 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+ 0x68, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x07, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65,
+ 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x3b, 0x0a, 0x08,
+ 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x17, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x68, 0x6f, 0x73,
+ 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x22, 0x7a, 0x0a, 0x10, 0x52, 0x6f, 0x75,
+ 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a,
+ 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74,
+ 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+ 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41, 0x02,
+ 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a,
+ 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77,
+ 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xeb, 0x02, 0x0a, 0x11, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63,
+ 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x64,
+ 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65,
+ 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04,
+ 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74,
+ 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65,
+ 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53,
+ 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x64, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x6f,
+ 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63,
+ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63,
+ 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67,
+ 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67,
+ 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x22, 0xff, 0x02, 0x0a, 0x12, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x6e,
+ 0x69, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0,
+ 0x41, 0x02, 0x52, 0x08, 0x73, 0x6e, 0x69, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x13,
+ 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, 0x6e,
+ 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, 0x0a,
+ 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72,
+ 0x74, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73,
+ 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61,
+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65,
+ 0x77, 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65,
+ 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a,
+ 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73,
+ 0x75, 0x62, 0x6e, 0x65, 0x74, 0x22, 0xd0, 0x02, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65,
+ 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68,
+ 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74,
+ 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x61, 0x0a, 0x0b,
+ 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x3e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72,
+ 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48,
+ 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x64, 0x69,
+ 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12,
+ 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c,
+ 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x15,
+ 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x50, 0x52,
+ 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00,
+ 0x12, 0x15, 0x0a, 0x11, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54,
+ 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x6b, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50,
+ 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b,
+ 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x03,
+ 0xe0, 0x41, 0x02, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x04, 0x62,
+ 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e,
+ 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31,
+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x42, 0x6f, 0x64, 0x79, 0x52,
+ 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x49, 0x0a, 0x08, 0x48, 0x54, 0x54, 0x50, 0x42, 0x6f, 0x64,
+ 0x79, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x05, 0x62,
+ 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x62, 0x79,
+ 0x74, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x22, 0x3d, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12,
+ 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72,
+ 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22,
+ 0x51, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14,
+ 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
+ 0x78, 0x61, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x14, 0x0a, 0x05,
+ 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x67,
+ 0x65, 0x78, 0x22, 0xde, 0x01, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79,
+ 0x12, 0x1f, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74,
+ 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d,
+ 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x54, 0x72, 0x79, 0x54, 0x69, 0x6d,
+ 0x65, 0x6f, 0x75, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x6f, 0x6e,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x12,
+ 0x52, 0x0a, 0x17, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f,
+ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+ 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65,
+ 0x74, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x22, 0xef, 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x12, 0x25, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67,
+ 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x6c, 0x6c,
+ 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61,
+ 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73,
+ 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f,
+ 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x11,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c,
+ 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x93, 0x05, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61,
+ 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x05,
+ 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x70,
+ 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e,
+ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75,
+ 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x61,
+ 0x79, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x62, 0x6f, 0x72,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65,
+ 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+ 0x70, 0x68, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e,
+ 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x61,
+ 0x62, 0x6f, 0x72, 0x74, 0x1a, 0x8a, 0x02, 0x0a, 0x05, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x1c,
+ 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42,
+ 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x0b,
+ 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0, 0x41,
+ 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12,
+ 0x48, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x64,
+ 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
+ 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x65, 0x72,
+ 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
+ 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69,
+ 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65,
+ 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x11,
+ 0x0a, 0x0f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x79, 0x70,
+ 0x65, 0x1a, 0xd7, 0x01, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0b, 0x68,
+ 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
+ 0x42, 0x03, 0xe0, 0x41, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x67, 0x72, 0x70, 0x63,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x32, 0x5f,
+ 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x68,
+ 0x74, 0x74, 0x70, 0x32, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x65, 0x72,
+ 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
+ 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69,
+ 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65,
+ 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, 0x0c,
+ 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08, 0x01,
+ 0x10, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x32, 0x0a, 0x0c, 0x50,
+ 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6e,
+ 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
+ 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x42, 0x23, 0x5a, 0x21, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x69, 0x6f,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x2f, 0x76, 0x31, 0x61,
+ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_traffic_v1alpha1_traffic_router_proto_rawDescOnce sync.Once
+ file_traffic_v1alpha1_traffic_router_proto_rawDescData = file_traffic_v1alpha1_traffic_router_proto_rawDesc
+)
+
+func file_traffic_v1alpha1_traffic_router_proto_rawDescGZIP() []byte {
+ file_traffic_v1alpha1_traffic_router_proto_rawDescOnce.Do(func() {
+ file_traffic_v1alpha1_traffic_router_proto_rawDescData = protoimpl.X.CompressGZIP(file_traffic_v1alpha1_traffic_router_proto_rawDescData)
+ })
+ return file_traffic_v1alpha1_traffic_router_proto_rawDescData
+}
+
+var file_traffic_v1alpha1_traffic_router_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_traffic_v1alpha1_traffic_router_proto_msgTypes = make([]protoimpl.MessageInfo, 34)
+var file_traffic_v1alpha1_traffic_router_proto_goTypes = []interface{}{
+ (HTTPRedirect_RedirectPortSelection)(0), // 0: opensergo.traffic.v1alpha1.HTTPRedirect.RedirectPortSelection
+ (*TrafficRouterSpec)(nil), // 1: opensergo.traffic.v1alpha1.TrafficRouterSpec
+ (*Destination)(nil), // 2: opensergo.traffic.v1alpha1.Destination
+ (*HTTPRoute)(nil), // 3: opensergo.traffic.v1alpha1.HTTPRoute
+ (*Delegate)(nil), // 4: opensergo.traffic.v1alpha1.Delegate
+ (*Headers)(nil), // 5: opensergo.traffic.v1alpha1.Headers
+ (*TLSRoute)(nil), // 6: opensergo.traffic.v1alpha1.TLSRoute
+ (*TCPRoute)(nil), // 7: opensergo.traffic.v1alpha1.TCPRoute
+ (*HTTPMatchRequest)(nil), // 8: opensergo.traffic.v1alpha1.HTTPMatchRequest
+ (*HTTPRouteDestination)(nil), // 9: opensergo.traffic.v1alpha1.HTTPRouteDestination
+ (*Fallback)(nil), // 10: opensergo.traffic.v1alpha1.Fallback
+ (*RouteDestination)(nil), // 11: opensergo.traffic.v1alpha1.RouteDestination
+ (*L4MatchAttributes)(nil), // 12: opensergo.traffic.v1alpha1.L4MatchAttributes
+ (*TLSMatchAttributes)(nil), // 13: opensergo.traffic.v1alpha1.TLSMatchAttributes
+ (*HTTPRedirect)(nil), // 14: opensergo.traffic.v1alpha1.HTTPRedirect
+ (*HTTPDirectResponse)(nil), // 15: opensergo.traffic.v1alpha1.HTTPDirectResponse
+ (*HTTPBody)(nil), // 16: opensergo.traffic.v1alpha1.HTTPBody
+ (*HTTPRewrite)(nil), // 17: opensergo.traffic.v1alpha1.HTTPRewrite
+ (*StringMatch)(nil), // 18: opensergo.traffic.v1alpha1.StringMatch
+ (*HTTPRetry)(nil), // 19: opensergo.traffic.v1alpha1.HTTPRetry
+ (*CorsPolicy)(nil), // 20: opensergo.traffic.v1alpha1.CorsPolicy
+ (*HTTPFaultInjection)(nil), // 21: opensergo.traffic.v1alpha1.HTTPFaultInjection
+ (*PortSelector)(nil), // 22: opensergo.traffic.v1alpha1.PortSelector
+ (*Percent)(nil), // 23: opensergo.traffic.v1alpha1.Percent
+ (*Headers_HeaderOperations)(nil), // 24: opensergo.traffic.v1alpha1.Headers.HeaderOperations
+ nil, // 25: opensergo.traffic.v1alpha1.Headers.HeaderOperations.SetEntry
+ nil, // 26: opensergo.traffic.v1alpha1.Headers.HeaderOperations.AddEntry
+ nil, // 27: opensergo.traffic.v1alpha1.HTTPMatchRequest.HeadersEntry
+ nil, // 28: opensergo.traffic.v1alpha1.HTTPMatchRequest.SourceLabelsEntry
+ nil, // 29: opensergo.traffic.v1alpha1.HTTPMatchRequest.QueryParamsEntry
+ nil, // 30: opensergo.traffic.v1alpha1.HTTPMatchRequest.WithoutHeadersEntry
+ nil, // 31: opensergo.traffic.v1alpha1.L4MatchAttributes.SourceLabelsEntry
+ nil, // 32: opensergo.traffic.v1alpha1.TLSMatchAttributes.SourceLabelsEntry
+ (*HTTPFaultInjection_Delay)(nil), // 33: opensergo.traffic.v1alpha1.HTTPFaultInjection.Delay
+ (*HTTPFaultInjection_Abort)(nil), // 34: opensergo.traffic.v1alpha1.HTTPFaultInjection.Abort
+ (*duration.Duration)(nil), // 35: google.protobuf.Duration
+ (*wrappers.UInt32Value)(nil), // 36: google.protobuf.UInt32Value
+ (*wrappers.BoolValue)(nil), // 37: google.protobuf.BoolValue
+}
+var file_traffic_v1alpha1_traffic_router_proto_depIdxs = []int32{
+ 3, // 0: opensergo.traffic.v1alpha1.TrafficRouterSpec.http:type_name -> opensergo.traffic.v1alpha1.HTTPRoute
+ 6, // 1: opensergo.traffic.v1alpha1.TrafficRouterSpec.tls:type_name -> opensergo.traffic.v1alpha1.TLSRoute
+ 7, // 2: opensergo.traffic.v1alpha1.TrafficRouterSpec.tcp:type_name -> opensergo.traffic.v1alpha1.TCPRoute
+ 22, // 3: opensergo.traffic.v1alpha1.Destination.port:type_name -> opensergo.traffic.v1alpha1.PortSelector
+ 10, // 4: opensergo.traffic.v1alpha1.Destination.fallback:type_name -> opensergo.traffic.v1alpha1.Fallback
+ 8, // 5: opensergo.traffic.v1alpha1.HTTPRoute.match:type_name -> opensergo.traffic.v1alpha1.HTTPMatchRequest
+ 9, // 6: opensergo.traffic.v1alpha1.HTTPRoute.route:type_name -> opensergo.traffic.v1alpha1.HTTPRouteDestination
+ 14, // 7: opensergo.traffic.v1alpha1.HTTPRoute.redirect:type_name -> opensergo.traffic.v1alpha1.HTTPRedirect
+ 15, // 8: opensergo.traffic.v1alpha1.HTTPRoute.direct_response:type_name -> opensergo.traffic.v1alpha1.HTTPDirectResponse
+ 4, // 9: opensergo.traffic.v1alpha1.HTTPRoute.delegate:type_name -> opensergo.traffic.v1alpha1.Delegate
+ 17, // 10: opensergo.traffic.v1alpha1.HTTPRoute.rewrite:type_name -> opensergo.traffic.v1alpha1.HTTPRewrite
+ 35, // 11: opensergo.traffic.v1alpha1.HTTPRoute.timeout:type_name -> google.protobuf.Duration
+ 19, // 12: opensergo.traffic.v1alpha1.HTTPRoute.retries:type_name -> opensergo.traffic.v1alpha1.HTTPRetry
+ 21, // 13: opensergo.traffic.v1alpha1.HTTPRoute.fault:type_name -> opensergo.traffic.v1alpha1.HTTPFaultInjection
+ 2, // 14: opensergo.traffic.v1alpha1.HTTPRoute.mirror:type_name -> opensergo.traffic.v1alpha1.Destination
+ 36, // 15: opensergo.traffic.v1alpha1.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value
+ 23, // 16: opensergo.traffic.v1alpha1.HTTPRoute.mirror_percentage:type_name -> opensergo.traffic.v1alpha1.Percent
+ 20, // 17: opensergo.traffic.v1alpha1.HTTPRoute.cors_policy:type_name -> opensergo.traffic.v1alpha1.CorsPolicy
+ 5, // 18: opensergo.traffic.v1alpha1.HTTPRoute.headers:type_name -> opensergo.traffic.v1alpha1.Headers
+ 24, // 19: opensergo.traffic.v1alpha1.Headers.request:type_name -> opensergo.traffic.v1alpha1.Headers.HeaderOperations
+ 24, // 20: opensergo.traffic.v1alpha1.Headers.response:type_name -> opensergo.traffic.v1alpha1.Headers.HeaderOperations
+ 13, // 21: opensergo.traffic.v1alpha1.TLSRoute.match:type_name -> opensergo.traffic.v1alpha1.TLSMatchAttributes
+ 11, // 22: opensergo.traffic.v1alpha1.TLSRoute.route:type_name -> opensergo.traffic.v1alpha1.RouteDestination
+ 12, // 23: opensergo.traffic.v1alpha1.TCPRoute.match:type_name -> opensergo.traffic.v1alpha1.L4MatchAttributes
+ 11, // 24: opensergo.traffic.v1alpha1.TCPRoute.route:type_name -> opensergo.traffic.v1alpha1.RouteDestination
+ 18, // 25: opensergo.traffic.v1alpha1.HTTPMatchRequest.uri:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 18, // 26: opensergo.traffic.v1alpha1.HTTPMatchRequest.scheme:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 18, // 27: opensergo.traffic.v1alpha1.HTTPMatchRequest.method:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 18, // 28: opensergo.traffic.v1alpha1.HTTPMatchRequest.authority:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 27, // 29: opensergo.traffic.v1alpha1.HTTPMatchRequest.headers:type_name -> opensergo.traffic.v1alpha1.HTTPMatchRequest.HeadersEntry
+ 28, // 30: opensergo.traffic.v1alpha1.HTTPMatchRequest.source_labels:type_name -> opensergo.traffic.v1alpha1.HTTPMatchRequest.SourceLabelsEntry
+ 29, // 31: opensergo.traffic.v1alpha1.HTTPMatchRequest.query_params:type_name -> opensergo.traffic.v1alpha1.HTTPMatchRequest.QueryParamsEntry
+ 30, // 32: opensergo.traffic.v1alpha1.HTTPMatchRequest.without_headers:type_name -> opensergo.traffic.v1alpha1.HTTPMatchRequest.WithoutHeadersEntry
+ 2, // 33: opensergo.traffic.v1alpha1.HTTPRouteDestination.destination:type_name -> opensergo.traffic.v1alpha1.Destination
+ 5, // 34: opensergo.traffic.v1alpha1.HTTPRouteDestination.headers:type_name -> opensergo.traffic.v1alpha1.Headers
+ 2, // 35: opensergo.traffic.v1alpha1.RouteDestination.destination:type_name -> opensergo.traffic.v1alpha1.Destination
+ 31, // 36: opensergo.traffic.v1alpha1.L4MatchAttributes.source_labels:type_name -> opensergo.traffic.v1alpha1.L4MatchAttributes.SourceLabelsEntry
+ 32, // 37: opensergo.traffic.v1alpha1.TLSMatchAttributes.source_labels:type_name -> opensergo.traffic.v1alpha1.TLSMatchAttributes.SourceLabelsEntry
+ 0, // 38: opensergo.traffic.v1alpha1.HTTPRedirect.derive_port:type_name -> opensergo.traffic.v1alpha1.HTTPRedirect.RedirectPortSelection
+ 16, // 39: opensergo.traffic.v1alpha1.HTTPDirectResponse.body:type_name -> opensergo.traffic.v1alpha1.HTTPBody
+ 35, // 40: opensergo.traffic.v1alpha1.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration
+ 37, // 41: opensergo.traffic.v1alpha1.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue
+ 18, // 42: opensergo.traffic.v1alpha1.CorsPolicy.allow_origins:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 35, // 43: opensergo.traffic.v1alpha1.CorsPolicy.max_age:type_name -> google.protobuf.Duration
+ 37, // 44: opensergo.traffic.v1alpha1.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue
+ 33, // 45: opensergo.traffic.v1alpha1.HTTPFaultInjection.delay:type_name -> opensergo.traffic.v1alpha1.HTTPFaultInjection.Delay
+ 34, // 46: opensergo.traffic.v1alpha1.HTTPFaultInjection.abort:type_name -> opensergo.traffic.v1alpha1.HTTPFaultInjection.Abort
+ 25, // 47: opensergo.traffic.v1alpha1.Headers.HeaderOperations.set:type_name -> opensergo.traffic.v1alpha1.Headers.HeaderOperations.SetEntry
+ 26, // 48: opensergo.traffic.v1alpha1.Headers.HeaderOperations.add:type_name -> opensergo.traffic.v1alpha1.Headers.HeaderOperations.AddEntry
+ 18, // 49: opensergo.traffic.v1alpha1.HTTPMatchRequest.HeadersEntry.value:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 18, // 50: opensergo.traffic.v1alpha1.HTTPMatchRequest.QueryParamsEntry.value:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 18, // 51: opensergo.traffic.v1alpha1.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> opensergo.traffic.v1alpha1.StringMatch
+ 35, // 52: opensergo.traffic.v1alpha1.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration
+ 35, // 53: opensergo.traffic.v1alpha1.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration
+ 23, // 54: opensergo.traffic.v1alpha1.HTTPFaultInjection.Delay.percentage:type_name -> opensergo.traffic.v1alpha1.Percent
+ 23, // 55: opensergo.traffic.v1alpha1.HTTPFaultInjection.Abort.percentage:type_name -> opensergo.traffic.v1alpha1.Percent
+ 56, // [56:56] is the sub-list for method output_type
+ 56, // [56:56] is the sub-list for method input_type
+ 56, // [56:56] is the sub-list for extension type_name
+ 56, // [56:56] is the sub-list for extension extendee
+ 0, // [0:56] is the sub-list for field type_name
+}
+
+func init() { file_traffic_v1alpha1_traffic_router_proto_init() }
+func file_traffic_v1alpha1_traffic_router_proto_init() {
+ if File_traffic_v1alpha1_traffic_router_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*TrafficRouterSpec); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Destination); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPRoute); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Delegate); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Headers); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*TLSRoute); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*TCPRoute); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPMatchRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPRouteDestination); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Fallback); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RouteDestination); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*L4MatchAttributes); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*TLSMatchAttributes); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPRedirect); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPDirectResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPBody); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPRewrite); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StringMatch); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPRetry); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*CorsPolicy); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPFaultInjection); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*PortSelector); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Percent); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Headers_HeaderOperations); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPFaultInjection_Delay); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*HTTPFaultInjection_Abort); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[13].OneofWrappers = []interface{}{
+ (*HTTPRedirect_Port)(nil),
+ (*HTTPRedirect_DerivePort)(nil),
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[15].OneofWrappers = []interface{}{
+ (*HTTPBody_String_)(nil),
+ (*HTTPBody_Bytes)(nil),
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[32].OneofWrappers = []interface{}{
+ (*HTTPFaultInjection_Delay_FixedDelay)(nil),
+ (*HTTPFaultInjection_Delay_ExponentialDelay)(nil),
+ }
+ file_traffic_v1alpha1_traffic_router_proto_msgTypes[33].OneofWrappers = []interface{}{
+ (*HTTPFaultInjection_Abort_HttpStatus)(nil),
+ (*HTTPFaultInjection_Abort_GrpcStatus)(nil),
+ (*HTTPFaultInjection_Abort_Http2Error)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_traffic_v1alpha1_traffic_router_proto_rawDesc,
+ NumEnums: 1,
+ NumMessages: 34,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_traffic_v1alpha1_traffic_router_proto_goTypes,
+ DependencyIndexes: file_traffic_v1alpha1_traffic_router_proto_depIdxs,
+ EnumInfos: file_traffic_v1alpha1_traffic_router_proto_enumTypes,
+ MessageInfos: file_traffic_v1alpha1_traffic_router_proto_msgTypes,
+ }.Build()
+ File_traffic_v1alpha1_traffic_router_proto = out.File
+ file_traffic_v1alpha1_traffic_router_proto_rawDesc = nil
+ file_traffic_v1alpha1_traffic_router_proto_goTypes = nil
+ file_traffic_v1alpha1_traffic_router_proto_depIdxs = nil
+}
diff --git a/pkg/api/v1alpha1/traffic/traffic_router_deepcopy.pb.go b/pkg/api/v1alpha1/traffic/traffic_router_deepcopy.pb.go
new file mode 100644
index 0000000..dd425c6
--- /dev/null
+++ b/pkg/api/v1alpha1/traffic/traffic_router_deepcopy.pb.go
@@ -0,0 +1,490 @@
+// Code generated by protoc-gen-deepcopy. DO NOT EDIT.
+
+package traffic
+
+import (
+ proto "google.golang.org/protobuf/proto"
+)
+
+// DeepCopyInto supports using TrafficRouterSpec within kubernetes types, where deepcopy-gen is used.
+func (in *TrafficRouterSpec) DeepCopyInto(out *TrafficRouterSpec) {
+ p := proto.Clone(in).(*TrafficRouterSpec)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRouterSpec. Required by controller-gen.
+func (in *TrafficRouterSpec) DeepCopy() *TrafficRouterSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(TrafficRouterSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRouterSpec. Required by controller-gen.
+func (in *TrafficRouterSpec) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using Destination within kubernetes types, where deepcopy-gen is used.
+func (in *Destination) DeepCopyInto(out *Destination) {
+ p := proto.Clone(in).(*Destination)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Destination. Required by controller-gen.
+func (in *Destination) DeepCopy() *Destination {
+ if in == nil {
+ return nil
+ }
+ out := new(Destination)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Destination. Required by controller-gen.
+func (in *Destination) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPRoute within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPRoute) DeepCopyInto(out *HTTPRoute) {
+ p := proto.Clone(in).(*HTTPRoute)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRoute. Required by controller-gen.
+func (in *HTTPRoute) DeepCopy() *HTTPRoute {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPRoute)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRoute. Required by controller-gen.
+func (in *HTTPRoute) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using Delegate within kubernetes types, where deepcopy-gen is used.
+func (in *Delegate) DeepCopyInto(out *Delegate) {
+ p := proto.Clone(in).(*Delegate)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Delegate. Required by controller-gen.
+func (in *Delegate) DeepCopy() *Delegate {
+ if in == nil {
+ return nil
+ }
+ out := new(Delegate)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Delegate. Required by controller-gen.
+func (in *Delegate) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using Headers within kubernetes types, where deepcopy-gen is used.
+func (in *Headers) DeepCopyInto(out *Headers) {
+ p := proto.Clone(in).(*Headers)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Headers. Required by controller-gen.
+func (in *Headers) DeepCopy() *Headers {
+ if in == nil {
+ return nil
+ }
+ out := new(Headers)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Headers. Required by controller-gen.
+func (in *Headers) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using TLSRoute within kubernetes types, where deepcopy-gen is used.
+func (in *TLSRoute) DeepCopyInto(out *TLSRoute) {
+ p := proto.Clone(in).(*TLSRoute)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSRoute. Required by controller-gen.
+func (in *TLSRoute) DeepCopy() *TLSRoute {
+ if in == nil {
+ return nil
+ }
+ out := new(TLSRoute)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new TLSRoute. Required by controller-gen.
+func (in *TLSRoute) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using TCPRoute within kubernetes types, where deepcopy-gen is used.
+func (in *TCPRoute) DeepCopyInto(out *TCPRoute) {
+ p := proto.Clone(in).(*TCPRoute)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TCPRoute. Required by controller-gen.
+func (in *TCPRoute) DeepCopy() *TCPRoute {
+ if in == nil {
+ return nil
+ }
+ out := new(TCPRoute)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new TCPRoute. Required by controller-gen.
+func (in *TCPRoute) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPMatchRequest within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPMatchRequest) DeepCopyInto(out *HTTPMatchRequest) {
+ p := proto.Clone(in).(*HTTPMatchRequest)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPMatchRequest. Required by controller-gen.
+func (in *HTTPMatchRequest) DeepCopy() *HTTPMatchRequest {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPMatchRequest)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPMatchRequest. Required by controller-gen.
+func (in *HTTPMatchRequest) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPRouteDestination within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPRouteDestination) DeepCopyInto(out *HTTPRouteDestination) {
+ p := proto.Clone(in).(*HTTPRouteDestination)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRouteDestination. Required by controller-gen.
+func (in *HTTPRouteDestination) DeepCopy() *HTTPRouteDestination {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPRouteDestination)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRouteDestination. Required by controller-gen.
+func (in *HTTPRouteDestination) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using Fallback within kubernetes types, where deepcopy-gen is used.
+func (in *Fallback) DeepCopyInto(out *Fallback) {
+ p := proto.Clone(in).(*Fallback)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Fallback. Required by controller-gen.
+func (in *Fallback) DeepCopy() *Fallback {
+ if in == nil {
+ return nil
+ }
+ out := new(Fallback)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Fallback. Required by controller-gen.
+func (in *Fallback) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using RouteDestination within kubernetes types, where deepcopy-gen is used.
+func (in *RouteDestination) DeepCopyInto(out *RouteDestination) {
+ p := proto.Clone(in).(*RouteDestination)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteDestination. Required by controller-gen.
+func (in *RouteDestination) DeepCopy() *RouteDestination {
+ if in == nil {
+ return nil
+ }
+ out := new(RouteDestination)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new RouteDestination. Required by controller-gen.
+func (in *RouteDestination) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using L4MatchAttributes within kubernetes types, where deepcopy-gen is used.
+func (in *L4MatchAttributes) DeepCopyInto(out *L4MatchAttributes) {
+ p := proto.Clone(in).(*L4MatchAttributes)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L4MatchAttributes. Required by controller-gen.
+func (in *L4MatchAttributes) DeepCopy() *L4MatchAttributes {
+ if in == nil {
+ return nil
+ }
+ out := new(L4MatchAttributes)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new L4MatchAttributes. Required by controller-gen.
+func (in *L4MatchAttributes) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using TLSMatchAttributes within kubernetes types, where deepcopy-gen is used.
+func (in *TLSMatchAttributes) DeepCopyInto(out *TLSMatchAttributes) {
+ p := proto.Clone(in).(*TLSMatchAttributes)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSMatchAttributes. Required by controller-gen.
+func (in *TLSMatchAttributes) DeepCopy() *TLSMatchAttributes {
+ if in == nil {
+ return nil
+ }
+ out := new(TLSMatchAttributes)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new TLSMatchAttributes. Required by controller-gen.
+func (in *TLSMatchAttributes) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPRedirect within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPRedirect) DeepCopyInto(out *HTTPRedirect) {
+ p := proto.Clone(in).(*HTTPRedirect)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRedirect. Required by controller-gen.
+func (in *HTTPRedirect) DeepCopy() *HTTPRedirect {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPRedirect)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRedirect. Required by controller-gen.
+func (in *HTTPRedirect) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPDirectResponse within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPDirectResponse) DeepCopyInto(out *HTTPDirectResponse) {
+ p := proto.Clone(in).(*HTTPDirectResponse)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPDirectResponse. Required by controller-gen.
+func (in *HTTPDirectResponse) DeepCopy() *HTTPDirectResponse {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPDirectResponse)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPDirectResponse. Required by controller-gen.
+func (in *HTTPDirectResponse) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPBody within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPBody) DeepCopyInto(out *HTTPBody) {
+ p := proto.Clone(in).(*HTTPBody)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPBody. Required by controller-gen.
+func (in *HTTPBody) DeepCopy() *HTTPBody {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPBody)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPBody. Required by controller-gen.
+func (in *HTTPBody) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPRewrite within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPRewrite) DeepCopyInto(out *HTTPRewrite) {
+ p := proto.Clone(in).(*HTTPRewrite)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRewrite. Required by controller-gen.
+func (in *HTTPRewrite) DeepCopy() *HTTPRewrite {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPRewrite)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRewrite. Required by controller-gen.
+func (in *HTTPRewrite) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using StringMatch within kubernetes types, where deepcopy-gen is used.
+func (in *StringMatch) DeepCopyInto(out *StringMatch) {
+ p := proto.Clone(in).(*StringMatch)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StringMatch. Required by controller-gen.
+func (in *StringMatch) DeepCopy() *StringMatch {
+ if in == nil {
+ return nil
+ }
+ out := new(StringMatch)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new StringMatch. Required by controller-gen.
+func (in *StringMatch) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPRetry within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPRetry) DeepCopyInto(out *HTTPRetry) {
+ p := proto.Clone(in).(*HTTPRetry)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRetry. Required by controller-gen.
+func (in *HTTPRetry) DeepCopy() *HTTPRetry {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPRetry)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRetry. Required by controller-gen.
+func (in *HTTPRetry) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using CorsPolicy within kubernetes types, where deepcopy-gen is used.
+func (in *CorsPolicy) DeepCopyInto(out *CorsPolicy) {
+ p := proto.Clone(in).(*CorsPolicy)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CorsPolicy. Required by controller-gen.
+func (in *CorsPolicy) DeepCopy() *CorsPolicy {
+ if in == nil {
+ return nil
+ }
+ out := new(CorsPolicy)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new CorsPolicy. Required by controller-gen.
+func (in *CorsPolicy) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using HTTPFaultInjection within kubernetes types, where deepcopy-gen is used.
+func (in *HTTPFaultInjection) DeepCopyInto(out *HTTPFaultInjection) {
+ p := proto.Clone(in).(*HTTPFaultInjection)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPFaultInjection. Required by controller-gen.
+func (in *HTTPFaultInjection) DeepCopy() *HTTPFaultInjection {
+ if in == nil {
+ return nil
+ }
+ out := new(HTTPFaultInjection)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPFaultInjection. Required by controller-gen.
+func (in *HTTPFaultInjection) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using PortSelector within kubernetes types, where deepcopy-gen is used.
+func (in *PortSelector) DeepCopyInto(out *PortSelector) {
+ p := proto.Clone(in).(*PortSelector)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortSelector. Required by controller-gen.
+func (in *PortSelector) DeepCopy() *PortSelector {
+ if in == nil {
+ return nil
+ }
+ out := new(PortSelector)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new PortSelector. Required by controller-gen.
+func (in *PortSelector) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
+
+// DeepCopyInto supports using Percent within kubernetes types, where deepcopy-gen is used.
+func (in *Percent) DeepCopyInto(out *Percent) {
+ p := proto.Clone(in).(*Percent)
+ *out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Percent. Required by controller-gen.
+func (in *Percent) DeepCopy() *Percent {
+ if in == nil {
+ return nil
+ }
+ out := new(Percent)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new Percent. Required by controller-gen.
+func (in *Percent) DeepCopyInterface() interface{} {
+ return in.DeepCopy()
+}
diff --git a/pkg/api/v1alpha1/traffic/zz_generated.deepcopy.go b/pkg/api/v1alpha1/traffic/zz_generated.deepcopy.go
new file mode 100644
index 0000000..311bff3
--- /dev/null
+++ b/pkg/api/v1alpha1/traffic/zz_generated.deepcopy.go
@@ -0,0 +1,83 @@
+//go:build !ignore_autogenerated
+// +build !ignore_autogenerated
+
+/*
+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.
+*/
+
+// Code generated by controller-gen. DO NOT EDIT.
+
+package traffic
+
+import (
+ runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficRouter) DeepCopyInto(out *TrafficRouter) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+ in.Spec.DeepCopyInto(&out.Spec)
+ out.Status = in.Status
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRouterRule.
+func (in *TrafficRouter) DeepCopy() *TrafficRouter {
+ if in == nil {
+ return nil
+ }
+ out := new(TrafficRouter)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficRouter) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TrafficRouterList) DeepCopyInto(out *TrafficRouterList) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ListMeta.DeepCopyInto(&out.ListMeta)
+ if in.Items != nil {
+ in, out := &in.Items, &out.Items
+ *out = make([]TrafficRouter, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficRouterRuleList.
+func (in *TrafficRouterList) DeepCopy() *TrafficRouterList {
+ if in == nil {
+ return nil
+ }
+ out := new(TrafficRouterList)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *TrafficRouterList) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
diff --git a/pkg/controller/crd_meta.go b/pkg/controller/crd_meta.go
index 8d437f5..859de32 100644
--- a/pkg/controller/crd_meta.go
+++ b/pkg/controller/crd_meta.go
@@ -16,6 +16,7 @@ package controller
import (
"github.com/opensergo/opensergo-control-plane/pkg/api/v1alpha1"
+ "github.com/opensergo/opensergo-control-plane/pkg/api/v1alpha1/traffic"
"sigs.k8s.io/controller-runtime/pkg/client"
)
@@ -51,6 +52,7 @@ const (
ThrottlingStrategyKind = "fault-tolerance.opensergo.io/v1alpha1/ThrottlingStrategy"
ConcurrencyLimitStrategyKind = "fault-tolerance.opensergo.io/v1alpha1/ConcurrencyLimitStrategy"
CircuitBreakerStrategyKind = "fault-tolerance.opensergo.io/v1alpha1/CircuitBreakerStrategy"
+ TrafficRouterKind = "traffic.opensergo.io/v1alpha1/TrafficRouter"
)
var (
@@ -71,6 +73,9 @@ var (
CircuitBreakerStrategyKind: NewCRDMetadata(CircuitBreakerStrategyKind, func() client.Object {
return &v1alpha1.CircuitBreakerStrategy{}
}),
+ TrafficRouterKind: NewCRDMetadata(TrafficRouterKind, func() client.Object {
+ return &traffic.TrafficRouter{}
+ }),
}
)
diff --git a/pkg/controller/crd_watcher.go b/pkg/controller/crd_watcher.go
index 6316ffb..cff50bc 100644
--- a/pkg/controller/crd_watcher.go
+++ b/pkg/controller/crd_watcher.go
@@ -23,6 +23,7 @@ import (
"github.com/go-logr/logr"
crdv1alpha1 "github.com/opensergo/opensergo-control-plane/pkg/api/v1alpha1"
+ crdv1alpha1traffic "github.com/opensergo/opensergo-control-plane/pkg/api/v1alpha1/traffic"
"github.com/opensergo/opensergo-control-plane/pkg/model"
pb "github.com/opensergo/opensergo-control-plane/pkg/proto/fault_tolerance/v1"
trpb "github.com/opensergo/opensergo-control-plane/pkg/proto/transport/v1"
@@ -314,6 +315,9 @@ func (r *CRDWatcher) translateCrdToProto(object client.Object) (*anypb.Any, erro
LimitMode: util.Str2LimitNode(cls.Spec.LimitMode),
MaxConcurrency: cls.Spec.MaxConcurrencyThreshold,
}
+ case TrafficRouterKind:
+ cls := object.(*crdv1alpha1traffic.TrafficRouter)
+ rule = BuildRouteConfiguration(cls)
default:
return nil, nil
}
diff --git a/pkg/controller/k8s_operator.go b/pkg/controller/k8s_operator.go
index 96f628e..8ae15ad 100644
--- a/pkg/controller/k8s_operator.go
+++ b/pkg/controller/k8s_operator.go
@@ -22,6 +22,7 @@ import (
"github.com/alibaba/sentinel-golang/logging"
"github.com/alibaba/sentinel-golang/util"
crdv1alpha1 "github.com/opensergo/opensergo-control-plane/pkg/api/v1alpha1"
+ crdv1alpha1traffic "github.com/opensergo/opensergo-control-plane/pkg/api/v1alpha1/traffic"
"github.com/opensergo/opensergo-control-plane/pkg/model"
"github.com/pkg/errors"
"k8s.io/apimachinery/pkg/runtime"
@@ -41,6 +42,9 @@ func init() {
_ = crdv1alpha1.AddToScheme(scheme)
// +kubebuilder:scaffold:scheme
+
+ _ = crdv1alpha1traffic.AddToScheme(scheme)
+ // +kubebuilder:scaffold:scheme
}
type CRDType int32
diff --git a/pkg/controller/traffic_router_transform.go b/pkg/controller/traffic_router_transform.go
new file mode 100644
index 0000000..144c7b5
--- /dev/null
+++ b/pkg/controller/traffic_router_transform.go
@@ -0,0 +1,204 @@
+// Copyright 2022, OpenSergo Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package controller
+
+import (
+ corev3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
+ routev3 "github.com/envoyproxy/go-control-plane/envoy/config/route/v3"
+ matcherv3 "github.com/envoyproxy/go-control-plane/envoy/type/matcher/v3"
+ "github.com/golang/protobuf/ptypes/wrappers"
+ "github.com/opensergo/opensergo-control-plane/pkg/api/v1alpha1/traffic"
+ route "github.com/opensergo/opensergo-control-plane/pkg/proto/router/v1"
+ "github.com/opensergo/opensergo-control-plane/pkg/util"
+)
+
+const (
+ EXTENSION_ROUTE_FALL_BACK = "envoy.router.cluster_specifier_plugin.cluster_fallback"
+)
+
+// BuildRouteConfiguration for Istio RouteConfiguration
+func BuildRouteConfiguration(cls *traffic.TrafficRouter) *routev3.RouteConfiguration {
+ virtualHost := &routev3.VirtualHost{
+ Name: cls.Name,
+ Routes: []*routev3.Route{},
+ }
+ virtualHost.Routes = append(virtualHost.Routes, buildHTTPRoutes(cls)...)
+ for _, domain := range cls.Spec.Hosts {
+ virtualHost.Domains = append(virtualHost.Domains, buildFQDN(domain, cls.Namespace))
+ }
+ rule := &routev3.RouteConfiguration{
+ Name: cls.Name,
+ VirtualHosts: []*routev3.VirtualHost{virtualHost},
+ }
+ return rule
+}
+
+func buildHTTPRoutes(tr *traffic.TrafficRouter) []*routev3.Route {
+ var routes []*routev3.Route
+ for _, httpRoute := range tr.Spec.Http {
+ r := &routev3.Route{
+ Match: &routev3.RouteMatch{
+ Headers: buildHeaderMatchers(httpRoute.Match),
+ QueryParameters: buildParamMatchers(httpRoute.Match),
+ },
+ Action: &routev3.Route_Route{
+ Route: buildRouteAction(httpRoute, tr),
+ },
+ }
+ routes = append(routes, r)
+ }
+ return routes
+}
+
+func buildUnweightedRouteAction(destination *traffic.HTTPRouteDestination, vs *traffic.TrafficRouter) *routev3.RouteAction {
+ if destination.Destination.Fallback != nil {
+ return &routev3.RouteAction{
+ ClusterSpecifier: &routev3.RouteAction_InlineClusterSpecifierPlugin{
+ InlineClusterSpecifierPlugin: buildClusterSpecifierPlugin(true, buildClusterFallbackConfig(buildRouteActionCluster(destination.Destination.Host, vs.Namespace, destination.Destination.Subset), buildRouterFallbackActionCluster(destination.Destination.Fallback, vs.Namespace))),
+ },
+ }
+ } else {
+ return &routev3.RouteAction{
+ ClusterSpecifier: &routev3.RouteAction_Cluster{Cluster: buildRouteActionCluster(destination.Destination.Host, vs.Namespace, destination.Destination.Subset)},
+ }
+ }
+}
+
+func buildWeightedRouteAction(destinations []*traffic.HTTPRouteDestination, vs *traffic.TrafficRouter) *routev3.RouteAction {
+ return &routev3.RouteAction{
+ ClusterSpecifier: &routev3.RouteAction_WeightedClusters{
+ WeightedClusters: &routev3.WeightedCluster{
+ Clusters: buildWeightedClusters(vs.Namespace, destinations),
+ },
+ },
+ }
+}
+
+func buildWeightedClusters(namespace string, destinations []*traffic.HTTPRouteDestination) []*routev3.WeightedCluster_ClusterWeight {
+ var weightedClusters []*routev3.WeightedCluster_ClusterWeight
+ for _, destination := range destinations {
+ w := &routev3.WeightedCluster_ClusterWeight{
+ Name: buildRouteActionCluster(destination.Destination.Host, namespace, destination.Destination.Subset),
+ Weight: &wrappers.UInt32Value{Value: uint32(destination.Weight)},
+ }
+ weightedClusters = append(weightedClusters, w)
+ }
+ return weightedClusters
+}
+
+func buildRouteAction(httpRoute *traffic.HTTPRoute, vs *traffic.TrafficRouter) *routev3.RouteAction {
+ if len(httpRoute.Route) == 1 {
+ // unweighted
+ return buildUnweightedRouteAction(httpRoute.Route[0], vs)
+ } else {
+ // weighted
+ return buildWeightedRouteAction(httpRoute.Route, vs)
+ }
+}
+
+func buildRouterFallbackActionCluster(fallback *traffic.Fallback, namespace string) string {
+ if fallback == nil {
+ return ""
+ }
+
+ return buildRouteActionCluster(fallback.Host, namespace, fallback.Subset)
+}
+
+func buildClusterFallbackConfig(cluster string, fallbackCluster string) *route.ClusterFallbackConfig_ClusterConfig {
+ return &route.ClusterFallbackConfig_ClusterConfig{
+ RoutingCluster: cluster,
+ FallbackCluster: fallbackCluster,
+ }
+}
+
+func buildClusterSpecifierPlugin(isSupport bool, config *route.ClusterFallbackConfig_ClusterConfig) *routev3.ClusterSpecifierPlugin {
+ if !isSupport || config == nil {
+ return nil
+ }
+
+ return &routev3.ClusterSpecifierPlugin{
+ Extension: &corev3.TypedExtensionConfig{
+ Name: EXTENSION_ROUTE_FALL_BACK,
+ TypedConfig: util.MessageToAny(config),
+ },
+ }
+}
+
+func buildRouteActionCluster(serviceName, namespace, version string) string {
+ return "outbound|" + "|" + version + "|" + buildFQDN(serviceName, namespace)
+}
+
+func buildParamMatchers(matches []*traffic.HTTPMatchRequest) []*routev3.QueryParameterMatcher {
+ var queryParamMatchers []*routev3.QueryParameterMatcher
+ for _, match := range matches {
+ for _, matcher := range match.QueryParams {
+ queryMatcher := &routev3.QueryParameterMatcher{}
+ if matcher.GetRegex() != "" {
+ queryMatcher.QueryParameterMatchSpecifier = &routev3.QueryParameterMatcher_StringMatch{
+ StringMatch: &matcherv3.StringMatcher{
+ MatchPattern: &matcherv3.StringMatcher_SafeRegex{
+ SafeRegex: &matcherv3.RegexMatcher{
+ Regex: matcher.GetRegex(),
+ },
+ },
+ }}
+ }
+ if matcher.GetPrefix() != "" {
+ queryMatcher.QueryParameterMatchSpecifier = &routev3.QueryParameterMatcher_StringMatch{
+ StringMatch: &matcherv3.StringMatcher{
+ MatchPattern: &matcherv3.StringMatcher_Prefix{
+ Prefix: matcher.GetPrefix(),
+ },
+ }}
+ }
+ if matcher.GetExact() != "" {
+ queryMatcher.QueryParameterMatchSpecifier = &routev3.QueryParameterMatcher_StringMatch{
+ StringMatch: &matcherv3.StringMatcher{
+ MatchPattern: &matcherv3.StringMatcher_Exact{
+ Exact: matcher.GetExact(),
+ },
+ }}
+ }
+ queryParamMatchers = append(queryParamMatchers, queryMatcher)
+ }
+ }
+ return queryParamMatchers
+}
+
+func buildHeaderMatchers(matches []*traffic.HTTPMatchRequest) []*routev3.HeaderMatcher {
+ var headerMatchers []*routev3.HeaderMatcher
+ for _, match := range matches {
+ for key, matcher := range match.Headers {
+ headerMatcher := &routev3.HeaderMatcher{
+ Name: key,
+ }
+ if matcher.GetRegex() != "" {
+ headerMatcher.HeaderMatchSpecifier = &routev3.HeaderMatcher_SafeRegexMatch{SafeRegexMatch: &matcherv3.RegexMatcher{Regex: matcher.GetRegex()}}
+ }
+ if matcher.GetPrefix() != "" {
+ headerMatcher.HeaderMatchSpecifier = &routev3.HeaderMatcher_PrefixMatch{PrefixMatch: matcher.GetPrefix()}
+ }
+ if matcher.GetExact() != "" {
+ headerMatcher.HeaderMatchSpecifier = &routev3.HeaderMatcher_ExactMatch{ExactMatch: matcher.GetExact()}
+ }
+ headerMatchers = append(headerMatchers, headerMatcher)
+ }
+ }
+ return headerMatchers
+}
+
+func buildFQDN(serviceName, namespace string) string {
+ return serviceName + "." + namespace + ".svc.cluster.local"
+}
diff --git a/pkg/proto/router/v1/route_fallback.pb.go b/pkg/proto/router/v1/route_fallback.pb.go
new file mode 100644
index 0000000..01acc89
--- /dev/null
+++ b/pkg/proto/router/v1/route_fallback.pb.go
@@ -0,0 +1,177 @@
+// Copyright 2022, OpenSergo Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.28.1
+// protoc v3.19.4
+// source: route_fallback.proto
+
+package v1
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type ClusterFallbackConfig_ClusterConfig struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ RoutingCluster string `protobuf:"bytes,1,opt,name=RoutingCluster,proto3" json:"RoutingCluster,omitempty"`
+ FallbackCluster string `protobuf:"bytes,2,opt,name=FallbackCluster,proto3" json:"FallbackCluster,omitempty"`
+}
+
+func (x *ClusterFallbackConfig_ClusterConfig) Reset() {
+ *x = ClusterFallbackConfig_ClusterConfig{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_route_fallback_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ClusterFallbackConfig_ClusterConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ClusterFallbackConfig_ClusterConfig) ProtoMessage() {}
+
+func (x *ClusterFallbackConfig_ClusterConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_route_fallback_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ClusterFallbackConfig_ClusterConfig.ProtoReflect.Descriptor instead.
+func (*ClusterFallbackConfig_ClusterConfig) Descriptor() ([]byte, []int) {
+ return file_route_fallback_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *ClusterFallbackConfig_ClusterConfig) GetRoutingCluster() string {
+ if x != nil {
+ return x.RoutingCluster
+ }
+ return ""
+}
+
+func (x *ClusterFallbackConfig_ClusterConfig) GetFallbackCluster() string {
+ if x != nil {
+ return x.FallbackCluster
+ }
+ return ""
+}
+
+var File_route_fallback_proto protoreflect.FileDescriptor
+
+var file_route_fallback_proto_rawDesc = []byte{
+ 0x0a, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73,
+ 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
+ 0x72, 0x2e, 0x76, 0x31, 0x22, 0x77, 0x0a, 0x23, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x46,
+ 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x43, 0x6c,
+ 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x52,
+ 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6c, 0x75, 0x73,
+ 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x43,
+ 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x46, 0x61,
+ 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x77, 0x0a,
+ 0x1c, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x4f,
+ 0x70, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x67, 0x6f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72,
+ 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2f, 0x6f,
+ 0x70, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x67, 0x6f, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+ 0x2d, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x6f, 0x75,
+ 0x74, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_route_fallback_proto_rawDescOnce sync.Once
+ file_route_fallback_proto_rawDescData = file_route_fallback_proto_rawDesc
+)
+
+func file_route_fallback_proto_rawDescGZIP() []byte {
+ file_route_fallback_proto_rawDescOnce.Do(func() {
+ file_route_fallback_proto_rawDescData = protoimpl.X.CompressGZIP(file_route_fallback_proto_rawDescData)
+ })
+ return file_route_fallback_proto_rawDescData
+}
+
+var file_route_fallback_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_route_fallback_proto_goTypes = []interface{}{
+ (*ClusterFallbackConfig_ClusterConfig)(nil), // 0: io.opensergo.proto.router.v1.ClusterFallbackConfig_ClusterConfig
+}
+var file_route_fallback_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_route_fallback_proto_init() }
+func file_route_fallback_proto_init() {
+ if File_route_fallback_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_route_fallback_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ClusterFallbackConfig_ClusterConfig); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_route_fallback_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_route_fallback_proto_goTypes,
+ DependencyIndexes: file_route_fallback_proto_depIdxs,
+ MessageInfos: file_route_fallback_proto_msgTypes,
+ }.Build()
+ File_route_fallback_proto = out.File
+ file_route_fallback_proto_rawDesc = nil
+ file_route_fallback_proto_goTypes = nil
+ file_route_fallback_proto_depIdxs = nil
+}
diff --git a/pkg/proto/router/v1/route_fallback.proto b/pkg/proto/router/v1/route_fallback.proto
new file mode 100644
index 0000000..2d83e86
--- /dev/null
+++ b/pkg/proto/router/v1/route_fallback.proto
@@ -0,0 +1,28 @@
+// Copyright 2022, OpenSergo Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package io.opensergo.proto.router.v1;
+
+option java_package = "io.opensergo.proto.router.v1";
+option java_outer_classname = "OpenSergoTransportProto";
+option java_multiple_files = true;
+option go_package = "github.com/opensergo/opensergo-control-plane/proto/router/v1";
+
+
+message ClusterFallbackConfig_ClusterConfig {
+ string RoutingCluster = 1;
+ string FallbackCluster = 2;
+}
\ No newline at end of file
diff --git a/pkg/proto/validate/v1/validate.pb.go b/pkg/proto/validate/v1/validate.pb.go
deleted file mode 100644
index 10dedda..0000000
--- a/pkg/proto/validate/v1/validate.pb.go
+++ /dev/null
@@ -1,4104 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// protoc-gen-go v1.28.0
-// protoc v3.19.4
-// source: validate/v1/validate.proto
-
-package v1
-
-import (
- protoreflect "google.golang.org/protobuf/reflect/protoreflect"
- protoimpl "google.golang.org/protobuf/runtime/protoimpl"
- descriptorpb "google.golang.org/protobuf/types/descriptorpb"
- durationpb "google.golang.org/protobuf/types/known/durationpb"
- timestamppb "google.golang.org/protobuf/types/known/timestamppb"
- reflect "reflect"
- sync "sync"
-)
-
-const (
- // Verify that this generated code is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
- // Verify that runtime/protoimpl is sufficiently up-to-date.
- _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-// WellKnownRegex contain some well-known patterns.
-type KnownRegex int32
-
-const (
- KnownRegex_UNKNOWN KnownRegex = 0
- // HTTP header name as defined by RFC 7230.
- KnownRegex_HTTP_HEADER_NAME KnownRegex = 1
- // HTTP header value as defined by RFC 7230.
- KnownRegex_HTTP_HEADER_VALUE KnownRegex = 2
-)
-
-// Enum value maps for KnownRegex.
-var (
- KnownRegex_name = map[int32]string{
- 0: "UNKNOWN",
- 1: "HTTP_HEADER_NAME",
- 2: "HTTP_HEADER_VALUE",
- }
- KnownRegex_value = map[string]int32{
- "UNKNOWN": 0,
- "HTTP_HEADER_NAME": 1,
- "HTTP_HEADER_VALUE": 2,
- }
-)
-
-func (x KnownRegex) Enum() *KnownRegex {
- p := new(KnownRegex)
- *p = x
- return p
-}
-
-func (x KnownRegex) String() string {
- return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (KnownRegex) Descriptor() protoreflect.EnumDescriptor {
- return file_validate_v1_validate_proto_enumTypes[0].Descriptor()
-}
-
-func (KnownRegex) Type() protoreflect.EnumType {
- return &file_validate_v1_validate_proto_enumTypes[0]
-}
-
-func (x KnownRegex) Number() protoreflect.EnumNumber {
- return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Do not use.
-func (x *KnownRegex) UnmarshalJSON(b []byte) error {
- num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
- if err != nil {
- return err
- }
- *x = KnownRegex(num)
- return nil
-}
-
-// Deprecated: Use KnownRegex.Descriptor instead.
-func (KnownRegex) EnumDescriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{0}
-}
-
-// FieldRules encapsulates the rules for each type of field. Depending on the
-// field, the correct set should be used to ensure proper validations.
-type FieldRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- Message *MessageRules `protobuf:"bytes,17,opt,name=message" json:"message,omitempty"`
- // Types that are assignable to Type:
- // *FieldRules_Float
- // *FieldRules_Double
- // *FieldRules_Int32
- // *FieldRules_Int64
- // *FieldRules_Uint32
- // *FieldRules_Uint64
- // *FieldRules_Sint32
- // *FieldRules_Sint64
- // *FieldRules_Fixed32
- // *FieldRules_Fixed64
- // *FieldRules_Sfixed32
- // *FieldRules_Sfixed64
- // *FieldRules_Bool
- // *FieldRules_String_
- // *FieldRules_Bytes
- // *FieldRules_Enum
- // *FieldRules_Repeated
- // *FieldRules_Map
- // *FieldRules_Any
- // *FieldRules_Duration
- // *FieldRules_Timestamp
- Type isFieldRules_Type `protobuf_oneof:"type"`
-}
-
-func (x *FieldRules) Reset() {
- *x = FieldRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[0]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *FieldRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*FieldRules) ProtoMessage() {}
-
-func (x *FieldRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[0]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use FieldRules.ProtoReflect.Descriptor instead.
-func (*FieldRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *FieldRules) GetMessage() *MessageRules {
- if x != nil {
- return x.Message
- }
- return nil
-}
-
-func (m *FieldRules) GetType() isFieldRules_Type {
- if m != nil {
- return m.Type
- }
- return nil
-}
-
-func (x *FieldRules) GetFloat() *FloatRules {
- if x, ok := x.GetType().(*FieldRules_Float); ok {
- return x.Float
- }
- return nil
-}
-
-func (x *FieldRules) GetDouble() *DoubleRules {
- if x, ok := x.GetType().(*FieldRules_Double); ok {
- return x.Double
- }
- return nil
-}
-
-func (x *FieldRules) GetInt32() *Int32Rules {
- if x, ok := x.GetType().(*FieldRules_Int32); ok {
- return x.Int32
- }
- return nil
-}
-
-func (x *FieldRules) GetInt64() *Int64Rules {
- if x, ok := x.GetType().(*FieldRules_Int64); ok {
- return x.Int64
- }
- return nil
-}
-
-func (x *FieldRules) GetUint32() *UInt32Rules {
- if x, ok := x.GetType().(*FieldRules_Uint32); ok {
- return x.Uint32
- }
- return nil
-}
-
-func (x *FieldRules) GetUint64() *UInt64Rules {
- if x, ok := x.GetType().(*FieldRules_Uint64); ok {
- return x.Uint64
- }
- return nil
-}
-
-func (x *FieldRules) GetSint32() *SInt32Rules {
- if x, ok := x.GetType().(*FieldRules_Sint32); ok {
- return x.Sint32
- }
- return nil
-}
-
-func (x *FieldRules) GetSint64() *SInt64Rules {
- if x, ok := x.GetType().(*FieldRules_Sint64); ok {
- return x.Sint64
- }
- return nil
-}
-
-func (x *FieldRules) GetFixed32() *Fixed32Rules {
- if x, ok := x.GetType().(*FieldRules_Fixed32); ok {
- return x.Fixed32
- }
- return nil
-}
-
-func (x *FieldRules) GetFixed64() *Fixed64Rules {
- if x, ok := x.GetType().(*FieldRules_Fixed64); ok {
- return x.Fixed64
- }
- return nil
-}
-
-func (x *FieldRules) GetSfixed32() *SFixed32Rules {
- if x, ok := x.GetType().(*FieldRules_Sfixed32); ok {
- return x.Sfixed32
- }
- return nil
-}
-
-func (x *FieldRules) GetSfixed64() *SFixed64Rules {
- if x, ok := x.GetType().(*FieldRules_Sfixed64); ok {
- return x.Sfixed64
- }
- return nil
-}
-
-func (x *FieldRules) GetBool() *BoolRules {
- if x, ok := x.GetType().(*FieldRules_Bool); ok {
- return x.Bool
- }
- return nil
-}
-
-func (x *FieldRules) GetString_() *StringRules {
- if x, ok := x.GetType().(*FieldRules_String_); ok {
- return x.String_
- }
- return nil
-}
-
-func (x *FieldRules) GetBytes() *BytesRules {
- if x, ok := x.GetType().(*FieldRules_Bytes); ok {
- return x.Bytes
- }
- return nil
-}
-
-func (x *FieldRules) GetEnum() *EnumRules {
- if x, ok := x.GetType().(*FieldRules_Enum); ok {
- return x.Enum
- }
- return nil
-}
-
-func (x *FieldRules) GetRepeated() *RepeatedRules {
- if x, ok := x.GetType().(*FieldRules_Repeated); ok {
- return x.Repeated
- }
- return nil
-}
-
-func (x *FieldRules) GetMap() *MapRules {
- if x, ok := x.GetType().(*FieldRules_Map); ok {
- return x.Map
- }
- return nil
-}
-
-func (x *FieldRules) GetAny() *AnyRules {
- if x, ok := x.GetType().(*FieldRules_Any); ok {
- return x.Any
- }
- return nil
-}
-
-func (x *FieldRules) GetDuration() *DurationRules {
- if x, ok := x.GetType().(*FieldRules_Duration); ok {
- return x.Duration
- }
- return nil
-}
-
-func (x *FieldRules) GetTimestamp() *TimestampRules {
- if x, ok := x.GetType().(*FieldRules_Timestamp); ok {
- return x.Timestamp
- }
- return nil
-}
-
-type isFieldRules_Type interface {
- isFieldRules_Type()
-}
-
-type FieldRules_Float struct {
- // Scalar Field Types
- Float *FloatRules `protobuf:"bytes,1,opt,name=float,oneof"`
-}
-
-type FieldRules_Double struct {
- Double *DoubleRules `protobuf:"bytes,2,opt,name=double,oneof"`
-}
-
-type FieldRules_Int32 struct {
- Int32 *Int32Rules `protobuf:"bytes,3,opt,name=int32,oneof"`
-}
-
-type FieldRules_Int64 struct {
- Int64 *Int64Rules `protobuf:"bytes,4,opt,name=int64,oneof"`
-}
-
-type FieldRules_Uint32 struct {
- Uint32 *UInt32Rules `protobuf:"bytes,5,opt,name=uint32,oneof"`
-}
-
-type FieldRules_Uint64 struct {
- Uint64 *UInt64Rules `protobuf:"bytes,6,opt,name=uint64,oneof"`
-}
-
-type FieldRules_Sint32 struct {
- Sint32 *SInt32Rules `protobuf:"bytes,7,opt,name=sint32,oneof"`
-}
-
-type FieldRules_Sint64 struct {
- Sint64 *SInt64Rules `protobuf:"bytes,8,opt,name=sint64,oneof"`
-}
-
-type FieldRules_Fixed32 struct {
- Fixed32 *Fixed32Rules `protobuf:"bytes,9,opt,name=fixed32,oneof"`
-}
-
-type FieldRules_Fixed64 struct {
- Fixed64 *Fixed64Rules `protobuf:"bytes,10,opt,name=fixed64,oneof"`
-}
-
-type FieldRules_Sfixed32 struct {
- Sfixed32 *SFixed32Rules `protobuf:"bytes,11,opt,name=sfixed32,oneof"`
-}
-
-type FieldRules_Sfixed64 struct {
- Sfixed64 *SFixed64Rules `protobuf:"bytes,12,opt,name=sfixed64,oneof"`
-}
-
-type FieldRules_Bool struct {
- Bool *BoolRules `protobuf:"bytes,13,opt,name=bool,oneof"`
-}
-
-type FieldRules_String_ struct {
- String_ *StringRules `protobuf:"bytes,14,opt,name=string,oneof"`
-}
-
-type FieldRules_Bytes struct {
- Bytes *BytesRules `protobuf:"bytes,15,opt,name=bytes,oneof"`
-}
-
-type FieldRules_Enum struct {
- // Complex Field Types
- Enum *EnumRules `protobuf:"bytes,16,opt,name=enum,oneof"`
-}
-
-type FieldRules_Repeated struct {
- Repeated *RepeatedRules `protobuf:"bytes,18,opt,name=repeated,oneof"`
-}
-
-type FieldRules_Map struct {
- Map *MapRules `protobuf:"bytes,19,opt,name=map,oneof"`
-}
-
-type FieldRules_Any struct {
- // Well-Known Field Types
- Any *AnyRules `protobuf:"bytes,20,opt,name=any,oneof"`
-}
-
-type FieldRules_Duration struct {
- Duration *DurationRules `protobuf:"bytes,21,opt,name=duration,oneof"`
-}
-
-type FieldRules_Timestamp struct {
- Timestamp *TimestampRules `protobuf:"bytes,22,opt,name=timestamp,oneof"`
-}
-
-func (*FieldRules_Float) isFieldRules_Type() {}
-
-func (*FieldRules_Double) isFieldRules_Type() {}
-
-func (*FieldRules_Int32) isFieldRules_Type() {}
-
-func (*FieldRules_Int64) isFieldRules_Type() {}
-
-func (*FieldRules_Uint32) isFieldRules_Type() {}
-
-func (*FieldRules_Uint64) isFieldRules_Type() {}
-
-func (*FieldRules_Sint32) isFieldRules_Type() {}
-
-func (*FieldRules_Sint64) isFieldRules_Type() {}
-
-func (*FieldRules_Fixed32) isFieldRules_Type() {}
-
-func (*FieldRules_Fixed64) isFieldRules_Type() {}
-
-func (*FieldRules_Sfixed32) isFieldRules_Type() {}
-
-func (*FieldRules_Sfixed64) isFieldRules_Type() {}
-
-func (*FieldRules_Bool) isFieldRules_Type() {}
-
-func (*FieldRules_String_) isFieldRules_Type() {}
-
-func (*FieldRules_Bytes) isFieldRules_Type() {}
-
-func (*FieldRules_Enum) isFieldRules_Type() {}
-
-func (*FieldRules_Repeated) isFieldRules_Type() {}
-
-func (*FieldRules_Map) isFieldRules_Type() {}
-
-func (*FieldRules_Any) isFieldRules_Type() {}
-
-func (*FieldRules_Duration) isFieldRules_Type() {}
-
-func (*FieldRules_Timestamp) isFieldRules_Type() {}
-
-// FloatRules describes the constraints applied to `float` values
-type FloatRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *float32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *float32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *float32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *float32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *float32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []float32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []float32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *FloatRules) Reset() {
- *x = FloatRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[1]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *FloatRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*FloatRules) ProtoMessage() {}
-
-func (x *FloatRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[1]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use FloatRules.ProtoReflect.Descriptor instead.
-func (*FloatRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *FloatRules) GetConst() float32 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *FloatRules) GetLt() float32 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *FloatRules) GetLte() float32 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *FloatRules) GetGt() float32 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *FloatRules) GetGte() float32 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *FloatRules) GetIn() []float32 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *FloatRules) GetNotIn() []float32 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *FloatRules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// DoubleRules describes the constraints applied to `double` values
-type DoubleRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *float64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *float64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *float64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *float64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *float64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []float64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []float64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *DoubleRules) Reset() {
- *x = DoubleRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[2]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *DoubleRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DoubleRules) ProtoMessage() {}
-
-func (x *DoubleRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[2]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use DoubleRules.ProtoReflect.Descriptor instead.
-func (*DoubleRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *DoubleRules) GetConst() float64 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *DoubleRules) GetLt() float64 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *DoubleRules) GetLte() float64 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *DoubleRules) GetGt() float64 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *DoubleRules) GetGte() float64 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *DoubleRules) GetIn() []float64 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *DoubleRules) GetNotIn() []float64 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *DoubleRules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// Int32Rules describes the constraints applied to `int32` values
-type Int32Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *int32 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *int32 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *int32 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *int32 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []int32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []int32 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *Int32Rules) Reset() {
- *x = Int32Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Int32Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Int32Rules) ProtoMessage() {}
-
-func (x *Int32Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Int32Rules.ProtoReflect.Descriptor instead.
-func (*Int32Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *Int32Rules) GetConst() int32 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *Int32Rules) GetLt() int32 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *Int32Rules) GetLte() int32 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *Int32Rules) GetGt() int32 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *Int32Rules) GetGte() int32 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *Int32Rules) GetIn() []int32 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *Int32Rules) GetNotIn() []int32 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *Int32Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// Int64Rules describes the constraints applied to `int64` values
-type Int64Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *int64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *int64 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *int64 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *int64 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *int64 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []int64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []int64 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *Int64Rules) Reset() {
- *x = Int64Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Int64Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Int64Rules) ProtoMessage() {}
-
-func (x *Int64Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Int64Rules.ProtoReflect.Descriptor instead.
-func (*Int64Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *Int64Rules) GetConst() int64 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *Int64Rules) GetLt() int64 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *Int64Rules) GetLte() int64 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *Int64Rules) GetGt() int64 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *Int64Rules) GetGte() int64 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *Int64Rules) GetIn() []int64 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *Int64Rules) GetNotIn() []int64 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *Int64Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// UInt32Rules describes the constraints applied to `uint32` values
-type UInt32Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *uint32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *uint32 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *uint32 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *uint32 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *uint32 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []uint32 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []uint32 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *UInt32Rules) Reset() {
- *x = UInt32Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *UInt32Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UInt32Rules) ProtoMessage() {}
-
-func (x *UInt32Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use UInt32Rules.ProtoReflect.Descriptor instead.
-func (*UInt32Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *UInt32Rules) GetConst() uint32 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *UInt32Rules) GetLt() uint32 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *UInt32Rules) GetLte() uint32 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *UInt32Rules) GetGt() uint32 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *UInt32Rules) GetGte() uint32 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *UInt32Rules) GetIn() []uint32 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *UInt32Rules) GetNotIn() []uint32 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *UInt32Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// UInt64Rules describes the constraints applied to `uint64` values
-type UInt64Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *uint64 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *uint64 `protobuf:"varint,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *uint64 `protobuf:"varint,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *uint64 `protobuf:"varint,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *uint64 `protobuf:"varint,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []uint64 `protobuf:"varint,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []uint64 `protobuf:"varint,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *UInt64Rules) Reset() {
- *x = UInt64Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[6]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *UInt64Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UInt64Rules) ProtoMessage() {}
-
-func (x *UInt64Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[6]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use UInt64Rules.ProtoReflect.Descriptor instead.
-func (*UInt64Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *UInt64Rules) GetConst() uint64 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *UInt64Rules) GetLt() uint64 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *UInt64Rules) GetLte() uint64 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *UInt64Rules) GetGt() uint64 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *UInt64Rules) GetGte() uint64 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *UInt64Rules) GetIn() []uint64 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *UInt64Rules) GetNotIn() []uint64 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *UInt64Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// SInt32Rules describes the constraints applied to `sint32` values
-type SInt32Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *int32 `protobuf:"zigzag32,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *int32 `protobuf:"zigzag32,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *int32 `protobuf:"zigzag32,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *int32 `protobuf:"zigzag32,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *int32 `protobuf:"zigzag32,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []int32 `protobuf:"zigzag32,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []int32 `protobuf:"zigzag32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *SInt32Rules) Reset() {
- *x = SInt32Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[7]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *SInt32Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SInt32Rules) ProtoMessage() {}
-
-func (x *SInt32Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[7]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use SInt32Rules.ProtoReflect.Descriptor instead.
-func (*SInt32Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *SInt32Rules) GetConst() int32 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *SInt32Rules) GetLt() int32 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *SInt32Rules) GetLte() int32 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *SInt32Rules) GetGt() int32 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *SInt32Rules) GetGte() int32 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *SInt32Rules) GetIn() []int32 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *SInt32Rules) GetNotIn() []int32 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *SInt32Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// SInt64Rules describes the constraints applied to `sint64` values
-type SInt64Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *int64 `protobuf:"zigzag64,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *int64 `protobuf:"zigzag64,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *int64 `protobuf:"zigzag64,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *int64 `protobuf:"zigzag64,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *int64 `protobuf:"zigzag64,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []int64 `protobuf:"zigzag64,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []int64 `protobuf:"zigzag64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *SInt64Rules) Reset() {
- *x = SInt64Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[8]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *SInt64Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SInt64Rules) ProtoMessage() {}
-
-func (x *SInt64Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[8]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use SInt64Rules.ProtoReflect.Descriptor instead.
-func (*SInt64Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *SInt64Rules) GetConst() int64 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *SInt64Rules) GetLt() int64 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *SInt64Rules) GetLte() int64 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *SInt64Rules) GetGt() int64 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *SInt64Rules) GetGte() int64 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *SInt64Rules) GetIn() []int64 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *SInt64Rules) GetNotIn() []int64 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *SInt64Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// Fixed32Rules describes the constraints applied to `fixed32` values
-type Fixed32Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *uint32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *uint32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *uint32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *uint32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *uint32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []uint32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []uint32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *Fixed32Rules) Reset() {
- *x = Fixed32Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[9]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Fixed32Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Fixed32Rules) ProtoMessage() {}
-
-func (x *Fixed32Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[9]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Fixed32Rules.ProtoReflect.Descriptor instead.
-func (*Fixed32Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{9}
-}
-
-func (x *Fixed32Rules) GetConst() uint32 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *Fixed32Rules) GetLt() uint32 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *Fixed32Rules) GetLte() uint32 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *Fixed32Rules) GetGt() uint32 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *Fixed32Rules) GetGte() uint32 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *Fixed32Rules) GetIn() []uint32 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *Fixed32Rules) GetNotIn() []uint32 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *Fixed32Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// Fixed64Rules describes the constraints applied to `fixed64` values
-type Fixed64Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *uint64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *uint64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *uint64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *uint64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *uint64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []uint64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []uint64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *Fixed64Rules) Reset() {
- *x = Fixed64Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[10]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *Fixed64Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Fixed64Rules) ProtoMessage() {}
-
-func (x *Fixed64Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[10]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use Fixed64Rules.ProtoReflect.Descriptor instead.
-func (*Fixed64Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{10}
-}
-
-func (x *Fixed64Rules) GetConst() uint64 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *Fixed64Rules) GetLt() uint64 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *Fixed64Rules) GetLte() uint64 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *Fixed64Rules) GetGt() uint64 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *Fixed64Rules) GetGte() uint64 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *Fixed64Rules) GetIn() []uint64 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *Fixed64Rules) GetNotIn() []uint64 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *Fixed64Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// SFixed32Rules describes the constraints applied to `sfixed32` values
-type SFixed32Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *int32 `protobuf:"fixed32,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *int32 `protobuf:"fixed32,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *int32 `protobuf:"fixed32,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *int32 `protobuf:"fixed32,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *int32 `protobuf:"fixed32,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []int32 `protobuf:"fixed32,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []int32 `protobuf:"fixed32,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *SFixed32Rules) Reset() {
- *x = SFixed32Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[11]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *SFixed32Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SFixed32Rules) ProtoMessage() {}
-
-func (x *SFixed32Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[11]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use SFixed32Rules.ProtoReflect.Descriptor instead.
-func (*SFixed32Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{11}
-}
-
-func (x *SFixed32Rules) GetConst() int32 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *SFixed32Rules) GetLt() int32 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *SFixed32Rules) GetLte() int32 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *SFixed32Rules) GetGt() int32 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *SFixed32Rules) GetGte() int32 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *SFixed32Rules) GetIn() []int32 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *SFixed32Rules) GetNotIn() []int32 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *SFixed32Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// SFixed64Rules describes the constraints applied to `sfixed64` values
-type SFixed64Rules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *int64 `protobuf:"fixed64,1,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *int64 `protobuf:"fixed64,2,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- Lte *int64 `protobuf:"fixed64,3,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- Gt *int64 `protobuf:"fixed64,4,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- Gte *int64 `protobuf:"fixed64,5,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []int64 `protobuf:"fixed64,6,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []int64 `protobuf:"fixed64,7,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,8,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *SFixed64Rules) Reset() {
- *x = SFixed64Rules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[12]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *SFixed64Rules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SFixed64Rules) ProtoMessage() {}
-
-func (x *SFixed64Rules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[12]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use SFixed64Rules.ProtoReflect.Descriptor instead.
-func (*SFixed64Rules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{12}
-}
-
-func (x *SFixed64Rules) GetConst() int64 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *SFixed64Rules) GetLt() int64 {
- if x != nil && x.Lt != nil {
- return *x.Lt
- }
- return 0
-}
-
-func (x *SFixed64Rules) GetLte() int64 {
- if x != nil && x.Lte != nil {
- return *x.Lte
- }
- return 0
-}
-
-func (x *SFixed64Rules) GetGt() int64 {
- if x != nil && x.Gt != nil {
- return *x.Gt
- }
- return 0
-}
-
-func (x *SFixed64Rules) GetGte() int64 {
- if x != nil && x.Gte != nil {
- return *x.Gte
- }
- return 0
-}
-
-func (x *SFixed64Rules) GetIn() []int64 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *SFixed64Rules) GetNotIn() []int64 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (x *SFixed64Rules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// BoolRules describes the constraints applied to `bool` values
-type BoolRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *bool `protobuf:"varint,1,opt,name=const" json:"const,omitempty"`
-}
-
-func (x *BoolRules) Reset() {
- *x = BoolRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[13]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *BoolRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BoolRules) ProtoMessage() {}
-
-func (x *BoolRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[13]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use BoolRules.ProtoReflect.Descriptor instead.
-func (*BoolRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{13}
-}
-
-func (x *BoolRules) GetConst() bool {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return false
-}
-
-// StringRules describe the constraints applied to `string` values
-type StringRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *string `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"`
- // Len specifies that this field must be the specified number of
- // characters (Unicode code points). Note that the number of
- // characters may differ from the number of bytes in the string.
- Len *uint64 `protobuf:"varint,19,opt,name=len" json:"len,omitempty"`
- // MinLen specifies that this field must be the specified number of
- // characters (Unicode code points) at a minimum. Note that the number of
- // characters may differ from the number of bytes in the string.
- MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"`
- // MaxLen specifies that this field must be the specified number of
- // characters (Unicode code points) at a maximum. Note that the number of
- // characters may differ from the number of bytes in the string.
- MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"`
- // LenBytes specifies that this field must be the specified number of bytes
- LenBytes *uint64 `protobuf:"varint,20,opt,name=len_bytes,json=lenBytes" json:"len_bytes,omitempty"`
- // MinBytes specifies that this field must be the specified number of bytes
- // at a minimum
- MinBytes *uint64 `protobuf:"varint,4,opt,name=min_bytes,json=minBytes" json:"min_bytes,omitempty"`
- // MaxBytes specifies that this field must be the specified number of bytes
- // at a maximum
- MaxBytes *uint64 `protobuf:"varint,5,opt,name=max_bytes,json=maxBytes" json:"max_bytes,omitempty"`
- // Pattern specifes that this field must match against the specified
- // regular expression (RE2 syntax). The included expression should elide
- // any delimiters.
- Pattern *string `protobuf:"bytes,6,opt,name=pattern" json:"pattern,omitempty"`
- // Prefix specifies that this field must have the specified substring at
- // the beginning of the string.
- Prefix *string `protobuf:"bytes,7,opt,name=prefix" json:"prefix,omitempty"`
- // Suffix specifies that this field must have the specified substring at
- // the end of the string.
- Suffix *string `protobuf:"bytes,8,opt,name=suffix" json:"suffix,omitempty"`
- // Contains specifies that this field must have the specified substring
- // anywhere in the string.
- Contains *string `protobuf:"bytes,9,opt,name=contains" json:"contains,omitempty"`
- // NotContains specifies that this field cannot have the specified substring
- // anywhere in the string.
- NotContains *string `protobuf:"bytes,23,opt,name=not_contains,json=notContains" json:"not_contains,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []string `protobuf:"bytes,10,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []string `protobuf:"bytes,11,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // WellKnown rules provide advanced constraints against common string
- // patterns
- //
- // Types that are assignable to WellKnown:
- // *StringRules_Email
- // *StringRules_Hostname
- // *StringRules_Ip
- // *StringRules_Ipv4
- // *StringRules_Ipv6
- // *StringRules_Uri
- // *StringRules_UriRef
- // *StringRules_Address
- // *StringRules_Uuid
- // *StringRules_WellKnownRegex
- WellKnown isStringRules_WellKnown `protobuf_oneof:"well_known"`
- // 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.
- // Setting to false will enable a looser validations that only disallows
- // \r\n\0 characters, which can be used to bypass header matching rules.
- Strict *bool `protobuf:"varint,25,opt,name=strict,def=1" json:"strict,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,26,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-// Default values for StringRules fields.
-const (
- Default_StringRules_Strict = bool(true)
-)
-
-func (x *StringRules) Reset() {
- *x = StringRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[14]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *StringRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*StringRules) ProtoMessage() {}
-
-func (x *StringRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[14]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use StringRules.ProtoReflect.Descriptor instead.
-func (*StringRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{14}
-}
-
-func (x *StringRules) GetConst() string {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return ""
-}
-
-func (x *StringRules) GetLen() uint64 {
- if x != nil && x.Len != nil {
- return *x.Len
- }
- return 0
-}
-
-func (x *StringRules) GetMinLen() uint64 {
- if x != nil && x.MinLen != nil {
- return *x.MinLen
- }
- return 0
-}
-
-func (x *StringRules) GetMaxLen() uint64 {
- if x != nil && x.MaxLen != nil {
- return *x.MaxLen
- }
- return 0
-}
-
-func (x *StringRules) GetLenBytes() uint64 {
- if x != nil && x.LenBytes != nil {
- return *x.LenBytes
- }
- return 0
-}
-
-func (x *StringRules) GetMinBytes() uint64 {
- if x != nil && x.MinBytes != nil {
- return *x.MinBytes
- }
- return 0
-}
-
-func (x *StringRules) GetMaxBytes() uint64 {
- if x != nil && x.MaxBytes != nil {
- return *x.MaxBytes
- }
- return 0
-}
-
-func (x *StringRules) GetPattern() string {
- if x != nil && x.Pattern != nil {
- return *x.Pattern
- }
- return ""
-}
-
-func (x *StringRules) GetPrefix() string {
- if x != nil && x.Prefix != nil {
- return *x.Prefix
- }
- return ""
-}
-
-func (x *StringRules) GetSuffix() string {
- if x != nil && x.Suffix != nil {
- return *x.Suffix
- }
- return ""
-}
-
-func (x *StringRules) GetContains() string {
- if x != nil && x.Contains != nil {
- return *x.Contains
- }
- return ""
-}
-
-func (x *StringRules) GetNotContains() string {
- if x != nil && x.NotContains != nil {
- return *x.NotContains
- }
- return ""
-}
-
-func (x *StringRules) GetIn() []string {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *StringRules) GetNotIn() []string {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (m *StringRules) GetWellKnown() isStringRules_WellKnown {
- if m != nil {
- return m.WellKnown
- }
- return nil
-}
-
-func (x *StringRules) GetEmail() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Email); ok {
- return x.Email
- }
- return false
-}
-
-func (x *StringRules) GetHostname() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Hostname); ok {
- return x.Hostname
- }
- return false
-}
-
-func (x *StringRules) GetIp() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Ip); ok {
- return x.Ip
- }
- return false
-}
-
-func (x *StringRules) GetIpv4() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Ipv4); ok {
- return x.Ipv4
- }
- return false
-}
-
-func (x *StringRules) GetIpv6() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Ipv6); ok {
- return x.Ipv6
- }
- return false
-}
-
-func (x *StringRules) GetUri() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Uri); ok {
- return x.Uri
- }
- return false
-}
-
-func (x *StringRules) GetUriRef() bool {
- if x, ok := x.GetWellKnown().(*StringRules_UriRef); ok {
- return x.UriRef
- }
- return false
-}
-
-func (x *StringRules) GetAddress() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Address); ok {
- return x.Address
- }
- return false
-}
-
-func (x *StringRules) GetUuid() bool {
- if x, ok := x.GetWellKnown().(*StringRules_Uuid); ok {
- return x.Uuid
- }
- return false
-}
-
-func (x *StringRules) GetWellKnownRegex() KnownRegex {
- if x, ok := x.GetWellKnown().(*StringRules_WellKnownRegex); ok {
- return x.WellKnownRegex
- }
- return KnownRegex_UNKNOWN
-}
-
-func (x *StringRules) GetStrict() bool {
- if x != nil && x.Strict != nil {
- return *x.Strict
- }
- return Default_StringRules_Strict
-}
-
-func (x *StringRules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-type isStringRules_WellKnown interface {
- isStringRules_WellKnown()
-}
-
-type StringRules_Email struct {
- // Email specifies that the field must be a valid email address as
- // defined by RFC 5322
- Email bool `protobuf:"varint,12,opt,name=email,oneof"`
-}
-
-type StringRules_Hostname struct {
- // Hostname specifies that the field must be a valid hostname as
- // defined by RFC 1034. This constraint does not support
- // internationalized domain names (IDNs).
- Hostname bool `protobuf:"varint,13,opt,name=hostname,oneof"`
-}
-
-type StringRules_Ip struct {
- // Ip specifies that the field must be a valid IP (v4 or v6) address.
- // Valid IPv6 addresses should not include surrounding square brackets.
- Ip bool `protobuf:"varint,14,opt,name=ip,oneof"`
-}
-
-type StringRules_Ipv4 struct {
- // Ipv4 specifies that the field must be a valid IPv4 address.
- Ipv4 bool `protobuf:"varint,15,opt,name=ipv4,oneof"`
-}
-
-type StringRules_Ipv6 struct {
- // Ipv6 specifies that the field must be a valid IPv6 address. Valid
- // IPv6 addresses should not include surrounding square brackets.
- Ipv6 bool `protobuf:"varint,16,opt,name=ipv6,oneof"`
-}
-
-type StringRules_Uri struct {
- // Uri specifies that the field must be a valid, absolute URI as defined
- // by RFC 3986
- Uri bool `protobuf:"varint,17,opt,name=uri,oneof"`
-}
-
-type StringRules_UriRef struct {
- // UriRef specifies that the field must be a valid URI as defined by RFC
- // 3986 and may be relative or absolute.
- UriRef bool `protobuf:"varint,18,opt,name=uri_ref,json=uriRef,oneof"`
-}
-
-type StringRules_Address struct {
- // Address specifies that the field must be either a valid hostname as
- // defined by RFC 1034 (which does not support internationalized domain
- // names or IDNs), or it can be a valid IP (v4 or v6).
- Address bool `protobuf:"varint,21,opt,name=address,oneof"`
-}
-
-type StringRules_Uuid struct {
- // Uuid specifies that the field must be a valid UUID as defined by
- // RFC 4122
- Uuid bool `protobuf:"varint,22,opt,name=uuid,oneof"`
-}
-
-type StringRules_WellKnownRegex struct {
- // WellKnownRegex specifies a common well known pattern defined as a regex.
- WellKnownRegex KnownRegex `protobuf:"varint,24,opt,name=well_known_regex,json=wellKnownRegex,enum=validate.KnownRegex,oneof"`
-}
-
-func (*StringRules_Email) isStringRules_WellKnown() {}
-
-func (*StringRules_Hostname) isStringRules_WellKnown() {}
-
-func (*StringRules_Ip) isStringRules_WellKnown() {}
-
-func (*StringRules_Ipv4) isStringRules_WellKnown() {}
-
-func (*StringRules_Ipv6) isStringRules_WellKnown() {}
-
-func (*StringRules_Uri) isStringRules_WellKnown() {}
-
-func (*StringRules_UriRef) isStringRules_WellKnown() {}
-
-func (*StringRules_Address) isStringRules_WellKnown() {}
-
-func (*StringRules_Uuid) isStringRules_WellKnown() {}
-
-func (*StringRules_WellKnownRegex) isStringRules_WellKnown() {}
-
-// BytesRules describe the constraints applied to `bytes` values
-type BytesRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const []byte `protobuf:"bytes,1,opt,name=const" json:"const,omitempty"`
- // Len specifies that this field must be the specified number of bytes
- Len *uint64 `protobuf:"varint,13,opt,name=len" json:"len,omitempty"`
- // MinLen specifies that this field must be the specified number of bytes
- // at a minimum
- MinLen *uint64 `protobuf:"varint,2,opt,name=min_len,json=minLen" json:"min_len,omitempty"`
- // MaxLen specifies that this field must be the specified number of bytes
- // at a maximum
- MaxLen *uint64 `protobuf:"varint,3,opt,name=max_len,json=maxLen" json:"max_len,omitempty"`
- // Pattern specifes that this field must match against the specified
- // regular expression (RE2 syntax). The included expression should elide
- // any delimiters.
- Pattern *string `protobuf:"bytes,4,opt,name=pattern" json:"pattern,omitempty"`
- // Prefix specifies that this field must have the specified bytes at the
- // beginning of the string.
- Prefix []byte `protobuf:"bytes,5,opt,name=prefix" json:"prefix,omitempty"`
- // Suffix specifies that this field must have the specified bytes at the
- // end of the string.
- Suffix []byte `protobuf:"bytes,6,opt,name=suffix" json:"suffix,omitempty"`
- // Contains specifies that this field must have the specified bytes
- // anywhere in the string.
- Contains []byte `protobuf:"bytes,7,opt,name=contains" json:"contains,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In [][]byte `protobuf:"bytes,8,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn [][]byte `protobuf:"bytes,9,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
- // WellKnown rules provide advanced constraints against common byte
- // patterns
- //
- // Types that are assignable to WellKnown:
- // *BytesRules_Ip
- // *BytesRules_Ipv4
- // *BytesRules_Ipv6
- WellKnown isBytesRules_WellKnown `protobuf_oneof:"well_known"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,14,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *BytesRules) Reset() {
- *x = BytesRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[15]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *BytesRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*BytesRules) ProtoMessage() {}
-
-func (x *BytesRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[15]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use BytesRules.ProtoReflect.Descriptor instead.
-func (*BytesRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{15}
-}
-
-func (x *BytesRules) GetConst() []byte {
- if x != nil {
- return x.Const
- }
- return nil
-}
-
-func (x *BytesRules) GetLen() uint64 {
- if x != nil && x.Len != nil {
- return *x.Len
- }
- return 0
-}
-
-func (x *BytesRules) GetMinLen() uint64 {
- if x != nil && x.MinLen != nil {
- return *x.MinLen
- }
- return 0
-}
-
-func (x *BytesRules) GetMaxLen() uint64 {
- if x != nil && x.MaxLen != nil {
- return *x.MaxLen
- }
- return 0
-}
-
-func (x *BytesRules) GetPattern() string {
- if x != nil && x.Pattern != nil {
- return *x.Pattern
- }
- return ""
-}
-
-func (x *BytesRules) GetPrefix() []byte {
- if x != nil {
- return x.Prefix
- }
- return nil
-}
-
-func (x *BytesRules) GetSuffix() []byte {
- if x != nil {
- return x.Suffix
- }
- return nil
-}
-
-func (x *BytesRules) GetContains() []byte {
- if x != nil {
- return x.Contains
- }
- return nil
-}
-
-func (x *BytesRules) GetIn() [][]byte {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *BytesRules) GetNotIn() [][]byte {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-func (m *BytesRules) GetWellKnown() isBytesRules_WellKnown {
- if m != nil {
- return m.WellKnown
- }
- return nil
-}
-
-func (x *BytesRules) GetIp() bool {
- if x, ok := x.GetWellKnown().(*BytesRules_Ip); ok {
- return x.Ip
- }
- return false
-}
-
-func (x *BytesRules) GetIpv4() bool {
- if x, ok := x.GetWellKnown().(*BytesRules_Ipv4); ok {
- return x.Ipv4
- }
- return false
-}
-
-func (x *BytesRules) GetIpv6() bool {
- if x, ok := x.GetWellKnown().(*BytesRules_Ipv6); ok {
- return x.Ipv6
- }
- return false
-}
-
-func (x *BytesRules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-type isBytesRules_WellKnown interface {
- isBytesRules_WellKnown()
-}
-
-type BytesRules_Ip struct {
- // Ip specifies that the field must be a valid IP (v4 or v6) address in
- // byte format
- Ip bool `protobuf:"varint,10,opt,name=ip,oneof"`
-}
-
-type BytesRules_Ipv4 struct {
- // Ipv4 specifies that the field must be a valid IPv4 address in byte
- // format
- Ipv4 bool `protobuf:"varint,11,opt,name=ipv4,oneof"`
-}
-
-type BytesRules_Ipv6 struct {
- // Ipv6 specifies that the field must be a valid IPv6 address in byte
- // format
- Ipv6 bool `protobuf:"varint,12,opt,name=ipv6,oneof"`
-}
-
-func (*BytesRules_Ip) isBytesRules_WellKnown() {}
-
-func (*BytesRules_Ipv4) isBytesRules_WellKnown() {}
-
-func (*BytesRules_Ipv6) isBytesRules_WellKnown() {}
-
-// EnumRules describe the constraints applied to enum values
-type EnumRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Const specifies that this field must be exactly the specified value
- Const *int32 `protobuf:"varint,1,opt,name=const" json:"const,omitempty"`
- // DefinedOnly specifies that this field must be only one of the defined
- // values for this enum, failing on any undefined value.
- DefinedOnly *bool `protobuf:"varint,2,opt,name=defined_only,json=definedOnly" json:"defined_only,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []int32 `protobuf:"varint,3,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []int32 `protobuf:"varint,4,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
-}
-
-func (x *EnumRules) Reset() {
- *x = EnumRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[16]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *EnumRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*EnumRules) ProtoMessage() {}
-
-func (x *EnumRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[16]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use EnumRules.ProtoReflect.Descriptor instead.
-func (*EnumRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{16}
-}
-
-func (x *EnumRules) GetConst() int32 {
- if x != nil && x.Const != nil {
- return *x.Const
- }
- return 0
-}
-
-func (x *EnumRules) GetDefinedOnly() bool {
- if x != nil && x.DefinedOnly != nil {
- return *x.DefinedOnly
- }
- return false
-}
-
-func (x *EnumRules) GetIn() []int32 {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *EnumRules) GetNotIn() []int32 {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-// MessageRules describe the constraints applied to embedded message values.
-// For message-type fields, validation is performed recursively.
-type MessageRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Skip specifies that the validation rules of this field should not be
- // evaluated
- Skip *bool `protobuf:"varint,1,opt,name=skip" json:"skip,omitempty"`
- // Required specifies that this field must be set
- Required *bool `protobuf:"varint,2,opt,name=required" json:"required,omitempty"`
-}
-
-func (x *MessageRules) Reset() {
- *x = MessageRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[17]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *MessageRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MessageRules) ProtoMessage() {}
-
-func (x *MessageRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[17]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use MessageRules.ProtoReflect.Descriptor instead.
-func (*MessageRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{17}
-}
-
-func (x *MessageRules) GetSkip() bool {
- if x != nil && x.Skip != nil {
- return *x.Skip
- }
- return false
-}
-
-func (x *MessageRules) GetRequired() bool {
- if x != nil && x.Required != nil {
- return *x.Required
- }
- return false
-}
-
-// RepeatedRules describe the constraints applied to `repeated` values
-type RepeatedRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // MinItems specifies that this field must have the specified number of
- // items at a minimum
- MinItems *uint64 `protobuf:"varint,1,opt,name=min_items,json=minItems" json:"min_items,omitempty"`
- // MaxItems specifies that this field must have the specified number of
- // items at a maximum
- MaxItems *uint64 `protobuf:"varint,2,opt,name=max_items,json=maxItems" json:"max_items,omitempty"`
- // Unique specifies that all elements in this field must be unique. This
- // contraint is only applicable to scalar and enum types (messages are not
- // supported).
- Unique *bool `protobuf:"varint,3,opt,name=unique" json:"unique,omitempty"`
- // Items specifies the contraints to be applied to each item in the field.
- // Repeated message fields will still execute validation against each item
- // unless skip is specified here.
- Items *FieldRules `protobuf:"bytes,4,opt,name=items" json:"items,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,5,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *RepeatedRules) Reset() {
- *x = RepeatedRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[18]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RepeatedRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RepeatedRules) ProtoMessage() {}
-
-func (x *RepeatedRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[18]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RepeatedRules.ProtoReflect.Descriptor instead.
-func (*RepeatedRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{18}
-}
-
-func (x *RepeatedRules) GetMinItems() uint64 {
- if x != nil && x.MinItems != nil {
- return *x.MinItems
- }
- return 0
-}
-
-func (x *RepeatedRules) GetMaxItems() uint64 {
- if x != nil && x.MaxItems != nil {
- return *x.MaxItems
- }
- return 0
-}
-
-func (x *RepeatedRules) GetUnique() bool {
- if x != nil && x.Unique != nil {
- return *x.Unique
- }
- return false
-}
-
-func (x *RepeatedRules) GetItems() *FieldRules {
- if x != nil {
- return x.Items
- }
- return nil
-}
-
-func (x *RepeatedRules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// MapRules describe the constraints applied to `map` values
-type MapRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // MinPairs specifies that this field must have the specified number of
- // KVs at a minimum
- MinPairs *uint64 `protobuf:"varint,1,opt,name=min_pairs,json=minPairs" json:"min_pairs,omitempty"`
- // MaxPairs specifies that this field must have the specified number of
- // KVs at a maximum
- MaxPairs *uint64 `protobuf:"varint,2,opt,name=max_pairs,json=maxPairs" json:"max_pairs,omitempty"`
- // NoSparse specifies values in this field cannot be unset. This only
- // applies to map's with message value types.
- NoSparse *bool `protobuf:"varint,3,opt,name=no_sparse,json=noSparse" json:"no_sparse,omitempty"`
- // Keys specifies the constraints to be applied to each key in the field.
- Keys *FieldRules `protobuf:"bytes,4,opt,name=keys" json:"keys,omitempty"`
- // Values specifies the constraints to be applied to the value of each key
- // in the field. Message values will still have their validations evaluated
- // unless skip is specified here.
- Values *FieldRules `protobuf:"bytes,5,opt,name=values" json:"values,omitempty"`
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- IgnoreEmpty *bool `protobuf:"varint,6,opt,name=ignore_empty,json=ignoreEmpty" json:"ignore_empty,omitempty"`
-}
-
-func (x *MapRules) Reset() {
- *x = MapRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[19]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *MapRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*MapRules) ProtoMessage() {}
-
-func (x *MapRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[19]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use MapRules.ProtoReflect.Descriptor instead.
-func (*MapRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{19}
-}
-
-func (x *MapRules) GetMinPairs() uint64 {
- if x != nil && x.MinPairs != nil {
- return *x.MinPairs
- }
- return 0
-}
-
-func (x *MapRules) GetMaxPairs() uint64 {
- if x != nil && x.MaxPairs != nil {
- return *x.MaxPairs
- }
- return 0
-}
-
-func (x *MapRules) GetNoSparse() bool {
- if x != nil && x.NoSparse != nil {
- return *x.NoSparse
- }
- return false
-}
-
-func (x *MapRules) GetKeys() *FieldRules {
- if x != nil {
- return x.Keys
- }
- return nil
-}
-
-func (x *MapRules) GetValues() *FieldRules {
- if x != nil {
- return x.Values
- }
- return nil
-}
-
-func (x *MapRules) GetIgnoreEmpty() bool {
- if x != nil && x.IgnoreEmpty != nil {
- return *x.IgnoreEmpty
- }
- return false
-}
-
-// AnyRules describe constraints applied exclusively to the
-// `google.protobuf.Any` well-known type
-type AnyRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Required specifies that this field must be set
- Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"`
- // In specifies that this field's `type_url` must be equal to one of the
- // specified values.
- In []string `protobuf:"bytes,2,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field's `type_url` must not be equal to any of
- // the specified values.
- NotIn []string `protobuf:"bytes,3,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
-}
-
-func (x *AnyRules) Reset() {
- *x = AnyRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[20]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *AnyRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AnyRules) ProtoMessage() {}
-
-func (x *AnyRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[20]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use AnyRules.ProtoReflect.Descriptor instead.
-func (*AnyRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{20}
-}
-
-func (x *AnyRules) GetRequired() bool {
- if x != nil && x.Required != nil {
- return *x.Required
- }
- return false
-}
-
-func (x *AnyRules) GetIn() []string {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *AnyRules) GetNotIn() []string {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-// DurationRules describe the constraints applied exclusively to the
-// `google.protobuf.Duration` well-known type
-type DurationRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Required specifies that this field must be set
- Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"`
- // Const specifies that this field must be exactly the specified value
- Const *durationpb.Duration `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *durationpb.Duration `protobuf:"bytes,3,opt,name=lt" json:"lt,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // inclusive
- Lte *durationpb.Duration `protobuf:"bytes,4,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive
- Gt *durationpb.Duration `protobuf:"bytes,5,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than the specified value,
- // inclusive
- Gte *durationpb.Duration `protobuf:"bytes,6,opt,name=gte" json:"gte,omitempty"`
- // In specifies that this field must be equal to one of the specified
- // values
- In []*durationpb.Duration `protobuf:"bytes,7,rep,name=in" json:"in,omitempty"`
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- NotIn []*durationpb.Duration `protobuf:"bytes,8,rep,name=not_in,json=notIn" json:"not_in,omitempty"`
-}
-
-func (x *DurationRules) Reset() {
- *x = DurationRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[21]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *DurationRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*DurationRules) ProtoMessage() {}
-
-func (x *DurationRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[21]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use DurationRules.ProtoReflect.Descriptor instead.
-func (*DurationRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{21}
-}
-
-func (x *DurationRules) GetRequired() bool {
- if x != nil && x.Required != nil {
- return *x.Required
- }
- return false
-}
-
-func (x *DurationRules) GetConst() *durationpb.Duration {
- if x != nil {
- return x.Const
- }
- return nil
-}
-
-func (x *DurationRules) GetLt() *durationpb.Duration {
- if x != nil {
- return x.Lt
- }
- return nil
-}
-
-func (x *DurationRules) GetLte() *durationpb.Duration {
- if x != nil {
- return x.Lte
- }
- return nil
-}
-
-func (x *DurationRules) GetGt() *durationpb.Duration {
- if x != nil {
- return x.Gt
- }
- return nil
-}
-
-func (x *DurationRules) GetGte() *durationpb.Duration {
- if x != nil {
- return x.Gte
- }
- return nil
-}
-
-func (x *DurationRules) GetIn() []*durationpb.Duration {
- if x != nil {
- return x.In
- }
- return nil
-}
-
-func (x *DurationRules) GetNotIn() []*durationpb.Duration {
- if x != nil {
- return x.NotIn
- }
- return nil
-}
-
-// TimestampRules describe the constraints applied exclusively to the
-// `google.protobuf.Timestamp` well-known type
-type TimestampRules struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Required specifies that this field must be set
- Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"`
- // Const specifies that this field must be exactly the specified value
- Const *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=const" json:"const,omitempty"`
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- Lt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=lt" json:"lt,omitempty"`
- // Lte specifies that this field must be less than the specified value,
- // inclusive
- Lte *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=lte" json:"lte,omitempty"`
- // Gt specifies that this field must be greater than the specified value,
- // exclusive
- Gt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=gt" json:"gt,omitempty"`
- // Gte specifies that this field must be greater than the specified value,
- // inclusive
- Gte *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=gte" json:"gte,omitempty"`
- // LtNow specifies that this must be less than the current time. LtNow
- // can only be used with the Within rule.
- LtNow *bool `protobuf:"varint,7,opt,name=lt_now,json=ltNow" json:"lt_now,omitempty"`
- // GtNow specifies that this must be greater than the current time. GtNow
- // can only be used with the Within rule.
- GtNow *bool `protobuf:"varint,8,opt,name=gt_now,json=gtNow" json:"gt_now,omitempty"`
- // Within specifies that this field must be within this duration of the
- // current time. This constraint can be used alone or with the LtNow and
- // GtNow rules.
- Within *durationpb.Duration `protobuf:"bytes,9,opt,name=within" json:"within,omitempty"`
-}
-
-func (x *TimestampRules) Reset() {
- *x = TimestampRules{}
- if protoimpl.UnsafeEnabled {
- mi := &file_validate_v1_validate_proto_msgTypes[22]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *TimestampRules) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*TimestampRules) ProtoMessage() {}
-
-func (x *TimestampRules) ProtoReflect() protoreflect.Message {
- mi := &file_validate_v1_validate_proto_msgTypes[22]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use TimestampRules.ProtoReflect.Descriptor instead.
-func (*TimestampRules) Descriptor() ([]byte, []int) {
- return file_validate_v1_validate_proto_rawDescGZIP(), []int{22}
-}
-
-func (x *TimestampRules) GetRequired() bool {
- if x != nil && x.Required != nil {
- return *x.Required
- }
- return false
-}
-
-func (x *TimestampRules) GetConst() *timestamppb.Timestamp {
- if x != nil {
- return x.Const
- }
- return nil
-}
-
-func (x *TimestampRules) GetLt() *timestamppb.Timestamp {
- if x != nil {
- return x.Lt
- }
- return nil
-}
-
-func (x *TimestampRules) GetLte() *timestamppb.Timestamp {
- if x != nil {
- return x.Lte
- }
- return nil
-}
-
-func (x *TimestampRules) GetGt() *timestamppb.Timestamp {
- if x != nil {
- return x.Gt
- }
- return nil
-}
-
-func (x *TimestampRules) GetGte() *timestamppb.Timestamp {
- if x != nil {
- return x.Gte
- }
- return nil
-}
-
-func (x *TimestampRules) GetLtNow() bool {
- if x != nil && x.LtNow != nil {
- return *x.LtNow
- }
- return false
-}
-
-func (x *TimestampRules) GetGtNow() bool {
- if x != nil && x.GtNow != nil {
- return *x.GtNow
- }
- return false
-}
-
-func (x *TimestampRules) GetWithin() *durationpb.Duration {
- if x != nil {
- return x.Within
- }
- return nil
-}
-
-var file_validate_v1_validate_proto_extTypes = []protoimpl.ExtensionInfo{
- {
- ExtendedType: (*descriptorpb.MessageOptions)(nil),
- ExtensionType: (*bool)(nil),
- Field: 1071,
- Name: "validate.disabled",
- Tag: "varint,1071,opt,name=disabled",
- Filename: "validate/v1/validate.proto",
- },
- {
- ExtendedType: (*descriptorpb.MessageOptions)(nil),
- ExtensionType: (*bool)(nil),
- Field: 1072,
- Name: "validate.ignored",
- Tag: "varint,1072,opt,name=ignored",
- Filename: "validate/v1/validate.proto",
- },
- {
- ExtendedType: (*descriptorpb.OneofOptions)(nil),
- ExtensionType: (*bool)(nil),
- Field: 1071,
- Name: "validate.required",
- Tag: "varint,1071,opt,name=required",
- Filename: "validate/v1/validate.proto",
- },
- {
- ExtendedType: (*descriptorpb.FieldOptions)(nil),
- ExtensionType: (*FieldRules)(nil),
- Field: 1071,
- Name: "validate.rules",
- Tag: "bytes,1071,opt,name=rules",
- Filename: "validate/v1/validate.proto",
- },
-}
-
-// Extension fields to descriptorpb.MessageOptions.
-var (
- // Disabled nullifies any validation rules for this message, including any
- // message fields associated with it that do support validation.
- //
- // optional bool disabled = 1071;
- E_Disabled = &file_validate_v1_validate_proto_extTypes[0]
- // Ignore skips generation of validation methods for this message.
- //
- // optional bool ignored = 1072;
- E_Ignored = &file_validate_v1_validate_proto_extTypes[1]
-)
-
-// Extension fields to descriptorpb.OneofOptions.
-var (
- // Required ensures that exactly one the field options in a oneof is set;
- // validation fails if no fields in the oneof are set.
- //
- // optional bool required = 1071;
- E_Required = &file_validate_v1_validate_proto_extTypes[2]
-)
-
-// Extension fields to descriptorpb.FieldOptions.
-var (
- // Rules specify the validations to be performed on this field. By default,
- // no validation is performed against a field.
- //
- // optional validate.FieldRules rules = 1071;
- E_Rules = &file_validate_v1_validate_proto_extTypes[3]
-)
-
-var File_validate_v1_validate_proto protoreflect.FileDescriptor
-
-var file_validate_v1_validate_proto_rawDesc = []byte{
- 0x0a, 0x1a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61,
- 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x76, 0x61,
- 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
- 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
- 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc8, 0x08, 0x0a, 0x0a, 0x46, 0x69,
- 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
- 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x61, 0x6c, 0x69,
- 0x64, 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x75, 0x6c, 0x65,
- 0x73, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x66, 0x6c,
- 0x6f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c, 0x69,
- 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48,
- 0x00, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x6f, 0x75, 0x62,
- 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48,
- 0x00, 0x52, 0x06, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x69, 0x6e, 0x74,
- 0x33, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00,
- 0x52, 0x05, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2c, 0x0a, 0x05, 0x69, 0x6e, 0x74, 0x36, 0x34,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05,
- 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2f, 0x0a, 0x06, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
- 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x06,
- 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2f, 0x0a, 0x06, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34,
- 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52,
- 0x06, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x74, 0x33,
- 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x2e, 0x53, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00,
- 0x52, 0x06, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x69, 0x6e, 0x74,
- 0x36, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x2e, 0x53, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48,
- 0x00, 0x52, 0x06, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x32, 0x0a, 0x07, 0x66, 0x69, 0x78,
- 0x65, 0x64, 0x33, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x76, 0x61, 0x6c,
- 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x32, 0x0a,
- 0x07, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
- 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36,
- 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36,
- 0x34, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x0b, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53,
- 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08,
- 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x66, 0x69, 0x78,
- 0x65, 0x64, 0x36, 0x34, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x76, 0x61, 0x6c,
- 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12,
- 0x29, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
- 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74,
- 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x76, 0x61, 0x6c,
- 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
- 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x05, 0x62,
- 0x79, 0x74, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c,
- 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x73,
- 0x48, 0x00, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x04, 0x65, 0x6e, 0x75,
- 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x04,
- 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
- 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48,
- 0x00, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x03, 0x6d,
- 0x61, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x03,
- 0x6d, 0x61, 0x70, 0x12, 0x26, 0x0a, 0x03, 0x61, 0x6e, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x12, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x6e, 0x79, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, 0x35, 0x0a, 0x08, 0x64,
- 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
- 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
- 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
- 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48,
- 0x00, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x06, 0x0a, 0x04,
- 0x74, 0x79, 0x70, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x0a, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x02, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67,
- 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67,
- 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a,
- 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x02, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a,
- 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x02, 0x52, 0x05, 0x6e,
- 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65,
- 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f,
- 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb1, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62,
- 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a,
- 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a,
- 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12,
- 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x02, 0x67, 0x74, 0x12,
- 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x67, 0x74,
- 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x01, 0x52, 0x02, 0x69,
- 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28,
- 0x01, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f,
- 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b,
- 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb0, 0x01, 0x0a, 0x0a,
- 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f,
- 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74,
- 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x6c, 0x74,
- 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6c,
- 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
- 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05,
- 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07,
- 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69,
- 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb0,
- 0x01, 0x0a, 0x0a, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a,
- 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f,
- 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
- 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20,
- 0x03, 0x28, 0x03, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69,
- 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21,
- 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74,
- 0x79, 0x22, 0xb1, 0x01, 0x0a, 0x0b, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65,
- 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
- 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
- 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e,
- 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x6f, 0x74,
- 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70,
- 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
- 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb1, 0x01, 0x0a, 0x0b, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34,
- 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c,
- 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c,
- 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a,
- 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a,
- 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12,
- 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, 0x02, 0x69, 0x6e, 0x12,
- 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x04, 0x52,
- 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
- 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67,
- 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb1, 0x01, 0x0a, 0x0b, 0x53, 0x49,
- 0x6e, 0x74, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e,
- 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12,
- 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, 0x52, 0x02, 0x6c, 0x74, 0x12,
- 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x03, 0x6c, 0x74,
- 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x02, 0x67,
- 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x03,
- 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x11, 0x52,
- 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20,
- 0x03, 0x28, 0x11, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67,
- 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb1, 0x01,
- 0x0a, 0x0b, 0x53, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a,
- 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x05, 0x63, 0x6f,
- 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x52,
- 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12,
- 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x12, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x12, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20,
- 0x03, 0x28, 0x12, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69,
- 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x12, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21,
- 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74,
- 0x79, 0x22, 0xb2, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x52, 0x75, 0x6c,
- 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x07, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x07, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x74,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x07, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x74,
- 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02,
- 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x07, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06,
- 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x05, 0x6e, 0x6f,
- 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d,
- 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72,
- 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb2, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x78, 0x65, 0x64,
- 0x36, 0x34, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a,
- 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a,
- 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12,
- 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x06, 0x52, 0x02, 0x67, 0x74, 0x12,
- 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x67, 0x74,
- 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x02, 0x69,
- 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28,
- 0x06, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f,
- 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b,
- 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xb3, 0x01, 0x0a, 0x0d,
- 0x53, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a,
- 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x05, 0x63, 0x6f,
- 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0f, 0x52,
- 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0f,
- 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x0f, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x0f, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20,
- 0x03, 0x28, 0x0f, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69,
- 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21,
- 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74,
- 0x79, 0x22, 0xb3, 0x01, 0x0a, 0x0d, 0x53, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x10, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x74, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x10, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x74, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x10, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x67,
- 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x10, 0x52, 0x02, 0x67, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x67,
- 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x10, 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x0e, 0x0a,
- 0x02, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x10, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a,
- 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x10, 0x52, 0x05, 0x6e,
- 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65,
- 0x6d, 0x70, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f,
- 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x21, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x6c, 0x52,
- 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x22, 0xd4, 0x05, 0x0a, 0x0b, 0x53,
- 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f,
- 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74,
- 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x65, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6c,
- 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6d,
- 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61,
- 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x65, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65,
- 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x65, 0x6e, 0x42, 0x79, 0x74, 0x65,
- 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1b,
- 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70,
- 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61,
- 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18,
- 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a,
- 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
- 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
- 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
- 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
- 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x6f, 0x74, 0x43, 0x6f, 0x6e, 0x74,
- 0x61, 0x69, 0x6e, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09,
- 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x0b,
- 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x16, 0x0a, 0x05, 0x65,
- 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x05, 0x65, 0x6d,
- 0x61, 0x69, 0x6c, 0x12, 0x1c, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18,
- 0x0d, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d,
- 0x65, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52,
- 0x02, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x0f, 0x20, 0x01, 0x28,
- 0x08, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76,
- 0x36, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x12,
- 0x12, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x03,
- 0x75, 0x72, 0x69, 0x12, 0x19, 0x0a, 0x07, 0x75, 0x72, 0x69, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x12,
- 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x75, 0x72, 0x69, 0x52, 0x65, 0x66, 0x12, 0x1a,
- 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x48,
- 0x00, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75,
- 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64,
- 0x12, 0x40, 0x0a, 0x10, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72,
- 0x65, 0x67, 0x65, 0x78, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c,
- 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x67, 0x65, 0x78,
- 0x48, 0x00, 0x52, 0x0e, 0x77, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x67,
- 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x18, 0x19, 0x20, 0x01,
- 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74,
- 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79,
- 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77,
- 0x6e, 0x22, 0xe2, 0x02, 0x0a, 0x0a, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x73,
- 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
- 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x65, 0x6e, 0x18, 0x0d, 0x20,
- 0x01, 0x28, 0x04, 0x52, 0x03, 0x6c, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x5f,
- 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x4c, 0x65,
- 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61,
- 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74,
- 0x74, 0x65, 0x72, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06,
- 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x75,
- 0x66, 0x66, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73,
- 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73,
- 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x6e,
- 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0c,
- 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x0a, 0x20,
- 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x02, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76,
- 0x34, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12,
- 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52,
- 0x04, 0x69, 0x70, 0x76, 0x36, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f,
- 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e,
- 0x6f, 0x72, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x0c, 0x0a, 0x0a, 0x77, 0x65, 0x6c, 0x6c,
- 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x22, 0x6b, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66,
- 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x0e, 0x0a, 0x02,
- 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06,
- 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x6f,
- 0x74, 0x49, 0x6e, 0x22, 0x3e, 0x0a, 0x0c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69,
- 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69,
- 0x72, 0x65, 0x64, 0x22, 0xb0, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64,
- 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65,
- 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65,
- 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12,
- 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
- 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x05, 0x69, 0x74,
- 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d,
- 0x70, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72,
- 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xdc, 0x01, 0x0a, 0x08, 0x4d, 0x61, 0x70, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x73,
- 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x1b, 0x0a,
- 0x09, 0x6e, 0x6f, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x08, 0x6e, 0x6f, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x65,
- 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64,
- 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x04,
- 0x6b, 0x65, 0x79, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e,
- 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x65, 0x6d, 0x70,
- 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
- 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4d, 0x0a, 0x08, 0x41, 0x6e, 0x79, 0x52, 0x75, 0x6c, 0x65,
- 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x0e, 0x0a,
- 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x15, 0x0a,
- 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e,
- 0x6f, 0x74, 0x49, 0x6e, 0x22, 0xe9, 0x02, 0x0a, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
- 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
- 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x63, 0x6f,
- 0x6e, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x2b,
- 0x0a, 0x03, 0x6c, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75,
- 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x67,
- 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x02, 0x67, 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03,
- 0x67, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x30,
- 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x49, 0x6e,
- 0x22, 0xf3, 0x02, 0x0a, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x75,
- 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12,
- 0x30, 0x0a, 0x05, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x63, 0x6f, 0x6e, 0x73,
- 0x74, 0x12, 0x2a, 0x0a, 0x02, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x6c, 0x74, 0x12, 0x2c, 0x0a,
- 0x03, 0x6c, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
- 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x6c, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x67,
- 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
- 0x61, 0x6d, 0x70, 0x52, 0x02, 0x67, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x67, 0x74, 0x65, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
- 0x52, 0x03, 0x67, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x6c, 0x74, 0x5f, 0x6e, 0x6f, 0x77, 0x18,
- 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6c, 0x74, 0x4e, 0x6f, 0x77, 0x12, 0x15, 0x0a, 0x06,
- 0x67, 0x74, 0x5f, 0x6e, 0x6f, 0x77, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x67, 0x74,
- 0x4e, 0x6f, 0x77, 0x12, 0x31, 0x0a, 0x06, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x18, 0x09, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06,
- 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x2a, 0x46, 0x0a, 0x0a, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x52,
- 0x65, 0x67, 0x65, 0x78, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
- 0x00, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52,
- 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x48, 0x54, 0x54, 0x50, 0x5f,
- 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x3a, 0x3c,
- 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f,
- 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73,
- 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xaf, 0x08, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x3a, 0x3a, 0x0a, 0x07,
- 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb0, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x07, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x3a, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75,
- 0x69, 0x72, 0x65, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x18, 0xaf, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75,
- 0x69, 0x72, 0x65, 0x64, 0x3a, 0x4a, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x2e,
- 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
- 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xaf, 0x08, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x46,
- 0x69, 0x65, 0x6c, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73,
- 0x42, 0x50, 0x0a, 0x1a, 0x69, 0x6f, 0x2e, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x70, 0x72, 0x6f, 0x78,
- 0x79, 0x2e, 0x70, 0x67, 0x76, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5a, 0x32,
- 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79,
- 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e,
- 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
- 0x74, 0x65,
-}
-
-var (
- file_validate_v1_validate_proto_rawDescOnce sync.Once
- file_validate_v1_validate_proto_rawDescData = file_validate_v1_validate_proto_rawDesc
-)
-
-func file_validate_v1_validate_proto_rawDescGZIP() []byte {
- file_validate_v1_validate_proto_rawDescOnce.Do(func() {
- file_validate_v1_validate_proto_rawDescData = protoimpl.X.CompressGZIP(file_validate_v1_validate_proto_rawDescData)
- })
- return file_validate_v1_validate_proto_rawDescData
-}
-
-var file_validate_v1_validate_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_validate_v1_validate_proto_msgTypes = make([]protoimpl.MessageInfo, 23)
-var file_validate_v1_validate_proto_goTypes = []interface{}{
- (KnownRegex)(0), // 0: validate.KnownRegex
- (*FieldRules)(nil), // 1: validate.FieldRules
- (*FloatRules)(nil), // 2: validate.FloatRules
- (*DoubleRules)(nil), // 3: validate.DoubleRules
- (*Int32Rules)(nil), // 4: validate.Int32Rules
- (*Int64Rules)(nil), // 5: validate.Int64Rules
- (*UInt32Rules)(nil), // 6: validate.UInt32Rules
- (*UInt64Rules)(nil), // 7: validate.UInt64Rules
- (*SInt32Rules)(nil), // 8: validate.SInt32Rules
- (*SInt64Rules)(nil), // 9: validate.SInt64Rules
- (*Fixed32Rules)(nil), // 10: validate.Fixed32Rules
- (*Fixed64Rules)(nil), // 11: validate.Fixed64Rules
- (*SFixed32Rules)(nil), // 12: validate.SFixed32Rules
- (*SFixed64Rules)(nil), // 13: validate.SFixed64Rules
- (*BoolRules)(nil), // 14: validate.BoolRules
- (*StringRules)(nil), // 15: validate.StringRules
- (*BytesRules)(nil), // 16: validate.BytesRules
- (*EnumRules)(nil), // 17: validate.EnumRules
- (*MessageRules)(nil), // 18: validate.MessageRules
- (*RepeatedRules)(nil), // 19: validate.RepeatedRules
- (*MapRules)(nil), // 20: validate.MapRules
- (*AnyRules)(nil), // 21: validate.AnyRules
- (*DurationRules)(nil), // 22: validate.DurationRules
- (*TimestampRules)(nil), // 23: validate.TimestampRules
- (*durationpb.Duration)(nil), // 24: google.protobuf.Duration
- (*timestamppb.Timestamp)(nil), // 25: google.protobuf.Timestamp
- (*descriptorpb.MessageOptions)(nil), // 26: google.protobuf.MessageOptions
- (*descriptorpb.OneofOptions)(nil), // 27: google.protobuf.OneofOptions
- (*descriptorpb.FieldOptions)(nil), // 28: google.protobuf.FieldOptions
-}
-var file_validate_v1_validate_proto_depIdxs = []int32{
- 18, // 0: validate.FieldRules.message:type_name -> validate.MessageRules
- 2, // 1: validate.FieldRules.float:type_name -> validate.FloatRules
- 3, // 2: validate.FieldRules.double:type_name -> validate.DoubleRules
- 4, // 3: validate.FieldRules.int32:type_name -> validate.Int32Rules
- 5, // 4: validate.FieldRules.int64:type_name -> validate.Int64Rules
- 6, // 5: validate.FieldRules.uint32:type_name -> validate.UInt32Rules
- 7, // 6: validate.FieldRules.uint64:type_name -> validate.UInt64Rules
- 8, // 7: validate.FieldRules.sint32:type_name -> validate.SInt32Rules
- 9, // 8: validate.FieldRules.sint64:type_name -> validate.SInt64Rules
- 10, // 9: validate.FieldRules.fixed32:type_name -> validate.Fixed32Rules
- 11, // 10: validate.FieldRules.fixed64:type_name -> validate.Fixed64Rules
- 12, // 11: validate.FieldRules.sfixed32:type_name -> validate.SFixed32Rules
- 13, // 12: validate.FieldRules.sfixed64:type_name -> validate.SFixed64Rules
- 14, // 13: validate.FieldRules.bool:type_name -> validate.BoolRules
- 15, // 14: validate.FieldRules.string:type_name -> validate.StringRules
- 16, // 15: validate.FieldRules.bytes:type_name -> validate.BytesRules
- 17, // 16: validate.FieldRules.enum:type_name -> validate.EnumRules
- 19, // 17: validate.FieldRules.repeated:type_name -> validate.RepeatedRules
- 20, // 18: validate.FieldRules.map:type_name -> validate.MapRules
- 21, // 19: validate.FieldRules.any:type_name -> validate.AnyRules
- 22, // 20: validate.FieldRules.duration:type_name -> validate.DurationRules
- 23, // 21: validate.FieldRules.timestamp:type_name -> validate.TimestampRules
- 0, // 22: validate.StringRules.well_known_regex:type_name -> validate.KnownRegex
- 1, // 23: validate.RepeatedRules.items:type_name -> validate.FieldRules
- 1, // 24: validate.MapRules.keys:type_name -> validate.FieldRules
- 1, // 25: validate.MapRules.values:type_name -> validate.FieldRules
- 24, // 26: validate.DurationRules.const:type_name -> google.protobuf.Duration
- 24, // 27: validate.DurationRules.lt:type_name -> google.protobuf.Duration
- 24, // 28: validate.DurationRules.lte:type_name -> google.protobuf.Duration
- 24, // 29: validate.DurationRules.gt:type_name -> google.protobuf.Duration
- 24, // 30: validate.DurationRules.gte:type_name -> google.protobuf.Duration
- 24, // 31: validate.DurationRules.in:type_name -> google.protobuf.Duration
- 24, // 32: validate.DurationRules.not_in:type_name -> google.protobuf.Duration
- 25, // 33: validate.TimestampRules.const:type_name -> google.protobuf.Timestamp
- 25, // 34: validate.TimestampRules.lt:type_name -> google.protobuf.Timestamp
- 25, // 35: validate.TimestampRules.lte:type_name -> google.protobuf.Timestamp
- 25, // 36: validate.TimestampRules.gt:type_name -> google.protobuf.Timestamp
- 25, // 37: validate.TimestampRules.gte:type_name -> google.protobuf.Timestamp
- 24, // 38: validate.TimestampRules.within:type_name -> google.protobuf.Duration
- 26, // 39: validate.disabled:extendee -> google.protobuf.MessageOptions
- 26, // 40: validate.ignored:extendee -> google.protobuf.MessageOptions
- 27, // 41: validate.required:extendee -> google.protobuf.OneofOptions
- 28, // 42: validate.rules:extendee -> google.protobuf.FieldOptions
- 1, // 43: validate.rules:type_name -> validate.FieldRules
- 44, // [44:44] is the sub-list for method output_type
- 44, // [44:44] is the sub-list for method input_type
- 43, // [43:44] is the sub-list for extension type_name
- 39, // [39:43] is the sub-list for extension extendee
- 0, // [0:39] is the sub-list for field type_name
-}
-
-func init() { file_validate_v1_validate_proto_init() }
-func file_validate_v1_validate_proto_init() {
- if File_validate_v1_validate_proto != nil {
- return
- }
- if !protoimpl.UnsafeEnabled {
- file_validate_v1_validate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*FieldRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*FloatRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DoubleRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Int32Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Int64Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UInt32Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UInt64Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SInt32Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SInt64Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Fixed32Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Fixed64Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SFixed32Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SFixed64Rules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*BoolRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*StringRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*BytesRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*EnumRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MessageRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RepeatedRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MapRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AnyRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DurationRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_validate_v1_validate_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*TimestampRules); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- }
- file_validate_v1_validate_proto_msgTypes[0].OneofWrappers = []interface{}{
- (*FieldRules_Float)(nil),
- (*FieldRules_Double)(nil),
- (*FieldRules_Int32)(nil),
- (*FieldRules_Int64)(nil),
- (*FieldRules_Uint32)(nil),
- (*FieldRules_Uint64)(nil),
- (*FieldRules_Sint32)(nil),
- (*FieldRules_Sint64)(nil),
- (*FieldRules_Fixed32)(nil),
- (*FieldRules_Fixed64)(nil),
- (*FieldRules_Sfixed32)(nil),
- (*FieldRules_Sfixed64)(nil),
- (*FieldRules_Bool)(nil),
- (*FieldRules_String_)(nil),
- (*FieldRules_Bytes)(nil),
- (*FieldRules_Enum)(nil),
- (*FieldRules_Repeated)(nil),
- (*FieldRules_Map)(nil),
- (*FieldRules_Any)(nil),
- (*FieldRules_Duration)(nil),
- (*FieldRules_Timestamp)(nil),
- }
- file_validate_v1_validate_proto_msgTypes[14].OneofWrappers = []interface{}{
- (*StringRules_Email)(nil),
- (*StringRules_Hostname)(nil),
- (*StringRules_Ip)(nil),
- (*StringRules_Ipv4)(nil),
- (*StringRules_Ipv6)(nil),
- (*StringRules_Uri)(nil),
- (*StringRules_UriRef)(nil),
- (*StringRules_Address)(nil),
- (*StringRules_Uuid)(nil),
- (*StringRules_WellKnownRegex)(nil),
- }
- file_validate_v1_validate_proto_msgTypes[15].OneofWrappers = []interface{}{
- (*BytesRules_Ip)(nil),
- (*BytesRules_Ipv4)(nil),
- (*BytesRules_Ipv6)(nil),
- }
- type x struct{}
- out := protoimpl.TypeBuilder{
- File: protoimpl.DescBuilder{
- GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
- RawDescriptor: file_validate_v1_validate_proto_rawDesc,
- NumEnums: 1,
- NumMessages: 23,
- NumExtensions: 4,
- NumServices: 0,
- },
- GoTypes: file_validate_v1_validate_proto_goTypes,
- DependencyIndexes: file_validate_v1_validate_proto_depIdxs,
- EnumInfos: file_validate_v1_validate_proto_enumTypes,
- MessageInfos: file_validate_v1_validate_proto_msgTypes,
- ExtensionInfos: file_validate_v1_validate_proto_extTypes,
- }.Build()
- File_validate_v1_validate_proto = out.File
- file_validate_v1_validate_proto_rawDesc = nil
- file_validate_v1_validate_proto_goTypes = nil
- file_validate_v1_validate_proto_depIdxs = nil
-}
diff --git a/pkg/proto/validate/v1/validate.proto b/pkg/proto/validate/v1/validate.proto
deleted file mode 100644
index 646729e..0000000
--- a/pkg/proto/validate/v1/validate.proto
+++ /dev/null
@@ -1,862 +0,0 @@
-syntax = "proto2";
-package validate;
-
-option go_package = "github.com/envoyproxy/protoc-gen-validate/validate";
-option java_package = "io.envoyproxy.pgv.validate";
-
-import "google/protobuf/descriptor.proto";
-import "google/protobuf/duration.proto";
-import "google/protobuf/timestamp.proto";
-
-// Validation rules applied at the message level
-extend google.protobuf.MessageOptions {
- // Disabled nullifies any validation rules for this message, including any
- // message fields associated with it that do support validation.
- optional bool disabled = 1071;
- // Ignore skips generation of validation methods for this message.
- optional bool ignored = 1072;
-}
-
-// Validation rules applied at the oneof level
-extend google.protobuf.OneofOptions {
- // Required ensures that exactly one the field options in a oneof is set;
- // validation fails if no fields in the oneof are set.
- optional bool required = 1071;
-}
-
-// Validation rules applied at the field level
-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 rules = 1071;
-}
-
-// 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 {
- optional MessageRules message = 17;
- 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;
- TimestampRules timestamp = 22;
- }
-}
-
-// FloatRules describes the constraints applied to `float` values
-message FloatRules {
- // Const specifies that this field must be exactly the specified value
- optional float const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional float lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional float lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional float gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional float gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated float in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated float not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// DoubleRules describes the constraints applied to `double` values
-message DoubleRules {
- // Const specifies that this field must be exactly the specified value
- optional double const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional double lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional double lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional double gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional double gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated double in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated double not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// Int32Rules describes the constraints applied to `int32` values
-message Int32Rules {
- // Const specifies that this field must be exactly the specified value
- optional int32 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional int32 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional int32 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional int32 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional int32 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated int32 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated int32 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// Int64Rules describes the constraints applied to `int64` values
-message Int64Rules {
- // Const specifies that this field must be exactly the specified value
- optional int64 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional int64 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional int64 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional int64 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional int64 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated int64 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated int64 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// UInt32Rules describes the constraints applied to `uint32` values
-message UInt32Rules {
- // Const specifies that this field must be exactly the specified value
- optional uint32 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional uint32 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional uint32 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional uint32 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional uint32 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated uint32 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated uint32 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// UInt64Rules describes the constraints applied to `uint64` values
-message UInt64Rules {
- // Const specifies that this field must be exactly the specified value
- optional uint64 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional uint64 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional uint64 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional uint64 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional uint64 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated uint64 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated uint64 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// SInt32Rules describes the constraints applied to `sint32` values
-message SInt32Rules {
- // Const specifies that this field must be exactly the specified value
- optional sint32 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional sint32 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional sint32 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional sint32 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional sint32 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated sint32 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated sint32 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// SInt64Rules describes the constraints applied to `sint64` values
-message SInt64Rules {
- // Const specifies that this field must be exactly the specified value
- optional sint64 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional sint64 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional sint64 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional sint64 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional sint64 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated sint64 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated sint64 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// Fixed32Rules describes the constraints applied to `fixed32` values
-message Fixed32Rules {
- // Const specifies that this field must be exactly the specified value
- optional fixed32 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional fixed32 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional fixed32 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional fixed32 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional fixed32 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated fixed32 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated fixed32 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// Fixed64Rules describes the constraints applied to `fixed64` values
-message Fixed64Rules {
- // Const specifies that this field must be exactly the specified value
- optional fixed64 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional fixed64 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional fixed64 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional fixed64 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional fixed64 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated fixed64 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated fixed64 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// SFixed32Rules describes the constraints applied to `sfixed32` values
-message SFixed32Rules {
- // Const specifies that this field must be exactly the specified value
- optional sfixed32 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional sfixed32 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional sfixed32 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional sfixed32 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional sfixed32 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated sfixed32 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated sfixed32 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// SFixed64Rules describes the constraints applied to `sfixed64` values
-message SFixed64Rules {
- // Const specifies that this field must be exactly the specified value
- optional sfixed64 const = 1;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional sfixed64 lt = 2;
-
- // Lte specifies that this field must be less than or equal to the
- // specified value, inclusive
- optional sfixed64 lte = 3;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
- // range is reversed.
- optional sfixed64 gt = 4;
-
- // Gte specifies that this field must be greater than or equal to the
- // specified value, inclusive. If the value of Gte is larger than a
- // specified Lt or Lte, the range is reversed.
- optional sfixed64 gte = 5;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated sfixed64 in = 6;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated sfixed64 not_in = 7;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 8;
-}
-
-// BoolRules describes the constraints applied to `bool` values
-message BoolRules {
- // Const specifies that this field must be exactly the specified value
- optional bool const = 1;
-}
-
-// StringRules describe the constraints applied to `string` values
-message StringRules {
- // Const specifies that this field must be exactly the specified value
- optional string const = 1;
-
- // Len specifies that this field must be the specified number of
- // characters (Unicode code points). Note that the number of
- // characters may differ from the number of bytes in the string.
- optional uint64 len = 19;
-
- // MinLen specifies that this field must be the specified number of
- // characters (Unicode code points) at a minimum. Note that the number of
- // characters may differ from the number of bytes in the string.
- optional uint64 min_len = 2;
-
- // MaxLen specifies that this field must be the specified number of
- // characters (Unicode code points) at a maximum. Note that the number of
- // characters may differ from the number of bytes in the string.
- optional uint64 max_len = 3;
-
- // LenBytes specifies that this field must be the specified number of bytes
- optional uint64 len_bytes = 20;
-
- // MinBytes specifies that this field must be the specified number of bytes
- // at a minimum
- optional uint64 min_bytes = 4;
-
- // MaxBytes specifies that this field must be the specified number of bytes
- // at a maximum
- optional uint64 max_bytes = 5;
-
- // Pattern specifes that this field must match against the specified
- // regular expression (RE2 syntax). The included expression should elide
- // any delimiters.
- optional string pattern = 6;
-
- // Prefix specifies that this field must have the specified substring at
- // the beginning of the string.
- optional string prefix = 7;
-
- // Suffix specifies that this field must have the specified substring at
- // the end of the string.
- optional string suffix = 8;
-
- // Contains specifies that this field must have the specified substring
- // anywhere in the string.
- optional string contains = 9;
-
- // NotContains specifies that this field cannot have the specified substring
- // anywhere in the string.
- optional string not_contains = 23;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated string in = 10;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated string not_in = 11;
-
- // WellKnown rules provide advanced constraints against common string
- // patterns
- oneof well_known {
- // Email specifies that the field must be a valid email address as
- // defined by RFC 5322
- bool email = 12;
-
- // Hostname specifies that the field must be a valid hostname as
- // defined by RFC 1034. This constraint does not support
- // internationalized domain names (IDNs).
- bool hostname = 13;
-
- // Ip specifies that the field must be a valid IP (v4 or v6) address.
- // Valid IPv6 addresses should not include surrounding square brackets.
- bool ip = 14;
-
- // Ipv4 specifies that the field must be a valid IPv4 address.
- bool ipv4 = 15;
-
- // Ipv6 specifies that the field must be a valid IPv6 address. Valid
- // IPv6 addresses should not include surrounding square brackets.
- bool ipv6 = 16;
-
- // Uri specifies that the field must be a valid, absolute URI as defined
- // by RFC 3986
- bool uri = 17;
-
- // UriRef specifies that the field must be a valid URI as defined by RFC
- // 3986 and may be relative or absolute.
- bool uri_ref = 18;
-
- // Address specifies that the field must be either a valid hostname as
- // defined by RFC 1034 (which does not support internationalized domain
- // names or IDNs), or it can be a valid IP (v4 or v6).
- bool address = 21;
-
- // Uuid specifies that the field must be a valid UUID as defined by
- // RFC 4122
- bool uuid = 22;
-
- // WellKnownRegex specifies a common well known pattern defined as a regex.
- KnownRegex well_known_regex = 24;
- }
-
- // 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.
- // Setting to false will enable a looser validations that only disallows
- // \r\n\0 characters, which can be used to bypass header matching rules.
- optional bool strict = 25 [default = true];
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 26;
-}
-
-// WellKnownRegex contain some well-known patterns.
-enum KnownRegex {
- UNKNOWN = 0;
-
- // HTTP header name as defined by RFC 7230.
- HTTP_HEADER_NAME = 1;
-
- // HTTP header value as defined by RFC 7230.
- HTTP_HEADER_VALUE = 2;
-}
-
-// BytesRules describe the constraints applied to `bytes` values
-message BytesRules {
- // Const specifies that this field must be exactly the specified value
- optional bytes const = 1;
-
- // Len specifies that this field must be the specified number of bytes
- optional uint64 len = 13;
-
- // MinLen specifies that this field must be the specified number of bytes
- // at a minimum
- optional uint64 min_len = 2;
-
- // MaxLen specifies that this field must be the specified number of bytes
- // at a maximum
- optional uint64 max_len = 3;
-
- // Pattern specifes that this field must match against the specified
- // regular expression (RE2 syntax). The included expression should elide
- // any delimiters.
- optional string pattern = 4;
-
- // Prefix specifies that this field must have the specified bytes at the
- // beginning of the string.
- optional bytes prefix = 5;
-
- // Suffix specifies that this field must have the specified bytes at the
- // end of the string.
- optional bytes suffix = 6;
-
- // Contains specifies that this field must have the specified bytes
- // anywhere in the string.
- optional bytes contains = 7;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated bytes in = 8;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated bytes not_in = 9;
-
- // WellKnown rules provide advanced constraints against common byte
- // patterns
- oneof well_known {
- // Ip specifies that the field must be a valid IP (v4 or v6) address in
- // byte format
- bool ip = 10;
-
- // Ipv4 specifies that the field must be a valid IPv4 address in byte
- // format
- bool ipv4 = 11;
-
- // Ipv6 specifies that the field must be a valid IPv6 address in byte
- // format
- bool ipv6 = 12;
- }
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 14;
-}
-
-// EnumRules describe the constraints applied to enum values
-message EnumRules {
- // Const specifies that this field must be exactly the specified value
- optional int32 const = 1;
-
- // DefinedOnly specifies that this field must be only one of the defined
- // values for this enum, failing on any undefined value.
- optional bool defined_only = 2;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated int32 in = 3;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated int32 not_in = 4;
-}
-
-// MessageRules describe the constraints applied to embedded message values.
-// For message-type fields, validation is performed recursively.
-message MessageRules {
- // Skip specifies that the validation rules of this field should not be
- // evaluated
- optional bool skip = 1;
-
- // Required specifies that this field must be set
- optional bool required = 2;
-}
-
-// RepeatedRules describe the constraints applied to `repeated` values
-message RepeatedRules {
- // MinItems specifies that this field must have the specified number of
- // items at a minimum
- optional uint64 min_items = 1;
-
- // MaxItems specifies that this field must have the specified number of
- // items at a maximum
- optional uint64 max_items = 2;
-
- // Unique specifies that all elements in this field must be unique. This
- // contraint is only applicable to scalar and enum types (messages are not
- // supported).
- optional bool unique = 3;
-
- // Items specifies the contraints to be applied to each item in the field.
- // Repeated message fields will still execute validation against each item
- // unless skip is specified here.
- optional FieldRules items = 4;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 5;
-}
-
-// MapRules describe the constraints applied to `map` values
-message MapRules {
- // MinPairs specifies that this field must have the specified number of
- // KVs at a minimum
- optional uint64 min_pairs = 1;
-
- // MaxPairs specifies that this field must have the specified number of
- // KVs at a maximum
- optional uint64 max_pairs = 2;
-
- // NoSparse specifies values in this field cannot be unset. This only
- // applies to map's with message value types.
- optional bool no_sparse = 3;
-
- // Keys specifies the constraints to be applied to each key in the field.
- optional FieldRules keys = 4;
-
- // Values specifies the constraints to be applied to the value of each key
- // in the field. Message values will still have their validations evaluated
- // unless skip is specified here.
- optional FieldRules values = 5;
-
- // IgnoreEmpty specifies that the validation rules of this field should be
- // evaluated only if the field is not empty
- optional bool ignore_empty = 6;
-}
-
-// AnyRules describe constraints applied exclusively to the
-// `google.protobuf.Any` well-known type
-message AnyRules {
- // Required specifies that this field must be set
- optional bool required = 1;
-
- // In specifies that this field's `type_url` must be equal to one of the
- // specified values.
- repeated string in = 2;
-
- // NotIn specifies that this field's `type_url` must not be equal to any of
- // the specified values.
- repeated string not_in = 3;
-}
-
-// DurationRules describe the constraints applied exclusively to the
-// `google.protobuf.Duration` well-known type
-message DurationRules {
- // Required specifies that this field must be set
- optional bool required = 1;
-
- // Const specifies that this field must be exactly the specified value
- optional google.protobuf.Duration const = 2;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional google.protobuf.Duration lt = 3;
-
- // Lt specifies that this field must be less than the specified value,
- // inclusive
- optional google.protobuf.Duration lte = 4;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive
- optional google.protobuf.Duration gt = 5;
-
- // Gte specifies that this field must be greater than the specified value,
- // inclusive
- optional google.protobuf.Duration gte = 6;
-
- // In specifies that this field must be equal to one of the specified
- // values
- repeated google.protobuf.Duration in = 7;
-
- // NotIn specifies that this field cannot be equal to one of the specified
- // values
- repeated google.protobuf.Duration not_in = 8;
-}
-
-// TimestampRules describe the constraints applied exclusively to the
-// `google.protobuf.Timestamp` well-known type
-message TimestampRules {
- // Required specifies that this field must be set
- optional bool required = 1;
-
- // Const specifies that this field must be exactly the specified value
- optional google.protobuf.Timestamp const = 2;
-
- // Lt specifies that this field must be less than the specified value,
- // exclusive
- optional google.protobuf.Timestamp lt = 3;
-
- // Lte specifies that this field must be less than the specified value,
- // inclusive
- optional google.protobuf.Timestamp lte = 4;
-
- // Gt specifies that this field must be greater than the specified value,
- // exclusive
- optional google.protobuf.Timestamp gt = 5;
-
- // Gte specifies that this field must be greater than the specified value,
- // inclusive
- optional google.protobuf.Timestamp gte = 6;
-
- // LtNow specifies that this must be less than the current time. LtNow
- // can only be used with the Within rule.
- optional bool lt_now = 7;
-
- // GtNow specifies that this must be greater than the current time. GtNow
- // can only be used with the Within rule.
- optional bool gt_now = 8;
-
- // Within specifies that this field must be within this duration of the
- // current time. This constraint can be used alone or with the LtNow and
- // GtNow rules.
- optional google.protobuf.Duration within = 9;
-}
\ No newline at end of file
diff --git a/pkg/util/util.go b/pkg/util/util.go
new file mode 100644
index 0000000..9f30846
--- /dev/null
+++ b/pkg/util/util.go
@@ -0,0 +1,43 @@
+// Copyright Istio Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package util
+
+import (
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/types/known/anypb"
+)
+
+// MessageToAnyWithError converts from proto message to proto Any
+func MessageToAnyWithError(msg proto.Message) (*anypb.Any, error) {
+ b, err := proto.MarshalOptions{Deterministic: true}.Marshal(msg)
+ if err != nil {
+ return nil, err
+ }
+ return &anypb.Any{
+ // nolint: staticcheck
+ TypeUrl: "type.googleapis.com/" + string(msg.ProtoReflect().Descriptor().FullName()),
+ Value: b,
+ }, nil
+}
+
+// MessageToAny converts from proto message to proto Any
+func MessageToAny(msg proto.Message) *anypb.Any {
+ out, err := MessageToAnyWithError(msg)
+ if err != nil {
+ // todo
+ return nil
+ }
+ return out
+}