From ace0beb9849378cc484172deb5199c6ea0bba55c Mon Sep 17 00:00:00 2001 From: Ryan Old Date: Thu, 20 Feb 2025 15:38:31 -0800 Subject: [PATCH 1/4] Upgrading to Go 1.23 --- changelog/v1.15.36/go-123.yaml | 8 ++++++++ ci/cloudbuild/publish-artifacts.yaml | 8 ++++---- ci/cloudbuild/run-tests.yaml | 10 +++++----- cloudbuild-cache.yaml | 2 +- go.mod | 2 +- 5 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 changelog/v1.15.36/go-123.yaml diff --git a/changelog/v1.15.36/go-123.yaml b/changelog/v1.15.36/go-123.yaml new file mode 100644 index 00000000000..f140f9476ca --- /dev/null +++ b/changelog/v1.15.36/go-123.yaml @@ -0,0 +1,8 @@ +changelog: + - type: DEPENDENCY_BUMP + description: Bumped the go version to 1.23.3 + dependencyOwner: golang + dependencyRepo: go + dependencyTag: v1.23.3 + issueLink: https://github.com/solo-io/solo-projects/issues/7609 + resolvesIssue: false \ No newline at end of file diff --git a/ci/cloudbuild/publish-artifacts.yaml b/ci/cloudbuild/publish-artifacts.yaml index 2bb13f7423d..d36e9c10c50 100644 --- a/ci/cloudbuild/publish-artifacts.yaml +++ b/ci/cloudbuild/publish-artifacts.yaml @@ -1,6 +1,6 @@ steps: -- name: 'gcr.io/$PROJECT_ID/prepare-go-workspace:0.7.7' +- name: 'gcr.io/$PROJECT_ID/prepare-go-workspace:0.10.2' id: 'prepare-workspace' args: - '--repo-name' @@ -44,7 +44,7 @@ steps: - 'us-central1-a' # Run make targets to push docker images to quay.io -- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.7.7' +- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.10.2' id: 'publish-docker' args: - 'publish-docker' @@ -65,7 +65,7 @@ steps: waitFor: - 'publish-docker' -- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.7.7' +- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.10.2' id: 'release-chart' dir: *dir args: @@ -80,7 +80,7 @@ steps: - 'gcr-auth' # Run make targets to retag and push docker images to GCR -- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.7.7' +- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.10.2' id: 'docker-push-extended-gcr' dir: *dir args: diff --git a/ci/cloudbuild/run-tests.yaml b/ci/cloudbuild/run-tests.yaml index 01d65b80896..ff57e0fffb7 100644 --- a/ci/cloudbuild/run-tests.yaml +++ b/ci/cloudbuild/run-tests.yaml @@ -1,6 +1,6 @@ steps: -- name: 'gcr.io/$PROJECT_ID/prepare-go-workspace:0.7.7' +- name: 'gcr.io/$PROJECT_ID/prepare-go-workspace:0.10.2' id: 'prepare-workspace' args: - '--repo-name' @@ -23,7 +23,7 @@ steps: cd /go/pkg gsutil cat gs://$PROJECT_ID-cache/gloo/gloo-mod.tar.gz | tar -xzf - || echo "untar mod cache failed; continuing because we can download deps as we need them" -- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.7.7' +- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.10.2' id: 'prepare-envoy' dir: *dir entrypoint: 'bash' @@ -68,7 +68,7 @@ steps: waitFor: - 'prepare-gcr-zone' -- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.7.7' +- name: 'gcr.io/$PROJECT_ID/go-mod-make:0.10.2' id: 'prepare-test-tools' dir: *dir args: @@ -79,7 +79,7 @@ steps: - 'prepare-gcr-zone' - 'prepare-test-credentials' -- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.7.7' +- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.10.2' id: 'run-tests' dir: *dir entrypoint: 'make' @@ -90,7 +90,7 @@ steps: secretEnv: - 'JWT_PRIVATE_KEY' -- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.7.7' +- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.10.2' id: 'run-e2e-tests' dir: *dir entrypoint: 'make' diff --git a/cloudbuild-cache.yaml b/cloudbuild-cache.yaml index b1657d2b4ab..a7eeea41fb8 100644 --- a/cloudbuild-cache.yaml +++ b/cloudbuild-cache.yaml @@ -1,6 +1,6 @@ options: env: - - "_GO_VERSION=1.20.12" + - "_GO_VERSION=1.23.3" steps: - name: gcr.io/cloud-builders/gsutil diff --git a/go.mod b/go.mod index 0f3f793850e..8e594a64940 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/solo-io/gloo -go 1.20 +go 1.23.3 // Note for developers: upgrading go will also require upgrading go in the following files: // ./cloudbuild-cache.yaml, From c6dc3aba7ccf9ae6bec2d4516f7e8d6673bacfa8 Mon Sep 17 00:00:00 2001 From: Ryan Old Date: Fri, 21 Feb 2025 15:54:03 -0800 Subject: [PATCH 2/4] Generate --- go.mod | 16 +- go.sum | 16 + .../api/v1/external_options.pb.uniquehash.go | 146 + .../pkg/api/v1/gateway.pb.uniquehash.go | 750 ++ .../pkg/api/v1/http_gateway.pb.uniquehash.go | 263 + .../matchable_http_gateway.pb.uniquehash.go | 176 + .../v1/matchable_tcp_gateway.pb.uniquehash.go | 193 + .../pkg/api/v1/route_table.pb.uniquehash.go | 117 + .../api/v1/virtual_service.pb.uniquehash.go | 751 ++ .../annotations/deprecation.pb.uniquehash.go | 28 + .../outlier_detection.pb.uniquehash.go | 335 + .../api/v2/core/health_check.pb.uniquehash.go | 803 ++ .../envoy/api/v2/route/route.pb.uniquehash.go | 3520 +++++++ .../v3/mutation_rules.pb.uniquehash.go | 241 + .../config/core/v3/address.pb.uniquehash.go | 415 + .../config/core/v3/backoff.pb.uniquehash.go | 87 + .../config/core/v3/base.pb.uniquehash.go | 1069 +++ .../v3/event_service_config.pb.uniquehash.go | 73 + .../config/core/v3/extension.pb.uniquehash.go | 74 + .../core/v3/grpc_service.pb.uniquehash.go | 963 ++ .../core/v3/health_check.pb.uniquehash.go | 917 ++ .../config/core/v3/http_uri.pb.uniquehash.go | 87 + .../core/v3/proxy_protocol.pb.uniquehash.go | 110 + .../core/v3/socket_option.pb.uniquehash.go | 101 + .../filter/http/gzip/v2/gzip.pb.uniquehash.go | 175 + .../v3/tls_cipher_inspector.pb.uniquehash.go | 47 + .../v3/server_name_matcher.pb.uniquehash.go | 133 + .../cipher_detection_input.pb.uniquehash.go | 63 + .../v3/route_components.pb.uniquehash.go | 4229 +++++++++ .../config/trace/v3/datadog.pb.uniquehash.go | 102 + .../trace/v3/opencensus.pb.uniquehash.go | 381 + .../trace/v3/opentelemetry.pb.uniquehash.go | 82 + .../config/trace/v3/zipkin.pb.uniquehash.go | 137 + .../extensions/aws/filter.pb.uniquehash.go | 380 + .../http/buffer/v3/buffer.pb.uniquehash.go | 122 + .../http/csrf/v3/csrf.pb.uniquehash.go | 117 + .../v3/processing_mode.pb.uniquehash.go | 95 + .../http/wasm/v3/wasm.pb.uniquehash.go | 67 + .../http_path/http_path.pb.uniquehash.go | 67 + .../proxylatency.pb.uniquehash.go | 131 + .../transformation.pb.uniquehash.go | 1363 +++ .../envoy/extensions/waf/waf.pb.uniquehash.go | 361 + .../extensions/wasm/v3/wasm.pb.uniquehash.go | 251 + .../type/matcher/v3/regex.pb.uniquehash.go | 165 + .../type/matcher/v3/string.pb.uniquehash.go | 157 + .../metadata/v3/metadata.pb.uniquehash.go | 303 + .../envoy/type/range.pb.uniquehash.go | 98 + .../tracing/v3/custom_tag.pb.uniquehash.go | 304 + .../envoy/type/v3/http.pb.uniquehash.go | 28 + .../envoy/type/v3/percent.pb.uniquehash.go | 90 + .../envoy/type/v3/range.pb.uniquehash.go | 133 + .../type/v3/semantic_version.pb.uniquehash.go | 71 + .../gloo_validation.pb.uniquehash.go | 1644 ++++ .../api/grpc/version/version.pb.uniquehash.go | 287 + .../api/v1/circuit_breaker.pb.uniquehash.go | 127 + .../pkg/api/v1/connection.pb.uniquehash.go | 222 + .../core/matchers/matchers.pb.uniquehash.go | 306 + .../core/selectors/selectors.pb.uniquehash.go | 174 + .../gloo/pkg/api/v1/endpoint.pb.uniquehash.go | 165 + .../options/caching/caching.pb.uniquehash.go | 137 + .../options/dlp/dlp.pb.uniquehash.go | 446 + .../extauth/v1/extauth.pb.uniquehash.go | 8414 +++++++++++++++++ .../options/extproc/extproc.pb.uniquehash.go | 777 ++ .../graphql/v1beta1/graphql.pb.uniquehash.go | 1579 ++++ .../options/jwt/jwt.pb.uniquehash.go | 702 ++ .../ratelimit/ratelimit.pb.uniquehash.go | 529 ++ .../options/rbac/rbac.pb.uniquehash.go | 345 + .../options/waf/waf.pb.uniquehash.go | 275 + .../v1/enterprise/ratelimit.pb.uniquehash.go | 114 + .../pkg/api/v1/extensions.pb.uniquehash.go | 128 + .../gloo/pkg/api/v1/failover.pb.uniquehash.go | 456 + .../api/v1/filters/stages.pb.uniquehash.go | 63 + .../api/v1/gloosnapshot/snap.pb.uniquehash.go | 28 + .../pkg/api/v1/load_balancer.pb.uniquehash.go | 504 + .../gloo/pkg/api/v1/options.pb.uniquehash.go | 2600 +++++ .../api/v1/options/als/als.pb.uniquehash.go | 993 ++ .../api/v1/options/aws/aws.pb.uniquehash.go | 260 + .../options/aws/ec2/aws_ec2.pb.uniquehash.go | 214 + .../v1/options/azure/azure.pb.uniquehash.go | 164 + .../connection_limit.pb.uniquehash.go | 87 + .../v1/options/consul/consul.pb.uniquehash.go | 195 + .../consul/query_options.pb.uniquehash.go | 67 + .../api/v1/options/cors/cors.pb.uniquehash.go | 155 + .../dynamic_forward_proxy.pb.uniquehash.go | 582 ++ .../faultinjection/fault.pb.uniquehash.go | 169 + .../options/graphql/graphql.pb.uniquehash.go | 93 + .../api/v1/options/grpc/grpc.pb.uniquehash.go | 194 + .../grpc_json/grpc_json.pb.uniquehash.go | 274 + .../grpc_web/grpc_web.pb.uniquehash.go | 55 + .../api/v1/options/hcm/hcm.pb.uniquehash.go | 1098 +++ .../options/headers/headers.pb.uniquehash.go | 233 + .../healthcheck/healthcheck.pb.uniquehash.go | 54 + .../kubernetes/kubernetes.pb.uniquehash.go | 138 + .../v1/options/lbhash/lbhash.pb.uniquehash.go | 202 + .../local_ratelimit.pb.uniquehash.go | 174 + .../api/v1/options/pipe/pipe.pb.uniquehash.go | 74 + .../protocol/protocol.pb.uniquehash.go | 273 + .../protocol_upgrade.pb.uniquehash.go | 134 + .../proxy_protocol.pb.uniquehash.go | 165 + .../api/v1/options/rest/rest.pb.uniquehash.go | 216 + .../options/retries/retries.pb.uniquehash.go | 161 + .../v1/options/service_spec.pb.uniquehash.go | 139 + .../shadowing/shadowing.pb.uniquehash.go | 75 + .../v1/options/static/static.pb.uniquehash.go | 251 + .../v1/options/stats/stats.pb.uniquehash.go | 117 + .../v1/options/subset_spec.pb.uniquehash.go | 197 + .../api/v1/options/tcp/tcp.pb.uniquehash.go | 275 + .../options/tracing/tracing.pb.uniquehash.go | 552 ++ .../parameters.pb.uniquehash.go | 96 + .../transformation.pb.uniquehash.go | 1122 +++ .../api/v1/options/wasm/wasm.pb.uniquehash.go | 223 + .../gloo/pkg/api/v1/proxy.pb.uniquehash.go | 2301 +++++ .../gloo/pkg/api/v1/secret.pb.uniquehash.go | 511 + .../gloo/pkg/api/v1/settings.pb.uniquehash.go | 3257 +++++++ .../gloo/pkg/api/v1/ssl/ssl.pb.uniquehash.go | 689 ++ .../gloo/pkg/api/v1/subset.pb.uniquehash.go | 76 + .../gloo/pkg/api/v1/upstream.pb.uniquehash.go | 813 ++ .../pkg/api/v1/ingress.pb.uniquehash.go | 87 + .../pkg/api/v1/service.pb.uniquehash.go | 107 + 119 files changed, 58229 insertions(+), 8 deletions(-) create mode 100644 projects/gateway/pkg/api/v1/external_options.pb.uniquehash.go create mode 100644 projects/gateway/pkg/api/v1/gateway.pb.uniquehash.go create mode 100644 projects/gateway/pkg/api/v1/http_gateway.pb.uniquehash.go create mode 100644 projects/gateway/pkg/api/v1/matchable_http_gateway.pb.uniquehash.go create mode 100644 projects/gateway/pkg/api/v1/matchable_tcp_gateway.pb.uniquehash.go create mode 100644 projects/gateway/pkg/api/v1/route_table.pb.uniquehash.go create mode 100644 projects/gateway/pkg/api/v1/virtual_service.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/annotations/deprecation.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/api/v2/cluster/outlier_detection.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/api/v2/core/health_check.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/api/v2/route/route.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/common/mutation_rules/v3/mutation_rules.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/address.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/backoff.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/base.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/event_service_config.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/extension.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/grpc_service.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/health_check.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/http_uri.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/proxy_protocol.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/core/v3/socket_option.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/filter/http/gzip/v2/gzip.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/filter/listener/tls_cipher_inspector/v3/tls_cipher_inspector.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/matching/custom_matchers/server_name/v3/server_name_matcher.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/matching/inputs/cipher_detection_input/v3/cipher_detection_input.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/route/v3/route_components.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/trace/v3/datadog.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/trace/v3/opencensus.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/trace/v3/opentelemetry.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/config/trace/v3/zipkin.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/aws/filter.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/filters/http/buffer/v3/buffer.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/filters/http/csrf/v3/csrf.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/filters/http/ext_proc/v3/processing_mode.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/filters/http/wasm/v3/wasm.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/http_path/http_path.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/proxylatency/proxylatency.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/transformation/transformation.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/waf/waf.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/extensions/wasm/v3/wasm.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/matcher/v3/regex.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/matcher/v3/string.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/metadata/v3/metadata.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/range.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/tracing/v3/custom_tag.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/v3/http.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/v3/percent.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/v3/range.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/external/envoy/type/v3/semantic_version.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/grpc/validation/gloo_validation.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/grpc/version/version.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/circuit_breaker.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/connection.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/core/matchers/matchers.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/core/selectors/selectors.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/endpoint.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/caching/caching.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/dlp/dlp.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/extauth/v1/extauth.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/extproc/extproc.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1/graphql.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/jwt/jwt.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/ratelimit/ratelimit.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/rbac/rbac.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/options/waf/waf.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/enterprise/ratelimit.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/extensions.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/failover.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/filters/stages.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/gloosnapshot/snap.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/load_balancer.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/aws/aws.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/aws/ec2/aws_ec2.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/azure/azure.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/connection_limit/connection_limit.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/consul/consul.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/consul/query_options.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/cors/cors.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/dynamic_forward_proxy/dynamic_forward_proxy.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/faultinjection/fault.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/graphql/graphql.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/grpc/grpc.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/grpc_json/grpc_json.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/grpc_web/grpc_web.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/hcm/hcm.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/headers/headers.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/healthcheck/healthcheck.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/kubernetes/kubernetes.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/lbhash/lbhash.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/local_ratelimit/local_ratelimit.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/pipe/pipe.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/protocol/protocol.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/protocol_upgrade/protocol_upgrade.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/proxy_protocol/proxy_protocol.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/rest/rest.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/retries/retries.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/service_spec.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/shadowing/shadowing.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/static/static.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/stats/stats.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/subset_spec.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/tcp/tcp.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/tracing/tracing.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/transformation/parameters.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/transformation/transformation.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/options/wasm/wasm.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/proxy.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/secret.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/settings.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/ssl/ssl.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/subset.pb.uniquehash.go create mode 100644 projects/gloo/pkg/api/v1/upstream.pb.uniquehash.go create mode 100644 projects/ingress/pkg/api/v1/ingress.pb.uniquehash.go create mode 100644 projects/ingress/pkg/api/v1/service.pb.uniquehash.go diff --git a/go.mod b/go.mod index 8e594a64940..448e6a7afdd 100644 --- a/go.mod +++ b/go.mod @@ -360,21 +360,21 @@ exclude ( k8s.io/client-go v1.5.0 k8s.io/client-go v1.5.1 k8s.io/client-go v1.5.2 - k8s.io/client-go v10.0.0+incompatible - k8s.io/client-go v11.0.0+incompatible - k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible - k8s.io/client-go v12.0.0+incompatible - k8s.io/client-go v2.0.0+incompatible k8s.io/client-go v2.0.0-alpha.1+incompatible - k8s.io/client-go v3.0.0+incompatible + k8s.io/client-go v2.0.0+incompatible k8s.io/client-go v3.0.0-beta.0+incompatible - k8s.io/client-go v4.0.0+incompatible + k8s.io/client-go v3.0.0+incompatible k8s.io/client-go v4.0.0-beta.0+incompatible + k8s.io/client-go v4.0.0+incompatible k8s.io/client-go v5.0.0+incompatible k8s.io/client-go v5.0.1+incompatible k8s.io/client-go v6.0.0+incompatible k8s.io/client-go v7.0.0+incompatible k8s.io/client-go v8.0.0+incompatible - k8s.io/client-go v9.0.0+incompatible k8s.io/client-go v9.0.0-invalid+incompatible + k8s.io/client-go v9.0.0+incompatible + k8s.io/client-go v10.0.0+incompatible + k8s.io/client-go v11.0.0+incompatible + k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible + k8s.io/client-go v12.0.0+incompatible ) diff --git a/go.sum b/go.sum index 2969d467983..4f01005c2f2 100644 --- a/go.sum +++ b/go.sum @@ -614,6 +614,7 @@ github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v0.0.0-20180330214955-e67964b4021a/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= @@ -653,6 +654,7 @@ github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= @@ -731,6 +733,7 @@ github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradleyfalzon/ghinstallation v1.1.1/go.mod h1:vyCmHTciHx/uuyN82Zc3rXN3X2KTK8nUTCrTMwAhcug= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= github.com/bugsnag/bugsnag-go v1.4.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= @@ -792,6 +795,7 @@ github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8a github.com/containerd/containerd v1.4.13 h1:Z0CbagVdn9VN4K6htOCY/jApSw8YKP+RdLZ5dkXF8PM= github.com/containerd/containerd v1.4.13/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/continuity v0.2.2 h1:QSqfxcn8c+12slxwu00AtzXrsami0MJb/MQs9lOLHLA= +github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= @@ -835,6 +839,7 @@ github.com/dgryski/go-gk v0.0.0-20140819190930-201884a44051/go.mod h1:qm+vckxRlD github.com/dgryski/go-lttb v0.0.0-20180810165845-318fcdf10a77/go.mod h1:Va5MyIzkU0rAM92tn3hb3Anb7oz7KcnixF49+2wOMe4= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v24.0.4+incompatible h1:Y3bYF9ekNTm2VFz5U/0BlMdJy73D+Y1iAAZ8l63Ydzw= github.com/docker/cli v24.0.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -847,6 +852,7 @@ github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHO github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -854,6 +860,7 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= @@ -906,6 +913,7 @@ github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNy github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= +github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= @@ -1135,6 +1143,7 @@ github.com/golangplus/fmt v1.0.0/go.mod h1:zpM0OfbMCjPtd2qkTD/jX2MgiFCqklhSUFyDW github.com/golangplus/testing v1.0.0 h1:+ZeeiKZENNOMkTTELoSySazi+XaEhVO0mb+eanrSEUQ= github.com/golangplus/testing v1.0.0/go.mod h1:ZDreixUV3YzhoVraIDyOzHrr76p6NUh6k/pPg/Q3gYA= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= +github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= github.com/gonum/diff v0.0.0-20181124234638-500114f11e71/go.mod h1:22dM4PLscQl+Nzf64qNBurVJvfyvZELT0iRW2l/NN70= github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= @@ -1240,6 +1249,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -1675,6 +1685,7 @@ github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= @@ -1827,6 +1838,7 @@ github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE github.com/solo-io/anyvendor v0.0.4 h1:9nI7o7Srml2uaOpT5HJSru06IHUZpzSCU/dEkseiGa4= github.com/solo-io/anyvendor v0.0.4/go.mod h1:+TTkDGd11u8ugXccqtukBEWvkZkODaBbeWgdH/F/IWY= github.com/solo-io/cue v0.4.7 h1:X65mDmyBrS3ODvDvAgzIt9aTxbwBtdt+ayg4w9XKoaA= +github.com/solo-io/cue v0.4.7/go.mod h1:P1tN9y6nBPAMoEK5aJxI8kn0VUcjVcRc+8esieRzQ7M= github.com/solo-io/go-control-plane-fork-v2 v0.0.0-20230902211618-ada8201b381c h1:T86Q4aWN4SF12ErtD4tMkC0XyRC6XOMVEbtOPchlN24= github.com/solo-io/go-control-plane-fork-v2 v0.0.0-20230902211618-ada8201b381c/go.mod h1:21jfav7T49euxyek9CgZOQP9NmttqoYblX2pEIHOurM= github.com/solo-io/go-list-licenses v0.1.4 h1:u4xh1OUORT4iSWuAp3Q4NsfHcDaeUV8QRDH8ACQqbxw= @@ -1899,6 +1911,7 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -1947,8 +1960,11 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yvasiyarov/go-metrics v0.0.0-20150112132944-c25f46c4b940 h1:p7OofyZ509h8DmPLh8Hn+EIIZm/xYhdZHJ9GnXHdr6U= +github.com/yvasiyarov/go-metrics v0.0.0-20150112132944-c25f46c4b940/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.6 h1:qMJQYPNdtJ7UNYHjX38KXZtltKTqimMuoQjNnSVIuJg= +github.com/yvasiyarov/gorelic v0.0.6/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= diff --git a/projects/gateway/pkg/api/v1/external_options.pb.uniquehash.go b/projects/gateway/pkg/api/v1/external_options.pb.uniquehash.go new file mode 100644 index 00000000000..07f65a46c98 --- /dev/null +++ b/projects/gateway/pkg/api/v1/external_options.pb.uniquehash.go @@ -0,0 +1,146 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gateway/api/v1/external_options.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHostOption) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.VirtualHostOption")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteOption) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.RouteOption")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gateway/pkg/api/v1/gateway.pb.uniquehash.go b/projects/gateway/pkg/api/v1/gateway.pb.uniquehash.go new file mode 100644 index 00000000000..0ffdfbc3e8f --- /dev/null +++ b/projects/gateway/pkg/api/v1/gateway.pb.uniquehash.go @@ -0,0 +1,750 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gateway/api/v1/gateway.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Gateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.Gateway")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Ssl")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSsl()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("BindAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetBindAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("BindPort")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetBindPort()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUseProxyProto()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseProxyProto")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseProxyProto(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseProxyProto")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ProxyNames")); err != nil { + return 0, err + } + for i, v := range m.GetProxyNames() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetRouteOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RouteOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRouteOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RouteOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.GatewayType.(type) { + + case *Gateway_HttpGateway: + + if h, ok := interface{}(m.GetHttpGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpGateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpGateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Gateway_TcpGateway: + + if h, ok := interface{}(m.GetTcpGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpGateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpGateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Gateway_HybridGateway: + + if h, ok := interface{}(m.GetHybridGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HybridGateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHybridGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HybridGateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.TcpGateway")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TcpHosts")); err != nil { + return 0, err + } + for i, v := range m.GetTcpHosts() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HybridGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.HybridGateway")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MatchedGateways")); err != nil { + return 0, err + } + for i, v := range m.GetMatchedGateways() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetDelegatedHttpGateways()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DelegatedHttpGateways")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDelegatedHttpGateways(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DelegatedHttpGateways")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDelegatedTcpGateways()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DelegatedTcpGateways")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDelegatedTcpGateways(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DelegatedTcpGateways")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DelegatedHttpGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.DelegatedHttpGateway")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PreventChildOverrides")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPreventChildOverrides()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHttpConnectionManagerSettings()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpConnectionManagerSettings")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpConnectionManagerSettings(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpConnectionManagerSettings")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.SelectionType.(type) { + + case *DelegatedHttpGateway_Ref: + + if h, ok := interface{}(m.GetRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DelegatedHttpGateway_Selector: + + if h, ok := interface{}(m.GetSelector()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Selector")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSelector(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Selector")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DelegatedTcpGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.DelegatedTcpGateway")); err != nil { + return 0, err + } + + switch m.SelectionType.(type) { + + case *DelegatedTcpGateway_Ref: + + if h, ok := interface{}(m.GetRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DelegatedTcpGateway_Selector: + + if h, ok := interface{}(m.GetSelector()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Selector")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSelector(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Selector")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchedGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.MatchedGateway")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.GatewayType.(type) { + + case *MatchedGateway_HttpGateway: + + if h, ok := interface{}(m.GetHttpGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpGateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpGateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MatchedGateway_TcpGateway: + + if h, ok := interface{}(m.GetTcpGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpGateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpGateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Matcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.Matcher")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SourcePrefixRanges")); err != nil { + return 0, err + } + for i, v := range m.GetSourcePrefixRanges() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("PassthroughCipherSuites")); err != nil { + return 0, err + } + for i, v := range m.GetPassthroughCipherSuites() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gateway/pkg/api/v1/http_gateway.pb.uniquehash.go b/projects/gateway/pkg/api/v1/http_gateway.pb.uniquehash.go new file mode 100644 index 00000000000..6fec7766b05 --- /dev/null +++ b/projects/gateway/pkg/api/v1/http_gateway.pb.uniquehash.go @@ -0,0 +1,263 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gateway/api/v1/http_gateway.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.HttpGateway")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VirtualServices")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualServices() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetVirtualServiceSelector() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetVirtualServiceExpressions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("VirtualServiceExpressions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVirtualServiceExpressions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("VirtualServiceExpressions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("VirtualServiceNamespaces")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualServiceNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualServiceSelectorExpressions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.VirtualServiceSelectorExpressions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Expressions")); err != nil { + return 0, err + } + for i, v := range m.GetExpressions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualServiceSelectorExpressions_Expression) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.VirtualServiceSelectorExpressions_Expression")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Operator")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetOperator()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Values")); err != nil { + return 0, err + } + for i, v := range m.GetValues() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gateway/pkg/api/v1/matchable_http_gateway.pb.uniquehash.go b/projects/gateway/pkg/api/v1/matchable_http_gateway.pb.uniquehash.go new file mode 100644 index 00000000000..81f709af57c --- /dev/null +++ b/projects/gateway/pkg/api/v1/matchable_http_gateway.pb.uniquehash.go @@ -0,0 +1,176 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gateway/api/v1/matchable_http_gateway.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchableHttpGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.MatchableHttpGateway")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHttpGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpGateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpGateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchableHttpGateway_Matcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.MatchableHttpGateway_Matcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SourcePrefixRanges")); err != nil { + return 0, err + } + for i, v := range m.GetSourcePrefixRanges() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gateway/pkg/api/v1/matchable_tcp_gateway.pb.uniquehash.go b/projects/gateway/pkg/api/v1/matchable_tcp_gateway.pb.uniquehash.go new file mode 100644 index 00000000000..624439c30aa --- /dev/null +++ b/projects/gateway/pkg/api/v1/matchable_tcp_gateway.pb.uniquehash.go @@ -0,0 +1,193 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gateway/api/v1/matchable_tcp_gateway.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchableTcpGateway) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.MatchableTcpGateway")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTcpGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpGateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpGateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchableTcpGateway_Matcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.MatchableTcpGateway_Matcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SourcePrefixRanges")); err != nil { + return 0, err + } + for i, v := range m.GetSourcePrefixRanges() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("PassthroughCipherSuites")); err != nil { + return 0, err + } + for i, v := range m.GetPassthroughCipherSuites() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gateway/pkg/api/v1/route_table.pb.uniquehash.go b/projects/gateway/pkg/api/v1/route_table.pb.uniquehash.go new file mode 100644 index 00000000000..ac0f7c170a5 --- /dev/null +++ b/projects/gateway/pkg/api/v1/route_table.pb.uniquehash.go @@ -0,0 +1,117 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gateway/api/v1/route_table.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTable) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.RouteTable")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Routes")); err != nil { + return 0, err + } + for i, v := range m.GetRoutes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gateway/pkg/api/v1/virtual_service.pb.uniquehash.go b/projects/gateway/pkg/api/v1/virtual_service.pb.uniquehash.go new file mode 100644 index 00000000000..4bdc5fc6840 --- /dev/null +++ b/projects/gateway/pkg/api/v1/virtual_service.pb.uniquehash.go @@ -0,0 +1,751 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gateway/api/v1/virtual_service.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.VirtualService")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetVirtualHost()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("VirtualHost")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVirtualHost(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("VirtualHost")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHost) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.VirtualHost")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Domains")); err != nil { + return 0, err + } + for i, v := range m.GetDomains() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Routes")); err != nil { + return 0, err + } + for i, v := range m.GetRoutes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.ExternalOptionsConfig.(type) { + + case *VirtualHost_OptionsConfigRefs: + + if h, ok := interface{}(m.GetOptionsConfigRefs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OptionsConfigRefs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptionsConfigRefs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OptionsConfigRefs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Route) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.Route")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Matchers")); err != nil { + return 0, err + } + for i, v := range m.GetMatchers() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetInheritableMatchers()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InheritableMatchers")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInheritableMatchers(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InheritableMatchers")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInheritablePathMatchers()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InheritablePathMatchers")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInheritablePathMatchers(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InheritablePathMatchers")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.Action.(type) { + + case *Route_RouteAction: + + if h, ok := interface{}(m.GetRouteAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RouteAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRouteAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RouteAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_RedirectAction: + + if h, ok := interface{}(m.GetRedirectAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RedirectAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRedirectAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RedirectAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_DirectResponseAction: + + if h, ok := interface{}(m.GetDirectResponseAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DirectResponseAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectResponseAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DirectResponseAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_DelegateAction: + + if h, ok := interface{}(m.GetDelegateAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DelegateAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDelegateAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DelegateAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_GraphqlApiRef: + + if h, ok := interface{}(m.GetGraphqlApiRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GraphqlApiRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGraphqlApiRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GraphqlApiRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ExternalOptionsConfig.(type) { + + case *Route_OptionsConfigRefs: + + if h, ok := interface{}(m.GetOptionsConfigRefs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OptionsConfigRefs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptionsConfigRefs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OptionsConfigRefs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DelegateOptionsRefs) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.DelegateOptionsRefs")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DelegateOptions")); err != nil { + return 0, err + } + for i, v := range m.GetDelegateOptions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DelegateAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.DelegateAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Namespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNamespace())); err != nil { + return 0, err + } + + switch m.DelegationType.(type) { + + case *DelegateAction_Ref: + + if h, ok := interface{}(m.GetRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DelegateAction_Selector: + + if h, ok := interface{}(m.GetSelector()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Selector")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSelector(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Selector")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTableSelector) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.RouteTableSelector")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Namespaces")); err != nil { + return 0, err + } + for i, v := range m.GetNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetLabels() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Expressions")); err != nil { + return 0, err + } + for i, v := range m.GetExpressions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTableSelector_Expression) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gateway.solo.io.github.com/solo-io/gloo/projects/gateway/pkg/api/v1.RouteTableSelector_Expression")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Operator")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetOperator()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Values")); err != nil { + return 0, err + } + for i, v := range m.GetValues() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/annotations/deprecation.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/annotations/deprecation.pb.uniquehash.go new file mode 100644 index 00000000000..aa4a507dda9 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/annotations/deprecation.pb.uniquehash.go @@ -0,0 +1,28 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/annotations/deprecation.proto + +package annotations + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) diff --git a/projects/gloo/pkg/api/external/envoy/api/v2/cluster/outlier_detection.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/api/v2/cluster/outlier_detection.pb.uniquehash.go new file mode 100644 index 00000000000..d7946a15dc0 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/api/v2/cluster/outlier_detection.pb.uniquehash.go @@ -0,0 +1,335 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/cluster/outlier_detection.proto + +package cluster + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OutlierDetection) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.cluster.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/cluster.OutlierDetection")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConsecutive_5Xx()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Consecutive_5Xx")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsecutive_5Xx(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Consecutive_5Xx")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Interval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Interval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetBaseEjectionTime()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BaseEjectionTime")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBaseEjectionTime(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BaseEjectionTime")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxEjectionPercent()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxEjectionPercent")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxEjectionPercent(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxEjectionPercent")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnforcingConsecutive_5Xx()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnforcingConsecutive_5Xx")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnforcingConsecutive_5Xx(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnforcingConsecutive_5Xx")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnforcingSuccessRate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnforcingSuccessRate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnforcingSuccessRate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnforcingSuccessRate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSuccessRateMinimumHosts()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SuccessRateMinimumHosts")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSuccessRateMinimumHosts(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SuccessRateMinimumHosts")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSuccessRateRequestVolume()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SuccessRateRequestVolume")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSuccessRateRequestVolume(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SuccessRateRequestVolume")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSuccessRateStdevFactor()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SuccessRateStdevFactor")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSuccessRateStdevFactor(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SuccessRateStdevFactor")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConsecutiveGatewayFailure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConsecutiveGatewayFailure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsecutiveGatewayFailure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConsecutiveGatewayFailure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnforcingConsecutiveGatewayFailure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnforcingConsecutiveGatewayFailure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnforcingConsecutiveGatewayFailure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnforcingConsecutiveGatewayFailure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SplitExternalLocalOriginErrors")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSplitExternalLocalOriginErrors()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConsecutiveLocalOriginFailure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConsecutiveLocalOriginFailure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsecutiveLocalOriginFailure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConsecutiveLocalOriginFailure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnforcingConsecutiveLocalOriginFailure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnforcingConsecutiveLocalOriginFailure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnforcingConsecutiveLocalOriginFailure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnforcingConsecutiveLocalOriginFailure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnforcingLocalOriginSuccessRate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnforcingLocalOriginSuccessRate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnforcingLocalOriginSuccessRate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnforcingLocalOriginSuccessRate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/api/v2/core/health_check.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/api/v2/core/health_check.pb.uniquehash.go new file mode 100644 index 00000000000..e9e7efac9cc --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/api/v2/core/health_check.pb.uniquehash.go @@ -0,0 +1,803 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/core/health_check.proto + +package core + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" + + v3 "github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) + + _ = v3.RequestMethod(0) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.core.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/core.HealthCheck")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Interval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Interval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInitialJitter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialJitter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialJitter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialJitter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIntervalJitter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IntervalJitter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIntervalJitter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IntervalJitter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("IntervalJitterPercent")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIntervalJitterPercent()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUnhealthyThreshold()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UnhealthyThreshold")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUnhealthyThreshold(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UnhealthyThreshold")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHealthyThreshold()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthyThreshold")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthyThreshold(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthyThreshold")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetReuseConnection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ReuseConnection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReuseConnection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ReuseConnection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetNoTrafficInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NoTrafficInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNoTrafficInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NoTrafficInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUnhealthyInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UnhealthyInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUnhealthyInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UnhealthyInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUnhealthyEdgeInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UnhealthyEdgeInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUnhealthyEdgeInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UnhealthyEdgeInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHealthyEdgeInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthyEdgeInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthyEdgeInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthyEdgeInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("EventLogPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetEventLogPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AlwaysLogHealthCheckFailures")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAlwaysLogHealthCheckFailures()) + if err != nil { + return 0, err + } + + switch m.HealthChecker.(type) { + + case *HealthCheck_HttpHealthCheck_: + + if h, ok := interface{}(m.GetHttpHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HealthCheck_TcpHealthCheck_: + + if h, ok := interface{}(m.GetTcpHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HealthCheck_GrpcHealthCheck_: + + if h, ok := interface{}(m.GetGrpcHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HealthCheck_CustomHealthCheck_: + + if h, ok := interface{}(m.GetCustomHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CustomHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCustomHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CustomHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_Payload) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.core.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/core.HealthCheck_Payload")); err != nil { + return 0, err + } + + switch m.Payload.(type) { + + case *HealthCheck_Payload_Text: + + if _, err = hasher.Write([]byte("Text")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetText())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_HttpHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.core.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/core.HealthCheck_HttpHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Host")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHost())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("UseHttp2")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUseHttp2()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ExpectedStatuses")); err != nil { + return 0, err + } + for i, v := range m.GetExpectedStatuses() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetResponseAssertions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseAssertions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseAssertions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseAssertions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Method")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMethod()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_TcpHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.core.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/core.HealthCheck_TcpHealthCheck")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Send")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Send")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Receive")); err != nil { + return 0, err + } + for i, v := range m.GetReceive() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_RedisHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.core.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/core.HealthCheck_RedisHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_GrpcHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.core.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/core.HealthCheck_GrpcHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Authority")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthority())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InitialMetadata")); err != nil { + return 0, err + } + for i, v := range m.GetInitialMetadata() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_CustomHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.core.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/core.HealthCheck_CustomHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *HealthCheck_CustomHealthCheck_Config: + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HealthCheck_CustomHealthCheck_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/api/v2/route/route.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/api/v2/route/route.pb.uniquehash.go new file mode 100644 index 00000000000..56395d63e2f --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/api/v2/route/route.pb.uniquehash.go @@ -0,0 +1,3520 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/api/v2/route/route.proto + +package route + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" + + core "github.com/solo-io/solo-kit/pkg/api/external/envoy/api/v2/core" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) + + _ = core.RoutingPriority(0) + + _ = core.RequestMethod(0) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHost) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.VirtualHost")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Domains")); err != nil { + return 0, err + } + for i, v := range m.GetDomains() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Routes")); err != nil { + return 0, err + } + for i, v := range m.GetRoutes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequireTls")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequireTls()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VirtualClusters")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualClusters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + for i, v := range m.GetRateLimits() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetCors()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCors(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTypedPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("IncludeRequestAttemptCount")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIncludeRequestAttemptCount()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRetryPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHedgePolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHedgePolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Route) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.Route")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDecorator()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Decorator")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDecorator(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Decorator")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTypedPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetTracing()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTracing(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Action.(type) { + + case *Route_Route: + + if h, ok := interface{}(m.GetRoute()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Route")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRoute(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Route")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_Redirect: + + if h, ok := interface{}(m.GetRedirect()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Redirect")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRedirect(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Redirect")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_DirectResponse: + + if h, ok := interface{}(m.GetDirectResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DirectResponse")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DirectResponse")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WeightedCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.WeightedCluster")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Clusters")); err != nil { + return 0, err + } + for i, v := range m.GetClusters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetTotalWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TotalWeight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTotalWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TotalWeight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RuntimeKeyPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKeyPrefix())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteMatch")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCaseSensitive()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CaseSensitive")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCaseSensitive(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CaseSensitive")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRuntimeFraction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRuntimeFraction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("QueryParameters")); err != nil { + return 0, err + } + for i, v := range m.GetQueryParameters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetGrpc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.PathSpecifier.(type) { + + case *RouteMatch_Prefix: + + if _, err = hasher.Write([]byte("Prefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefix())); err != nil { + return 0, err + } + + case *RouteMatch_Path: + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + case *RouteMatch_Regex: + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegex())); err != nil { + return 0, err + } + + case *RouteMatch_ConnectMatcher_: + + if h, ok := interface{}(m.GetConnectMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectMatcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectMatcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CorsPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.CorsPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowOrigin")); err != nil { + return 0, err + } + for i, v := range m.GetAllowOrigin() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowOriginRegex")); err != nil { + return 0, err + } + for i, v := range m.GetAllowOriginRegex() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowMethods")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAllowMethods())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowHeaders")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAllowHeaders())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ExposeHeaders")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExposeHeaders())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxAge")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMaxAge())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAllowCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetShadowEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ShadowEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetShadowEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ShadowEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.EnabledSpecifier.(type) { + + case *CorsPolicy_Enabled: + + if h, ok := interface{}(m.GetEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *CorsPolicy_FilterEnabled: + + if h, ok := interface{}(m.GetFilterEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClusterNotFoundResponseCode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClusterNotFoundResponseCode()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadataMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadataMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("PrefixRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefixRewrite())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIdleTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIdleTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequestMirrorPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestMirrorPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestMirrorPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestMirrorPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Priority")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPriority()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + for i, v := range m.GetRateLimits() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetIncludeVhRateLimits()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IncludeVhRateLimits")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIncludeVhRateLimits(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IncludeVhRateLimits")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HashPolicy")); err != nil { + return 0, err + } + for i, v := range m.GetHashPolicy() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetCors()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCors(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxGrpcTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxGrpcTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxGrpcTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxGrpcTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGrpcTimeoutOffset()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcTimeoutOffset")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcTimeoutOffset(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcTimeoutOffset")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UpgradeConfigs")); err != nil { + return 0, err + } + for i, v := range m.GetUpgradeConfigs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("InternalRedirectAction")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInternalRedirectAction()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHedgePolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHedgePolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.ClusterSpecifier.(type) { + + case *RouteAction_Cluster: + + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCluster())); err != nil { + return 0, err + } + + case *RouteAction_ClusterHeader: + + if _, err = hasher.Write([]byte("ClusterHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterHeader())); err != nil { + return 0, err + } + + case *RouteAction_WeightedClusters: + + if h, ok := interface{}(m.GetWeightedClusters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("WeightedClusters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWeightedClusters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("WeightedClusters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.HostRewriteSpecifier.(type) { + + case *RouteAction_HostRewrite: + + if _, err = hasher.Write([]byte("HostRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRewrite())); err != nil { + return 0, err + } + + case *RouteAction_AutoHostRewrite: + + if h, ok := interface{}(m.GetAutoHostRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AutoHostRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAutoHostRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AutoHostRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_AutoHostRewriteHeader: + + if _, err = hasher.Write([]byte("AutoHostRewriteHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAutoHostRewriteHeader())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RetryPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RetryOn")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRetryOn())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetNumRetries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNumRetries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPerTryTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerTryTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerTryTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerTryTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPriority()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPriority")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPriority(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPriority")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RetryHostPredicate")); err != nil { + return 0, err + } + for i, v := range m.GetRetryHostPredicate() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("HostSelectionRetryMaxAttempts")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHostSelectionRetryMaxAttempts()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RetriableStatusCodes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRetriableStatusCodes()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRetryBackOff()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryBackOff(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HedgePolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.HedgePolicy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetInitialRequests()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialRequests")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialRequests(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialRequests")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAdditionalRequestChance()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AdditionalRequestChance")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAdditionalRequestChance(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AdditionalRequestChance")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HedgeOnPerTryTimeout")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHedgeOnPerTryTimeout()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RedirectAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RedirectAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HostRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRedirect())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PortRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPortRedirect()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseCode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseCode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("StripQuery")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStripQuery()) + if err != nil { + return 0, err + } + + switch m.SchemeRewriteSpecifier.(type) { + + case *RedirectAction_HttpsRedirect: + + if _, err = hasher.Write([]byte("HttpsRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHttpsRedirect()) + if err != nil { + return 0, err + } + + case *RedirectAction_SchemeRedirect: + + if _, err = hasher.Write([]byte("SchemeRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSchemeRedirect())); err != nil { + return 0, err + } + + } + + switch m.PathRewriteSpecifier.(type) { + + case *RedirectAction_PathRedirect: + + if _, err = hasher.Write([]byte("PathRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPathRedirect())); err != nil { + return 0, err + } + + case *RedirectAction_PrefixRewrite: + + if _, err = hasher.Write([]byte("PrefixRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefixRewrite())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DirectResponseAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.DirectResponseAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Status")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStatus()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Decorator) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.Decorator")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Operation")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetOperation())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Tracing) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.Tracing")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClientSampling()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClientSampling")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClientSampling(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClientSampling")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRandomSampling()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RandomSampling")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRandomSampling(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RandomSampling")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOverallSampling()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OverallSampling")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverallSampling(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OverallSampling")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.VirtualCluster")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Pattern")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPattern())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Method")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMethod()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetStage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DisableKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDisableKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Actions")); err != nil { + return 0, err + } + for i, v := range m.GetActions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.HeaderMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InvertMatch")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInvertMatch()) + if err != nil { + return 0, err + } + + switch m.HeaderMatchSpecifier.(type) { + + case *HeaderMatcher_ExactMatch: + + if _, err = hasher.Write([]byte("ExactMatch")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExactMatch())); err != nil { + return 0, err + } + + case *HeaderMatcher_RegexMatch: + + if _, err = hasher.Write([]byte("RegexMatch")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegexMatch())); err != nil { + return 0, err + } + + case *HeaderMatcher_RangeMatch: + + if h, ok := interface{}(m.GetRangeMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RangeMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRangeMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RangeMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HeaderMatcher_PresentMatch: + + if _, err = hasher.Write([]byte("PresentMatch")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPresentMatch()) + if err != nil { + return 0, err + } + + case *HeaderMatcher_PrefixMatch: + + if _, err = hasher.Write([]byte("PrefixMatch")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefixMatch())); err != nil { + return 0, err + } + + case *HeaderMatcher_SuffixMatch: + + if _, err = hasher.Write([]byte("SuffixMatch")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSuffixMatch())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *QueryParameterMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.QueryParameterMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRegex()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRegex(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WeightedCluster_ClusterWeight) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.WeightedCluster_ClusterWeight")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadataMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadataMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTypedPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteMatch_ConnectMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteMatch_ConnectMatcher")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteMatch_GrpcRouteMatchOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteMatch_GrpcRouteMatchOptions")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_RequestMirrorPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteAction_RequestMirrorPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCluster())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RuntimeKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKey())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRuntimeFraction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRuntimeFraction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteAction_HashPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Terminal")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTerminal()) + if err != nil { + return 0, err + } + + switch m.PolicySpecifier.(type) { + + case *RouteAction_HashPolicy_Header_: + + if h, ok := interface{}(m.GetHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_HashPolicy_Cookie_: + + if h, ok := interface{}(m.GetCookie()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCookie(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_HashPolicy_ConnectionProperties_: + + if h, ok := interface{}(m.GetConnectionProperties()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionProperties")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionProperties(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionProperties")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_UpgradeConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteAction_UpgradeConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UpgradeType")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUpgradeType())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_Header) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteAction_HashPolicy_Header")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeaderName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_Cookie) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteAction_HashPolicy_Cookie")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTtl()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ttl")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTtl(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ttl")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_ConnectionProperties) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RouteAction_HashPolicy_ConnectionProperties")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SourceIp")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSourceIp()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy_RetryPriority) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RetryPolicy_RetryPriority")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryPriority_Config: + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RetryPolicy_RetryPriority_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy_RetryHostPredicate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RetryPolicy_RetryHostPredicate")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryHostPredicate_Config: + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RetryPolicy_RetryHostPredicate_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy_RetryBackOff) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RetryPolicy_RetryBackOff")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBaseInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBaseInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit_Action")); err != nil { + return 0, err + } + + switch m.ActionSpecifier.(type) { + + case *RateLimit_Action_SourceCluster_: + + if h, ok := interface{}(m.GetSourceCluster()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SourceCluster")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSourceCluster(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SourceCluster")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_DestinationCluster_: + + if h, ok := interface{}(m.GetDestinationCluster()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DestinationCluster")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDestinationCluster(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DestinationCluster")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_RequestHeaders_: + + if h, ok := interface{}(m.GetRequestHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestHeaders")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestHeaders")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_RemoteAddress_: + + if h, ok := interface{}(m.GetRemoteAddress()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RemoteAddress")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemoteAddress(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RemoteAddress")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_GenericKey_: + + if h, ok := interface{}(m.GetGenericKey()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GenericKey")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGenericKey(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GenericKey")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_HeaderValueMatch_: + + if h, ok := interface{}(m.GetHeaderValueMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderValueMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderValueMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderValueMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_SourceCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit_Action_SourceCluster")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_DestinationCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit_Action_DestinationCluster")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_RequestHeaders) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit_Action_RequestHeaders")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeaderName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DescriptorKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescriptorKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_RemoteAddress) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit_Action_RemoteAddress")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_GenericKey) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit_Action_GenericKey")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DescriptorValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescriptorValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_HeaderValueMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.api.v2.route.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/api/v2/route.RateLimit_Action_HeaderValueMatch")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DescriptorValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescriptorValue())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetExpectMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExpectMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExpectMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExpectMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/common/mutation_rules/v3/mutation_rules.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/common/mutation_rules/v3/mutation_rules.pb.uniquehash.go new file mode 100644 index 00000000000..c3545724434 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/common/mutation_rules/v3/mutation_rules.pb.uniquehash.go @@ -0,0 +1,241 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/common/mutation_rules/v3/mutation_rules.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderMutationRules) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.common.mutation_rules.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/common/mutation_rules/v3.HeaderMutationRules")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAllowAllRouting()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowAllRouting")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowAllRouting(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowAllRouting")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAllowEnvoy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowEnvoy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowEnvoy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowEnvoy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisallowSystem()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisallowSystem")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisallowSystem(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisallowSystem")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisallowAll()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisallowAll")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisallowAll(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisallowAll")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAllowExpression()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowExpression")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowExpression(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowExpression")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisallowExpression()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisallowExpression")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisallowExpression(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisallowExpression")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisallowIsError()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisallowIsError")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisallowIsError(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisallowIsError")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderMutation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.common.mutation_rules.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/common/mutation_rules/v3.HeaderMutation")); err != nil { + return 0, err + } + + switch m.Action.(type) { + + case *HeaderMutation_Remove: + + if _, err = hasher.Write([]byte("Remove")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRemove())); err != nil { + return 0, err + } + + case *HeaderMutation_Append: + + if h, ok := interface{}(m.GetAppend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/address.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/address.pb.uniquehash.go new file mode 100644 index 00000000000..aab346c7689 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/address.pb.uniquehash.go @@ -0,0 +1,415 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/address.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Pipe) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.Pipe")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Mode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMode()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SocketAddress) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.SocketAddress")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Protocol")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetProtocol()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResolverName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetResolverName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Ipv4Compat")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIpv4Compat()) + if err != nil { + return 0, err + } + + switch m.PortSpecifier.(type) { + + case *SocketAddress_PortValue: + + if _, err = hasher.Write([]byte("PortValue")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPortValue()) + if err != nil { + return 0, err + } + + case *SocketAddress_NamedPort: + + if _, err = hasher.Write([]byte("NamedPort")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNamedPort())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpKeepalive) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.TcpKeepalive")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetKeepaliveProbes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KeepaliveProbes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKeepaliveProbes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KeepaliveProbes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetKeepaliveTime()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KeepaliveTime")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKeepaliveTime(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KeepaliveTime")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetKeepaliveInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KeepaliveInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKeepaliveInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KeepaliveInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BindConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.BindConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSourceAddress()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SourceAddress")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSourceAddress(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SourceAddress")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFreebind()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Freebind")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFreebind(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Freebind")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SocketOptions")); err != nil { + return 0, err + } + for i, v := range m.GetSocketOptions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Address) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.Address")); err != nil { + return 0, err + } + + switch m.Address.(type) { + + case *Address_SocketAddress: + + if h, ok := interface{}(m.GetSocketAddress()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SocketAddress")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSocketAddress(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SocketAddress")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Address_Pipe: + + if h, ok := interface{}(m.GetPipe()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Pipe")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPipe(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Pipe")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CidrRange) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.CidrRange")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AddressPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddressPrefix())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPrefixLen()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PrefixLen")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPrefixLen(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PrefixLen")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/backoff.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/backoff.pb.uniquehash.go new file mode 100644 index 00000000000..2072c824408 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/backoff.pb.uniquehash.go @@ -0,0 +1,87 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/backoff.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BackoffStrategy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.BackoffStrategy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBaseInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBaseInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/base.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/base.pb.uniquehash.go new file mode 100644 index 00000000000..bbb46c7f880 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/base.pb.uniquehash.go @@ -0,0 +1,1069 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/base.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Locality) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.Locality")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Region")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegion())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Zone")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetZone())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SubZone")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSubZone())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BuildVersion) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.BuildVersion")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetVersion()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Version")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVersion(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Version")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Extension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.Extension")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Category")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCategory())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TypeDescriptor")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTypeDescriptor())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetVersion()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Version")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVersion(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Version")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Disabled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisabled()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Node) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.Node")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Id")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCluster())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetLocality()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Locality")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocality(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Locality")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UserAgentName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserAgentName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + for i, v := range m.GetExtensions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ClientFeatures")); err != nil { + return 0, err + } + for i, v := range m.GetClientFeatures() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ListeningAddresses")); err != nil { + return 0, err + } + for i, v := range m.GetListeningAddresses() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.UserAgentVersionType.(type) { + + case *Node_UserAgentVersion: + + if _, err = hasher.Write([]byte("UserAgentVersion")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserAgentVersion())); err != nil { + return 0, err + } + + case *Node_UserAgentBuildVersion: + + if h, ok := interface{}(m.GetUserAgentBuildVersion()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UserAgentBuildVersion")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUserAgentBuildVersion(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UserAgentBuildVersion")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Metadata) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.Metadata")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetFilterMetadata() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RuntimeUInt32) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.RuntimeUInt32")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDefaultValue()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RuntimeKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RuntimeDouble) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.RuntimeDouble")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDefaultValue()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RuntimeKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RuntimeFeatureFlag) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.RuntimeFeatureFlag")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDefaultValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDefaultValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RuntimeKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderValue) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HeaderValue")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderValueOption) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HeaderValueOption")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAppend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderMap) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HeaderMap")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DataSource) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.DataSource")); err != nil { + return 0, err + } + + switch m.Specifier.(type) { + + case *DataSource_Filename: + + if _, err = hasher.Write([]byte("Filename")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetFilename())); err != nil { + return 0, err + } + + case *DataSource_InlineBytes: + + if _, err = hasher.Write([]byte("InlineBytes")); err != nil { + return 0, err + } + if _, err = hasher.Write(m.GetInlineBytes()); err != nil { + return 0, err + } + + case *DataSource_InlineString: + + if _, err = hasher.Write([]byte("InlineString")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetInlineString())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.RetryPolicy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRetryBackOff()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryBackOff(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetNumRetries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNumRetries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RemoteDataSource) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.RemoteDataSource")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHttpUri()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpUri")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpUri(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpUri")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Sha256")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSha256())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRetryPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AsyncDataSource) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.AsyncDataSource")); err != nil { + return 0, err + } + + switch m.Specifier.(type) { + + case *AsyncDataSource_Local: + + if h, ok := interface{}(m.GetLocal()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Local")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocal(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Local")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AsyncDataSource_Remote: + + if h, ok := interface{}(m.GetRemote()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Remote")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemote(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Remote")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransportSocket) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.TransportSocket")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *TransportSocket_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RuntimeFractionalPercent) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.RuntimeFractionalPercent")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDefaultValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDefaultValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RuntimeKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ControlPlane) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.ControlPlane")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Identifier")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIdentifier())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/event_service_config.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/event_service_config.pb.uniquehash.go new file mode 100644 index 00000000000..3f75120665d --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/event_service_config.pb.uniquehash.go @@ -0,0 +1,73 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/event_service_config.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *EventServiceConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.EventServiceConfig")); err != nil { + return 0, err + } + + switch m.ConfigSourceSpecifier.(type) { + + case *EventServiceConfig_GrpcService: + + if h, ok := interface{}(m.GetGrpcService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/extension.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/extension.pb.uniquehash.go new file mode 100644 index 00000000000..47b21d25f8a --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/extension.pb.uniquehash.go @@ -0,0 +1,74 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/extension.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TypedExtensionConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.TypedExtensionConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/grpc_service.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/grpc_service.pb.uniquehash.go new file mode 100644 index 00000000000..cb45542cb0b --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/grpc_service.pb.uniquehash.go @@ -0,0 +1,963 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/grpc_service.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("InitialMetadata")); err != nil { + return 0, err + } + for i, v := range m.GetInitialMetadata() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.TargetSpecifier.(type) { + + case *GrpcService_EnvoyGrpc_: + + if h, ok := interface{}(m.GetEnvoyGrpc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnvoyGrpc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnvoyGrpc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnvoyGrpc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GrpcService_GoogleGrpc_: + + if h, ok := interface{}(m.GetGoogleGrpc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GoogleGrpc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGoogleGrpc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GoogleGrpc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_EnvoyGrpc) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_EnvoyGrpc")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClusterName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TargetUri")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTargetUri())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetChannelCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ChannelCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetChannelCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ChannelCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("CallCredentials")); err != nil { + return 0, err + } + for i, v := range m.GetCallCredentials() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStatPrefix())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CredentialsFactoryName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCredentialsFactoryName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPerStreamBufferLimitBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerStreamBufferLimitBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerStreamBufferLimitBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerStreamBufferLimitBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetChannelArgs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ChannelArgs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetChannelArgs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ChannelArgs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_SslCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_SslCredentials")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRootCerts()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RootCerts")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRootCerts(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RootCerts")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPrivateKey()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PrivateKey")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPrivateKey(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PrivateKey")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCertChain()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CertChain")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCertChain(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CertChain")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_GoogleLocalCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_GoogleLocalCredentials")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_ChannelCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_ChannelCredentials")); err != nil { + return 0, err + } + + switch m.CredentialSpecifier.(type) { + + case *GrpcService_GoogleGrpc_ChannelCredentials_SslCredentials: + + if h, ok := interface{}(m.GetSslCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GrpcService_GoogleGrpc_ChannelCredentials_GoogleDefault: + + if h, ok := interface{}(m.GetGoogleDefault()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GoogleDefault")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGoogleDefault(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GoogleDefault")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GrpcService_GoogleGrpc_ChannelCredentials_LocalCredentials: + + if h, ok := interface{}(m.GetLocalCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_CallCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_CallCredentials")); err != nil { + return 0, err + } + + switch m.CredentialSpecifier.(type) { + + case *GrpcService_GoogleGrpc_CallCredentials_AccessToken: + + if _, err = hasher.Write([]byte("AccessToken")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAccessToken())); err != nil { + return 0, err + } + + case *GrpcService_GoogleGrpc_CallCredentials_GoogleComputeEngine: + + if h, ok := interface{}(m.GetGoogleComputeEngine()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GoogleComputeEngine")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGoogleComputeEngine(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GoogleComputeEngine")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GrpcService_GoogleGrpc_CallCredentials_GoogleRefreshToken: + + if _, err = hasher.Write([]byte("GoogleRefreshToken")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetGoogleRefreshToken())); err != nil { + return 0, err + } + + case *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJwtAccess: + + if h, ok := interface{}(m.GetServiceAccountJwtAccess()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceAccountJwtAccess")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceAccountJwtAccess(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceAccountJwtAccess")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GrpcService_GoogleGrpc_CallCredentials_GoogleIam: + + if h, ok := interface{}(m.GetGoogleIam()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GoogleIam")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGoogleIam(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GoogleIam")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GrpcService_GoogleGrpc_CallCredentials_FromPlugin: + + if h, ok := interface{}(m.GetFromPlugin()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FromPlugin")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFromPlugin(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FromPlugin")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GrpcService_GoogleGrpc_CallCredentials_StsService_: + + if h, ok := interface{}(m.GetStsService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StsService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStsService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StsService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_ChannelArgs) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_ChannelArgs")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetArgs() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("JsonKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetJsonKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TokenLifetimeSeconds")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTokenLifetimeSeconds()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AuthorizationToken")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthorizationToken())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AuthoritySelector")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthoritySelector())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_CallCredentials_StsService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_CallCredentials_StsService")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TokenExchangeServiceUri")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTokenExchangeServiceUri())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Resource")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetResource())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Audience")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAudience())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scope")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetScope())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestedTokenType")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRequestedTokenType())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SubjectTokenPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSubjectTokenPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SubjectTokenType")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSubjectTokenType())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ActorTokenPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetActorTokenPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ActorTokenType")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetActorTokenType())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService_GoogleGrpc_ChannelArgs_Value) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.GrpcService_GoogleGrpc_ChannelArgs_Value")); err != nil { + return 0, err + } + + switch m.ValueSpecifier.(type) { + + case *GrpcService_GoogleGrpc_ChannelArgs_Value_StringValue: + + if _, err = hasher.Write([]byte("StringValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStringValue())); err != nil { + return 0, err + } + + case *GrpcService_GoogleGrpc_ChannelArgs_Value_IntValue: + + if _, err = hasher.Write([]byte("IntValue")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIntValue()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/health_check.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/health_check.pb.uniquehash.go new file mode 100644 index 00000000000..e4d7d8efcfc --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/health_check.pb.uniquehash.go @@ -0,0 +1,917 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/health_check.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Interval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Interval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInitialJitter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialJitter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialJitter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialJitter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIntervalJitter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IntervalJitter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIntervalJitter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IntervalJitter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("IntervalJitterPercent")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIntervalJitterPercent()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUnhealthyThreshold()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UnhealthyThreshold")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUnhealthyThreshold(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UnhealthyThreshold")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHealthyThreshold()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthyThreshold")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthyThreshold(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthyThreshold")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAltPort()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AltPort")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAltPort(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AltPort")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetReuseConnection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ReuseConnection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReuseConnection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ReuseConnection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetNoTrafficInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NoTrafficInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNoTrafficInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NoTrafficInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUnhealthyInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UnhealthyInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUnhealthyInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UnhealthyInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUnhealthyEdgeInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UnhealthyEdgeInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUnhealthyEdgeInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UnhealthyEdgeInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHealthyEdgeInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthyEdgeInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthyEdgeInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthyEdgeInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("EventLogPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetEventLogPath())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEventService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EventService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEventService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EventService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("AlwaysLogHealthCheckFailures")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAlwaysLogHealthCheckFailures()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTlsOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TlsOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTlsOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TlsOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTransportSocketMatchCriteria()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TransportSocketMatchCriteria")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransportSocketMatchCriteria(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TransportSocketMatchCriteria")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.HealthChecker.(type) { + + case *HealthCheck_HttpHealthCheck_: + + if h, ok := interface{}(m.GetHttpHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HealthCheck_TcpHealthCheck_: + + if h, ok := interface{}(m.GetTcpHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HealthCheck_GrpcHealthCheck_: + + if h, ok := interface{}(m.GetGrpcHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HealthCheck_CustomHealthCheck_: + + if h, ok := interface{}(m.GetCustomHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CustomHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCustomHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CustomHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_Payload) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck_Payload")); err != nil { + return 0, err + } + + switch m.Payload.(type) { + + case *HealthCheck_Payload_Text: + + if _, err = hasher.Write([]byte("Text")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetText())); err != nil { + return 0, err + } + + case *HealthCheck_Payload_Binary: + + if _, err = hasher.Write([]byte("Binary")); err != nil { + return 0, err + } + if _, err = hasher.Write(m.GetBinary()); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_HttpHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck_HttpHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Host")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHost())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Send")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Send")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetReceive()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Receive")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReceive(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Receive")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ExpectedStatuses")); err != nil { + return 0, err + } + for i, v := range m.GetExpectedStatuses() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("CodecClientType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCodecClientType()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetServiceNameMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceNameMatcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceNameMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceNameMatcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponseAssertions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseAssertions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseAssertions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseAssertions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_TcpHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck_TcpHealthCheck")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Send")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Send")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Receive")); err != nil { + return 0, err + } + for i, v := range m.GetReceive() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_RedisHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck_RedisHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_GrpcHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck_GrpcHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Authority")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthority())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_CustomHealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck_CustomHealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *HealthCheck_CustomHealthCheck_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck_TlsOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HealthCheck_TlsOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AlpnProtocols")); err != nil { + return 0, err + } + for i, v := range m.GetAlpnProtocols() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/http_uri.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/http_uri.pb.uniquehash.go new file mode 100644 index 00000000000..5bc12db824a --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/http_uri.pb.uniquehash.go @@ -0,0 +1,87 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/http_uri.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpUri) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.HttpUri")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Uri")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUri())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.HttpUpstreamType.(type) { + + case *HttpUri_Cluster: + + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCluster())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/proxy_protocol.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/proxy_protocol.pb.uniquehash.go new file mode 100644 index 00000000000..4df30af9e1f --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/proxy_protocol.pb.uniquehash.go @@ -0,0 +1,110 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/proxy_protocol.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProxyProtocolPassThroughTLVs) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.ProxyProtocolPassThroughTLVs")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MatchType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMatchType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlvType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTlvType()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProxyProtocolConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.ProxyProtocolConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Version")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetVersion()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPassThroughTlvs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PassThroughTlvs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPassThroughTlvs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PassThroughTlvs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/core/v3/socket_option.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/core/v3/socket_option.pb.uniquehash.go new file mode 100644 index 00000000000..3fe5fe05be6 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/core/v3/socket_option.pb.uniquehash.go @@ -0,0 +1,101 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/core/v3/socket_option.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SocketOption) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.core.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/core/v3.SocketOption")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Description")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescription())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Level")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetLevel()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetName()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("State")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetState()) + if err != nil { + return 0, err + } + + switch m.Value.(type) { + + case *SocketOption_IntValue: + + if _, err = hasher.Write([]byte("IntValue")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIntValue()) + if err != nil { + return 0, err + } + + case *SocketOption_BufValue: + + if _, err = hasher.Write([]byte("BufValue")); err != nil { + return 0, err + } + if _, err = hasher.Write(m.GetBufValue()); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/filter/http/gzip/v2/gzip.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/filter/http/gzip/v2/gzip.pb.uniquehash.go new file mode 100644 index 00000000000..e75d20bcfbe --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/filter/http/gzip/v2/gzip.pb.uniquehash.go @@ -0,0 +1,175 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/filter/http/gzip/v2/gzip.proto + +package v2 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Gzip) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.filter.http.gzip.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/filter/http/gzip/v2.Gzip")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMemoryLevel()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MemoryLevel")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMemoryLevel(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MemoryLevel")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetContentLength()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ContentLength")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetContentLength(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ContentLength")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("CompressionLevel")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCompressionLevel()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CompressionStrategy")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCompressionStrategy()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ContentType")); err != nil { + return 0, err + } + for i, v := range m.GetContentType() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("DisableOnEtagHeader")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisableOnEtagHeader()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RemoveAcceptEncodingHeader")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRemoveAcceptEncodingHeader()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetWindowBits()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("WindowBits")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWindowBits(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("WindowBits")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Gzip_CompressionLevel) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.filter.http.gzip.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/filter/http/gzip/v2.Gzip_CompressionLevel")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/filter/listener/tls_cipher_inspector/v3/tls_cipher_inspector.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/filter/listener/tls_cipher_inspector/v3/tls_cipher_inspector.pb.uniquehash.go new file mode 100644 index 00000000000..37e468601f7 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/filter/listener/tls_cipher_inspector/v3/tls_cipher_inspector.pb.uniquehash.go @@ -0,0 +1,47 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/filter/listener/tls_cipher_inspector/v3/tls_cipher_inspector.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TlsCipherInspector) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.listener.tls_cipher_inspector.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/filter/listener/tls_cipher_inspector/v3.TlsCipherInspector")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/matching/custom_matchers/server_name/v3/server_name_matcher.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/matching/custom_matchers/server_name/v3/server_name_matcher.pb.uniquehash.go new file mode 100644 index 00000000000..d974b64b69d --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/matching/custom_matchers/server_name/v3/server_name_matcher.pb.uniquehash.go @@ -0,0 +1,133 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/matching/custom_matchers/server_name/v3/server_name_matcher.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServerNameMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.matching.custom_matchers.server_name.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/matching/custom_matchers/server_name/v3.ServerNameMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServerNameMatchers")); err != nil { + return 0, err + } + for i, v := range m.GetServerNameMatchers() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServerNameMatcher_ServerNameSetMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.matching.custom_matchers.server_name.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/matching/custom_matchers/server_name/v3.ServerNameMatcher_ServerNameSetMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServerNames")); err != nil { + return 0, err + } + for i, v := range m.GetServerNames() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetOnMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OnMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOnMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OnMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/matching/inputs/cipher_detection_input/v3/cipher_detection_input.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/matching/inputs/cipher_detection_input/v3/cipher_detection_input.pb.uniquehash.go new file mode 100644 index 00000000000..c4dd870f344 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/matching/inputs/cipher_detection_input/v3/cipher_detection_input.pb.uniquehash.go @@ -0,0 +1,63 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/matching/inputs/cipher_detection_input/v3/cipher_detection_input.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CipherDetectionInput) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.matching.cipher_detection_input.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/matching/inputs/cipher_detection_input/v3.CipherDetectionInput")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PassthroughCiphers")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPassthroughCiphers()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TerminatingCiphers")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTerminatingCiphers()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/route/v3/route_components.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/route/v3/route_components.pb.uniquehash.go new file mode 100644 index 00000000000..13410d80acb --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/route/v3/route_components.pb.uniquehash.go @@ -0,0 +1,4229 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/route/v3/route_components.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHost) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.VirtualHost")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Domains")); err != nil { + return 0, err + } + for i, v := range m.GetDomains() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Routes")); err != nil { + return 0, err + } + for i, v := range m.GetRoutes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequireTls")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequireTls()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VirtualClusters")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualClusters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + for i, v := range m.GetRateLimits() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetCors()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCors(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTypedPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("IncludeRequestAttemptCount")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIncludeRequestAttemptCount()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IncludeAttemptCountInResponse")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIncludeAttemptCountInResponse()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRetryPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPolicyTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicyTypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicyTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicyTypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHedgePolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHedgePolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPerRequestBufferLimitBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerRequestBufferLimitBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerRequestBufferLimitBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerRequestBufferLimitBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FilterAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.FilterAction")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Action")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Action")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Route) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.Route")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDecorator()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Decorator")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDecorator(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Decorator")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTypedPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetTracing()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTracing(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPerRequestBufferLimitBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerRequestBufferLimitBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerRequestBufferLimitBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerRequestBufferLimitBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Action.(type) { + + case *Route_Route: + + if h, ok := interface{}(m.GetRoute()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Route")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRoute(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Route")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_Redirect: + + if h, ok := interface{}(m.GetRedirect()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Redirect")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRedirect(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Redirect")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_DirectResponse: + + if h, ok := interface{}(m.GetDirectResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DirectResponse")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DirectResponse")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_FilterAction: + + if h, ok := interface{}(m.GetFilterAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WeightedCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.WeightedCluster")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Clusters")); err != nil { + return 0, err + } + for i, v := range m.GetClusters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetTotalWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TotalWeight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTotalWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TotalWeight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RuntimeKeyPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKeyPrefix())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteMatch")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCaseSensitive()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CaseSensitive")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCaseSensitive(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CaseSensitive")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRuntimeFraction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRuntimeFraction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("QueryParameters")); err != nil { + return 0, err + } + for i, v := range m.GetQueryParameters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetGrpc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTlsContext()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TlsContext")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTlsContext(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TlsContext")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.PathSpecifier.(type) { + + case *RouteMatch_Prefix: + + if _, err = hasher.Write([]byte("Prefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefix())); err != nil { + return 0, err + } + + case *RouteMatch_Path: + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + case *RouteMatch_SafeRegex: + + if h, ok := interface{}(m.GetSafeRegex()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SafeRegex")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSafeRegex(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SafeRegex")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteMatch_ConnectMatcher_: + + if h, ok := interface{}(m.GetConnectMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectMatcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectMatcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CorsPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.CorsPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowOriginStringMatch")); err != nil { + return 0, err + } + for i, v := range m.GetAllowOriginStringMatch() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("AllowMethods")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAllowMethods())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowHeaders")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAllowHeaders())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ExposeHeaders")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExposeHeaders())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxAge")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMaxAge())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAllowCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetShadowEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ShadowEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetShadowEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ShadowEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.EnabledSpecifier.(type) { + + case *CorsPolicy_FilterEnabled: + + if h, ok := interface{}(m.GetFilterEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClusterNotFoundResponseCode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClusterNotFoundResponseCode()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadataMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadataMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("PrefixRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefixRewrite())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRegexRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRegexRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIdleTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIdleTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPolicyTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicyTypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicyTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicyTypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestMirrorPolicies")); err != nil { + return 0, err + } + for i, v := range m.GetRequestMirrorPolicies() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Priority")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPriority()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + for i, v := range m.GetRateLimits() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetIncludeVhRateLimits()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IncludeVhRateLimits")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIncludeVhRateLimits(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IncludeVhRateLimits")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HashPolicy")); err != nil { + return 0, err + } + for i, v := range m.GetHashPolicy() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetCors()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCors(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxGrpcTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxGrpcTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxGrpcTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxGrpcTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGrpcTimeoutOffset()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcTimeoutOffset")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcTimeoutOffset(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcTimeoutOffset")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UpgradeConfigs")); err != nil { + return 0, err + } + for i, v := range m.GetUpgradeConfigs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetInternalRedirectPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InternalRedirectPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInternalRedirectPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InternalRedirectPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("InternalRedirectAction")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInternalRedirectAction()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxInternalRedirects()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInternalRedirects")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInternalRedirects(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInternalRedirects")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHedgePolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHedgePolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HedgePolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.ClusterSpecifier.(type) { + + case *RouteAction_Cluster: + + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCluster())); err != nil { + return 0, err + } + + case *RouteAction_ClusterHeader: + + if _, err = hasher.Write([]byte("ClusterHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterHeader())); err != nil { + return 0, err + } + + case *RouteAction_WeightedClusters: + + if h, ok := interface{}(m.GetWeightedClusters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("WeightedClusters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWeightedClusters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("WeightedClusters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.HostRewriteSpecifier.(type) { + + case *RouteAction_HostRewriteLiteral: + + if _, err = hasher.Write([]byte("HostRewriteLiteral")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRewriteLiteral())); err != nil { + return 0, err + } + + case *RouteAction_AutoHostRewrite: + + if h, ok := interface{}(m.GetAutoHostRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AutoHostRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAutoHostRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AutoHostRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_HostRewriteHeader: + + if _, err = hasher.Write([]byte("HostRewriteHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRewriteHeader())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RetryPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RetryOn")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRetryOn())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetNumRetries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNumRetries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPerTryTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerTryTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerTryTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerTryTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPriority()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPriority")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPriority(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPriority")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RetryHostPredicate")); err != nil { + return 0, err + } + for i, v := range m.GetRetryHostPredicate() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("HostSelectionRetryMaxAttempts")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHostSelectionRetryMaxAttempts()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RetriableStatusCodes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRetriableStatusCodes()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRetryBackOff()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryBackOff(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RetriableHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetRetriableHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RetriableRequestHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetRetriableRequestHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HedgePolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.HedgePolicy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetInitialRequests()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialRequests")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialRequests(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialRequests")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAdditionalRequestChance()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AdditionalRequestChance")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAdditionalRequestChance(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AdditionalRequestChance")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HedgeOnPerTryTimeout")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHedgeOnPerTryTimeout()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RedirectAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RedirectAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HostRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRedirect())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PortRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPortRedirect()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseCode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseCode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("StripQuery")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStripQuery()) + if err != nil { + return 0, err + } + + switch m.SchemeRewriteSpecifier.(type) { + + case *RedirectAction_HttpsRedirect: + + if _, err = hasher.Write([]byte("HttpsRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHttpsRedirect()) + if err != nil { + return 0, err + } + + case *RedirectAction_SchemeRedirect: + + if _, err = hasher.Write([]byte("SchemeRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSchemeRedirect())); err != nil { + return 0, err + } + + } + + switch m.PathRewriteSpecifier.(type) { + + case *RedirectAction_PathRedirect: + + if _, err = hasher.Write([]byte("PathRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPathRedirect())); err != nil { + return 0, err + } + + case *RedirectAction_PrefixRewrite: + + if _, err = hasher.Write([]byte("PrefixRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefixRewrite())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DirectResponseAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.DirectResponseAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Status")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStatus()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Decorator) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.Decorator")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Operation")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetOperation())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPropagate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Propagate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPropagate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Propagate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Tracing) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.Tracing")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClientSampling()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClientSampling")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClientSampling(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClientSampling")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRandomSampling()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RandomSampling")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRandomSampling(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RandomSampling")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOverallSampling()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OverallSampling")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverallSampling(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OverallSampling")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("CustomTags")); err != nil { + return 0, err + } + for i, v := range m.GetCustomTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.VirtualCluster")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetStage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DisableKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDisableKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Actions")); err != nil { + return 0, err + } + for i, v := range m.GetActions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetLimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Limit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Limit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.HeaderMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InvertMatch")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInvertMatch()) + if err != nil { + return 0, err + } + + switch m.HeaderMatchSpecifier.(type) { + + case *HeaderMatcher_ExactMatch: + + if _, err = hasher.Write([]byte("ExactMatch")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExactMatch())); err != nil { + return 0, err + } + + case *HeaderMatcher_SafeRegexMatch: + + if h, ok := interface{}(m.GetSafeRegexMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SafeRegexMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSafeRegexMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SafeRegexMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HeaderMatcher_RangeMatch: + + if h, ok := interface{}(m.GetRangeMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RangeMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRangeMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RangeMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HeaderMatcher_PresentMatch: + + if _, err = hasher.Write([]byte("PresentMatch")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPresentMatch()) + if err != nil { + return 0, err + } + + case *HeaderMatcher_PrefixMatch: + + if _, err = hasher.Write([]byte("PrefixMatch")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefixMatch())); err != nil { + return 0, err + } + + case *HeaderMatcher_SuffixMatch: + + if _, err = hasher.Write([]byte("SuffixMatch")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSuffixMatch())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *QueryParameterMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.QueryParameterMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.QueryParameterMatchSpecifier.(type) { + + case *QueryParameterMatcher_StringMatch: + + if h, ok := interface{}(m.GetStringMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StringMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStringMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StringMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *QueryParameterMatcher_PresentMatch: + + if _, err = hasher.Write([]byte("PresentMatch")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPresentMatch()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *InternalRedirectPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.InternalRedirectPolicy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxInternalRedirects()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInternalRedirects")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInternalRedirects(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInternalRedirects")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RedirectResponseCodes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRedirectResponseCodes()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Predicates")); err != nil { + return 0, err + } + for i, v := range m.GetPredicates() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("AllowCrossSchemeRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAllowCrossSchemeRedirect()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WeightedCluster_ClusterWeight) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.WeightedCluster_ClusterWeight")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadataMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadataMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MetadataMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTypedPerFilterConfig() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteMatch_GrpcRouteMatchOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteMatch_GrpcRouteMatchOptions")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteMatch_TlsContextMatchOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteMatch_TlsContextMatchOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPresented()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Presented")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPresented(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Presented")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetValidated()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Validated")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValidated(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Validated")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteMatch_ConnectMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteMatch_ConnectMatcher")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_RequestMirrorPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_RequestMirrorPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCluster())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRuntimeFraction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRuntimeFraction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RuntimeFraction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTraceSampled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TraceSampled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTraceSampled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TraceSampled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_HashPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Terminal")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTerminal()) + if err != nil { + return 0, err + } + + switch m.PolicySpecifier.(type) { + + case *RouteAction_HashPolicy_Header_: + + if h, ok := interface{}(m.GetHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_HashPolicy_Cookie_: + + if h, ok := interface{}(m.GetCookie()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCookie(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_HashPolicy_ConnectionProperties_: + + if h, ok := interface{}(m.GetConnectionProperties()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionProperties")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionProperties(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionProperties")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_HashPolicy_QueryParameter_: + + if h, ok := interface{}(m.GetQueryParameter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("QueryParameter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetQueryParameter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("QueryParameter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_HashPolicy_FilterState_: + + if h, ok := interface{}(m.GetFilterState()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterState")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterState(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterState")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_UpgradeConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_UpgradeConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UpgradeType")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUpgradeType())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConnectConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_Header) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_HashPolicy_Header")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeaderName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRegexRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRegexRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_Cookie) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_HashPolicy_Cookie")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTtl()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ttl")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTtl(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ttl")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_ConnectionProperties) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_HashPolicy_ConnectionProperties")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SourceIp")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSourceIp()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_QueryParameter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_HashPolicy_QueryParameter")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_HashPolicy_FilterState) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_HashPolicy_FilterState")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction_UpgradeConfig_ConnectConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RouteAction_UpgradeConfig_ConnectConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetProxyProtocolConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProxyProtocolConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxyProtocolConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProxyProtocolConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy_RetryPriority) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RetryPolicy_RetryPriority")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryPriority_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy_RetryHostPredicate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RetryPolicy_RetryHostPredicate")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.ConfigType.(type) { + + case *RetryPolicy_RetryHostPredicate_TypedConfig: + + if h, ok := interface{}(m.GetTypedConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTypedConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TypedConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy_RetryBackOff) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RetryPolicy_RetryBackOff")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBaseInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBaseInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action")); err != nil { + return 0, err + } + + switch m.ActionSpecifier.(type) { + + case *RateLimit_Action_SourceCluster_: + + if h, ok := interface{}(m.GetSourceCluster()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SourceCluster")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSourceCluster(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SourceCluster")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_DestinationCluster_: + + if h, ok := interface{}(m.GetDestinationCluster()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DestinationCluster")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDestinationCluster(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DestinationCluster")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_RequestHeaders_: + + if h, ok := interface{}(m.GetRequestHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestHeaders")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestHeaders")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_RemoteAddress_: + + if h, ok := interface{}(m.GetRemoteAddress()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RemoteAddress")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemoteAddress(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RemoteAddress")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_GenericKey_: + + if h, ok := interface{}(m.GetGenericKey()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GenericKey")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGenericKey(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GenericKey")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_HeaderValueMatch_: + + if h, ok := interface{}(m.GetHeaderValueMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderValueMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderValueMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderValueMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RateLimit_Action_DynamicMetadata: + + if h, ok := interface{}(m.GetDynamicMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DynamicMetadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDynamicMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DynamicMetadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Override) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Override")); err != nil { + return 0, err + } + + switch m.OverrideSpecifier.(type) { + + case *RateLimit_Override_DynamicMetadata_: + + if h, ok := interface{}(m.GetDynamicMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DynamicMetadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDynamicMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DynamicMetadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_SourceCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action_SourceCluster")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_DestinationCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action_DestinationCluster")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_RequestHeaders) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action_RequestHeaders")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeaderName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DescriptorKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescriptorKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SkipIfAbsent")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSkipIfAbsent()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_RemoteAddress) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action_RemoteAddress")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_GenericKey) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action_GenericKey")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DescriptorValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescriptorValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_HeaderValueMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action_HeaderValueMatch")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DescriptorValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescriptorValue())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetExpectMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExpectMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExpectMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExpectMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Action_DynamicMetaData) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Action_DynamicMetaData")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DescriptorKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDescriptorKey())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadataKey()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MetadataKey")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadataKey(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MetadataKey")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimit_Override_DynamicMetadata) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.route.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/route/v3.RateLimit_Override_DynamicMetadata")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadataKey()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MetadataKey")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadataKey(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MetadataKey")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/trace/v3/datadog.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/trace/v3/datadog.pb.uniquehash.go new file mode 100644 index 00000000000..9f794856367 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/trace/v3/datadog.pb.uniquehash.go @@ -0,0 +1,102 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/trace/v3/datadog.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DatadogConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.DatadogConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetServiceName()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceName(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.CollectorCluster.(type) { + + case *DatadogConfig_CollectorUpstreamRef: + + if h, ok := interface{}(m.GetCollectorUpstreamRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CollectorUpstreamRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCollectorUpstreamRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CollectorUpstreamRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DatadogConfig_ClusterName: + + if _, err = hasher.Write([]byte("ClusterName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterName())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/trace/v3/opencensus.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/trace/v3/opencensus.pb.uniquehash.go new file mode 100644 index 00000000000..14da3345e83 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/trace/v3/opencensus.pb.uniquehash.go @@ -0,0 +1,381 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/trace/v3/opencensus.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OpenCensusConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.OpenCensusConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTraceConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TraceConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTraceConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TraceConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("OcagentExporterEnabled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetOcagentExporterEnabled()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IncomingTraceContext")); err != nil { + return 0, err + } + for i, v := range m.GetIncomingTraceContext() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, v) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("OutgoingTraceContext")); err != nil { + return 0, err + } + for i, v := range m.GetOutgoingTraceContext() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, v) + if err != nil { + return 0, err + } + + } + + switch m.OcagentAddress.(type) { + + case *OpenCensusConfig_HttpAddress: + + if _, err = hasher.Write([]byte("HttpAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHttpAddress())); err != nil { + return 0, err + } + + case *OpenCensusConfig_GrpcAddress: + + if h, ok := interface{}(m.GetGrpcAddress()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcAddress")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcAddress(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcAddress")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TraceConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.TraceConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxNumberOfAttributes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxNumberOfAttributes()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxNumberOfAnnotations")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxNumberOfAnnotations()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxNumberOfMessageEvents")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxNumberOfMessageEvents()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxNumberOfLinks")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxNumberOfLinks()) + if err != nil { + return 0, err + } + + switch m.Sampler.(type) { + + case *TraceConfig_ProbabilitySampler: + + if h, ok := interface{}(m.GetProbabilitySampler()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProbabilitySampler")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProbabilitySampler(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProbabilitySampler")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TraceConfig_ConstantSampler: + + if h, ok := interface{}(m.GetConstantSampler()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConstantSampler")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConstantSampler(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConstantSampler")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TraceConfig_RateLimitingSampler: + + if h, ok := interface{}(m.GetRateLimitingSampler()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimitingSampler")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimitingSampler(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimitingSampler")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProbabilitySampler) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.ProbabilitySampler")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SamplingProbability")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSamplingProbability()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConstantSampler) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.ConstantSampler")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Decision")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDecision()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimitingSampler) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.RateLimitingSampler")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Qps")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetQps()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OpenCensusConfig_OcagentGrpcAddress) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.OpenCensusConfig_OcagentGrpcAddress")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TargetUri")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTargetUri())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStatPrefix())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/trace/v3/opentelemetry.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/trace/v3/opentelemetry.pb.uniquehash.go new file mode 100644 index 00000000000..e8670cf7461 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/trace/v3/opentelemetry.pb.uniquehash.go @@ -0,0 +1,82 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/trace/v3/opentelemetry.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OpenTelemetryConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.OpenTelemetryConfig")); err != nil { + return 0, err + } + + switch m.CollectorCluster.(type) { + + case *OpenTelemetryConfig_CollectorUpstreamRef: + + if h, ok := interface{}(m.GetCollectorUpstreamRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CollectorUpstreamRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCollectorUpstreamRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CollectorUpstreamRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *OpenTelemetryConfig_ClusterName: + + if _, err = hasher.Write([]byte("ClusterName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterName())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/config/trace/v3/zipkin.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/config/trace/v3/zipkin.pb.uniquehash.go new file mode 100644 index 00000000000..4c76a30dc8a --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/config/trace/v3/zipkin.pb.uniquehash.go @@ -0,0 +1,137 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/config/trace/v3/zipkin.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ZipkinConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.config.trace.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/config/trace/v3.ZipkinConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CollectorEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCollectorEndpoint())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTraceId_128Bit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TraceId_128Bit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTraceId_128Bit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TraceId_128Bit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSharedSpanContext()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SharedSpanContext")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSharedSpanContext(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SharedSpanContext")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("CollectorEndpointVersion")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCollectorEndpointVersion()) + if err != nil { + return 0, err + } + + switch m.CollectorCluster.(type) { + + case *ZipkinConfig_CollectorUpstreamRef: + + if h, ok := interface{}(m.GetCollectorUpstreamRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CollectorUpstreamRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCollectorUpstreamRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CollectorUpstreamRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ZipkinConfig_ClusterName: + + if _, err = hasher.Write([]byte("ClusterName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterName())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/aws/filter.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/aws/filter.pb.uniquehash.go new file mode 100644 index 00000000000..d212e2ba546 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/aws/filter.pb.uniquehash.go @@ -0,0 +1,380 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/aws/filter.proto + +package aws + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AWSLambdaPerRoute) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.aws_lambda.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws.AWSLambdaPerRoute")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Qualifier")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetQualifier())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Async")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAsync()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEmptyBodyOverride()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EmptyBodyOverride")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEmptyBodyOverride(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EmptyBodyOverride")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UnwrapAsAlb")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUnwrapAsAlb()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTransformerConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TransformerConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformerConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TransformerConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequestTransformerConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTransformerConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTransformerConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTransformerConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AWSLambdaProtocolExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.aws_lambda.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws.AWSLambdaProtocolExtension")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Host")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHost())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Region")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegion())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AccessKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAccessKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SecretKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSecretKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SessionToken")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSessionToken())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RoleArn")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRoleArn())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DisableRoleChaining")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisableRoleChaining()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AWSLambdaConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.aws_lambda.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws.AWSLambdaConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PropagateOriginalRouting")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPropagateOriginalRouting()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCredentialRefreshDelay()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CredentialRefreshDelay")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCredentialRefreshDelay(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CredentialRefreshDelay")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.CredentialsFetcher.(type) { + + case *AWSLambdaConfig_UseDefaultCredentials: + + if h, ok := interface{}(m.GetUseDefaultCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseDefaultCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseDefaultCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseDefaultCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AWSLambdaConfig_ServiceAccountCredentials_: + + if h, ok := interface{}(m.GetServiceAccountCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceAccountCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceAccountCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceAccountCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiGatewayTransformation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.aws_lambda.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws.ApiGatewayTransformation")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AWSLambdaConfig_ServiceAccountCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.aws_lambda.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/aws.AWSLambdaConfig_ServiceAccountCredentials")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCluster())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Uri")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUri())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Region")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegion())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/filters/http/buffer/v3/buffer.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/buffer/v3/buffer.pb.uniquehash.go new file mode 100644 index 00000000000..fb7dfde49bd --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/buffer/v3/buffer.pb.uniquehash.go @@ -0,0 +1,122 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filters/http/buffer/v3/buffer.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Buffer) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.filters.http.buffer.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/filters/http/buffer/v3.Buffer")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxRequestBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxRequestBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxRequestBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxRequestBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BufferPerRoute) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.filters.http.buffer.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/filters/http/buffer/v3.BufferPerRoute")); err != nil { + return 0, err + } + + switch m.Override.(type) { + + case *BufferPerRoute_Disabled: + + if _, err = hasher.Write([]byte("Disabled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisabled()) + if err != nil { + return 0, err + } + + case *BufferPerRoute_Buffer: + + if h, ok := interface{}(m.GetBuffer()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Buffer")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBuffer(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Buffer")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/filters/http/csrf/v3/csrf.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/csrf/v3/csrf.pb.uniquehash.go new file mode 100644 index 00000000000..2bf43810d50 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/csrf/v3/csrf.pb.uniquehash.go @@ -0,0 +1,117 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filters/http/csrf/v3/csrf.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CsrfPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.filters.http.csrf.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/filters/http/csrf/v3.CsrfPolicy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetFilterEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetShadowEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ShadowEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetShadowEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ShadowEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("AdditionalOrigins")); err != nil { + return 0, err + } + for i, v := range m.GetAdditionalOrigins() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/filters/http/ext_proc/v3/processing_mode.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/ext_proc/v3/processing_mode.pb.uniquehash.go new file mode 100644 index 00000000000..9ab529acf51 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/ext_proc/v3/processing_mode.pb.uniquehash.go @@ -0,0 +1,95 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filters/http/ext_proc/v3/processing_mode.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProcessingMode) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.filters.http.ext_proc.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/filters/http/ext_proc/v3.ProcessingMode")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestHeaderMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequestHeaderMode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseHeaderMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseHeaderMode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestBodyMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequestBodyMode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseBodyMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseBodyMode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestTrailerMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequestTrailerMode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseTrailerMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseTrailerMode()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/filters/http/wasm/v3/wasm.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/wasm/v3/wasm.pb.uniquehash.go new file mode 100644 index 00000000000..b0ee8f1bc6c --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/filters/http/wasm/v3/wasm.pb.uniquehash.go @@ -0,0 +1,67 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/filters/http/wasm/v3/wasm.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Wasm) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.filters.http.wasm.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/filters/http/wasm/v3.Wasm")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/http_path/http_path.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/http_path/http_path.pb.uniquehash.go new file mode 100644 index 00000000000..d14badd94ac --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/http_path/http_path.pb.uniquehash.go @@ -0,0 +1,67 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/http_path/http_path.proto + +package http_path + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpPath) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.health_checker.http_path.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/http_path.HttpPath")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHttpHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpHealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpHealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/proxylatency/proxylatency.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/proxylatency/proxylatency.pb.uniquehash.go new file mode 100644 index 00000000000..9ea7c76b251 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/proxylatency/proxylatency.pb.uniquehash.go @@ -0,0 +1,131 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/proxylatency/proxylatency.proto + +package proxylatency + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProxyLatency) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.proxylatency.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/proxylatency.ProxyLatency")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequest()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MeasureRequestInternally")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMeasureRequestInternally()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponse()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetChargeClusterStat()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ChargeClusterStat")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetChargeClusterStat(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ChargeClusterStat")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetChargeListenerStat()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ChargeListenerStat")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetChargeListenerStat(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ChargeListenerStat")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEmitDynamicMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EmitDynamicMetadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEmitDynamicMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EmitDynamicMetadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/transformation/transformation.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/transformation/transformation.pb.uniquehash.go new file mode 100644 index 00000000000..092d4d454b7 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/transformation/transformation.pb.uniquehash.go @@ -0,0 +1,1363 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/transformation/transformation.proto + +package transformation + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FilterTransformations) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.FilterTransformations")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + for i, v := range m.GetTransformations() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStage()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogRequestResponseInfo")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetLogRequestResponseInfo()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationRule) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.TransformationRule")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRouteTransformations()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RouteTransformations")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRouteTransformations(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RouteTransformations")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTransformations) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.RouteTransformations")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequestTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ClearRouteCache")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClearRouteCache()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + for i, v := range m.GetTransformations() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ResponseMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.ResponseMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetResponseCodeDetails()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseCodeDetails")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseCodeDetails(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseCodeDetails")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ResponseTransformationRule) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.ResponseTransformationRule")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Transformation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.Transformation")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetLogRequestResponseInfo()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LogRequestResponseInfo")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLogRequestResponseInfo(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LogRequestResponseInfo")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.TransformationType.(type) { + + case *Transformation_TransformationTemplate: + + if h, ok := interface{}(m.GetTransformationTemplate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TransformationTemplate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformationTemplate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TransformationTemplate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Transformation_HeaderBodyTransform: + + if h, ok := interface{}(m.GetHeaderBodyTransform()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderBodyTransform")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderBodyTransform(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderBodyTransform")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Transformation_TransformerConfig: + + if h, ok := interface{}(m.GetTransformerConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TransformerConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformerConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TransformerConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Extraction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.Extraction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegex())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Subgroup")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSubgroup()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetReplacementText()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ReplacementText")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReplacementText(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ReplacementText")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Mode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMode()) + if err != nil { + return 0, err + } + + switch m.Source.(type) { + + case *Extraction_Header: + + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeader())); err != nil { + return 0, err + } + + case *Extraction_Body: + + if h, ok := interface{}(m.GetBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationTemplate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.TransformationTemplate")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AdvancedTemplates")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAdvancedTemplates()) + if err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetExtractors() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeaders() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("HeadersToAppend")); err != nil { + return 0, err + } + for i, v := range m.GetHeadersToAppend() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("HeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ParseBodyBehavior")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetParseBodyBehavior()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IgnoreErrorOnParse")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIgnoreErrorOnParse()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DynamicMetadataValues")); err != nil { + return 0, err + } + for i, v := range m.GetDynamicMetadataValues() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("EscapeCharacters")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEscapeCharacters()) + if err != nil { + return 0, err + } + + switch m.BodyTransformation.(type) { + + case *TransformationTemplate_Body: + + if h, ok := interface{}(m.GetBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TransformationTemplate_Passthrough: + + if h, ok := interface{}(m.GetPassthrough()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Passthrough")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPassthrough(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Passthrough")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TransformationTemplate_MergeExtractorsToBody: + + if h, ok := interface{}(m.GetMergeExtractorsToBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MergeExtractorsToBody")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMergeExtractorsToBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MergeExtractorsToBody")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *InjaTemplate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.InjaTemplate")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Text")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetText())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Passthrough) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.Passthrough")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MergeExtractorsToBody) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.MergeExtractorsToBody")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderBodyTransform) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.HeaderBodyTransform")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AddRequestMetadata")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAddRequestMetadata()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationRule_Transformations) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.TransformationRule_Transformations")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequestTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ClearRouteCache")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClearRouteCache()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOnStreamCompletionTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OnStreamCompletionTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOnStreamCompletionTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OnStreamCompletionTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTransformations_RouteTransformation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.RouteTransformations_RouteTransformation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStage()) + if err != nil { + return 0, err + } + + switch m.Match.(type) { + + case *RouteTransformations_RouteTransformation_RequestMatch_: + + if h, ok := interface{}(m.GetRequestMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteTransformations_RouteTransformation_ResponseMatch_: + + if h, ok := interface{}(m.GetResponseMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseMatch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseMatch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTransformations_RouteTransformation_RequestMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.RouteTransformations_RouteTransformation_RequestMatch")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequestTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ClearRouteCache")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClearRouteCache()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTransformations_RouteTransformation_ResponseMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.RouteTransformations_RouteTransformation_ResponseMatch")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Match")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationTemplate_HeaderToAppend) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.TransformationTemplate_HeaderToAppend")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationTemplate_DynamicMetadataValue) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.api.v2.filter.http.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/transformation.TransformationTemplate_DynamicMetadataValue")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MetadataNamespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMetadataNamespace())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/waf/waf.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/waf/waf.pb.uniquehash.go new file mode 100644 index 00000000000..125c6cf4868 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/waf/waf.pb.uniquehash.go @@ -0,0 +1,361 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/waf/waf.proto + +package waf + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AuditLogging) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.modsecurity.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/waf.AuditLogging")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Action")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAction()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Location")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetLocation()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ModSecurity) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.modsecurity.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/waf.ModSecurity")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Disabled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisabled()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RuleSets")); err != nil { + return 0, err + } + for i, v := range m.GetRuleSets() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("CustomInterventionMessage")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCustomInterventionMessage())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAuditLogging()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AuditLogging")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAuditLogging(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AuditLogging")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestHeadersOnly")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequestHeadersOnly()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseHeadersOnly")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseHeadersOnly()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RegressionLogs")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRegressionLogs()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDlpTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DlpTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDlpTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DlpTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RuleSet) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.modsecurity.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/waf.RuleSet")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RuleStr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuleStr())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Files")); err != nil { + return 0, err + } + for i, v := range m.GetFiles() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Directory")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDirectory())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ModSecurityPerRoute) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("envoy.config.filter.http.modsecurity.v2.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/waf.ModSecurityPerRoute")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Disabled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisabled()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RuleSets")); err != nil { + return 0, err + } + for i, v := range m.GetRuleSets() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("CustomInterventionMessage")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCustomInterventionMessage())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAuditLogging()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AuditLogging")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAuditLogging(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AuditLogging")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestHeadersOnly")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequestHeadersOnly()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseHeadersOnly")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseHeadersOnly()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDlpTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DlpTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDlpTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DlpTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/extensions/wasm/v3/wasm.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/extensions/wasm/v3/wasm.pb.uniquehash.go new file mode 100644 index 00000000000..429e9f6cf4b --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/extensions/wasm/v3/wasm.pb.uniquehash.go @@ -0,0 +1,251 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/wasm/v3/wasm.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VmConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.wasm.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/wasm/v3.VmConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VmId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetVmId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Runtime")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntime())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCode()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Code")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCode(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Code")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConfiguration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Configuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfiguration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Configuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("AllowPrecompiled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAllowPrecompiled()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("NackOnCodeCacheMiss")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetNackOnCodeCacheMiss()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PluginConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.wasm.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/wasm/v3.PluginConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RootId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRootId())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfiguration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Configuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfiguration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Configuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("FailOpen")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailOpen()) + if err != nil { + return 0, err + } + + switch m.Vm.(type) { + + case *PluginConfig_VmConfig: + + if h, ok := interface{}(m.GetVmConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("VmConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVmConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("VmConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WasmService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.extensions.wasm.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/extensions/wasm/v3.WasmService")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Singleton")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSingleton()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/matcher/v3/regex.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/matcher/v3/regex.pb.uniquehash.go new file mode 100644 index 00000000000..4199dc99e4f --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/matcher/v3/regex.pb.uniquehash.go @@ -0,0 +1,165 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/matcher/v3/regex.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RegexMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.matcher.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/matcher/v3.RegexMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegex())); err != nil { + return 0, err + } + + switch m.EngineType.(type) { + + case *RegexMatcher_GoogleRe2: + + if h, ok := interface{}(m.GetGoogleRe2()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GoogleRe2")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGoogleRe2(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GoogleRe2")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RegexMatchAndSubstitute) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.matcher.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/matcher/v3.RegexMatchAndSubstitute")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPattern()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Pattern")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPattern(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Pattern")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Substitution")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSubstitution())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RegexMatcher_GoogleRE2) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.matcher.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/matcher/v3.RegexMatcher_GoogleRE2")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxProgramSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxProgramSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxProgramSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxProgramSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/matcher/v3/string.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/matcher/v3/string.pb.uniquehash.go new file mode 100644 index 00000000000..7c59019a374 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/matcher/v3/string.pb.uniquehash.go @@ -0,0 +1,157 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/matcher/v3/string.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *StringMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.matcher.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/matcher/v3.StringMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IgnoreCase")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIgnoreCase()) + if err != nil { + return 0, err + } + + switch m.MatchPattern.(type) { + + case *StringMatcher_Exact: + + if _, err = hasher.Write([]byte("Exact")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExact())); err != nil { + return 0, err + } + + case *StringMatcher_Prefix: + + if _, err = hasher.Write([]byte("Prefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefix())); err != nil { + return 0, err + } + + case *StringMatcher_Suffix: + + if _, err = hasher.Write([]byte("Suffix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSuffix())); err != nil { + return 0, err + } + + case *StringMatcher_SafeRegex: + + if h, ok := interface{}(m.GetSafeRegex()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SafeRegex")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSafeRegex(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SafeRegex")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ListStringMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.matcher.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/matcher/v3.ListStringMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Patterns")); err != nil { + return 0, err + } + for i, v := range m.GetPatterns() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/metadata/v3/metadata.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/metadata/v3/metadata.pb.uniquehash.go new file mode 100644 index 00000000000..bdee8464727 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/metadata/v3/metadata.pb.uniquehash.go @@ -0,0 +1,303 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/metadata/v3/metadata.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MetadataKey) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.metadata.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/metadata/v3.MetadataKey")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + for i, v := range m.GetPath() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MetadataKind) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.metadata.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/metadata/v3.MetadataKind")); err != nil { + return 0, err + } + + switch m.Kind.(type) { + + case *MetadataKind_Request_: + + if h, ok := interface{}(m.GetRequest()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequest(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MetadataKind_Route_: + + if h, ok := interface{}(m.GetRoute()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Route")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRoute(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Route")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MetadataKind_Cluster_: + + if h, ok := interface{}(m.GetCluster()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCluster(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cluster")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MetadataKind_Host_: + + if h, ok := interface{}(m.GetHost()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Host")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHost(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Host")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MetadataKey_PathSegment) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.metadata.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/metadata/v3.MetadataKey_PathSegment")); err != nil { + return 0, err + } + + switch m.Segment.(type) { + + case *MetadataKey_PathSegment_Key: + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MetadataKind_Request) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.metadata.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/metadata/v3.MetadataKind_Request")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MetadataKind_Route) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.metadata.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/metadata/v3.MetadataKind_Route")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MetadataKind_Cluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.metadata.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/metadata/v3.MetadataKind_Cluster")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MetadataKind_Host) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.metadata.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/metadata/v3.MetadataKind_Host")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/range.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/range.pb.uniquehash.go new file mode 100644 index 00000000000..9249a79afd0 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/range.pb.uniquehash.go @@ -0,0 +1,98 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/range.proto + +package _type + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Int64Range) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type.Int64Range")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Start")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStart()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("End")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnd()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DoubleRange) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type.DoubleRange")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Start")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStart()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("End")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnd()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/tracing/v3/custom_tag.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/tracing/v3/custom_tag.pb.uniquehash.go new file mode 100644 index 00000000000..c8aae6402b9 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/tracing/v3/custom_tag.pb.uniquehash.go @@ -0,0 +1,304 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/tracing/v3/custom_tag.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CustomTag) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.tracing.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/tracing/v3.CustomTag")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Tag")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTag())); err != nil { + return 0, err + } + + switch m.Type.(type) { + + case *CustomTag_Literal_: + + if h, ok := interface{}(m.GetLiteral()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Literal")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLiteral(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Literal")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *CustomTag_Environment_: + + if h, ok := interface{}(m.GetEnvironment()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Environment")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnvironment(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Environment")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *CustomTag_RequestHeader: + + if h, ok := interface{}(m.GetRequestHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestHeader")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestHeader")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *CustomTag_Metadata_: + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CustomTag_Literal) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.tracing.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/tracing/v3.CustomTag_Literal")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CustomTag_Environment) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.tracing.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/tracing/v3.CustomTag_Environment")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDefaultValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CustomTag_Header) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.tracing.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/tracing/v3.CustomTag_Header")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDefaultValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CustomTag_Metadata) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.tracing.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/tracing/v3.CustomTag_Metadata")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetKind()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Kind")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKind(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Kind")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadataKey()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MetadataKey")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadataKey(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MetadataKey")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDefaultValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/v3/http.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/v3/http.pb.uniquehash.go new file mode 100644 index 00000000000..f0745756753 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/v3/http.pb.uniquehash.go @@ -0,0 +1,28 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/v3/http.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) diff --git a/projects/gloo/pkg/api/external/envoy/type/v3/percent.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/v3/percent.pb.uniquehash.go new file mode 100644 index 00000000000..522c323162f --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/v3/percent.pb.uniquehash.go @@ -0,0 +1,90 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/v3/percent.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Percent) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/v3.Percent")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetValue()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FractionalPercent) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/v3.FractionalPercent")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Numerator")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetNumerator()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Denominator")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDenominator()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/v3/range.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/v3/range.pb.uniquehash.go new file mode 100644 index 00000000000..932c935bbd5 --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/v3/range.pb.uniquehash.go @@ -0,0 +1,133 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/v3/range.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Int64Range) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/v3.Int64Range")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Start")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStart()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("End")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnd()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Int32Range) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/v3.Int32Range")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Start")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStart()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("End")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnd()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DoubleRange) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/v3.DoubleRange")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Start")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStart()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("End")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnd()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/external/envoy/type/v3/semantic_version.pb.uniquehash.go b/projects/gloo/pkg/api/external/envoy/type/v3/semantic_version.pb.uniquehash.go new file mode 100644 index 00000000000..d58d97cd46c --- /dev/null +++ b/projects/gloo/pkg/api/external/envoy/type/v3/semantic_version.pb.uniquehash.go @@ -0,0 +1,71 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/external/envoy/type/v3/semantic_version.proto + +package v3 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SemanticVersion) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("solo.io.envoy.type.v3.github.com/solo-io/gloo/projects/gloo/pkg/api/external/envoy/type/v3.SemanticVersion")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MajorNumber")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMajorNumber()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MinorNumber")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMinorNumber()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Patch")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPatch()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/grpc/validation/gloo_validation.pb.uniquehash.go b/projects/gloo/pkg/api/grpc/validation/gloo_validation.pb.uniquehash.go new file mode 100644 index 00000000000..56334919353 --- /dev/null +++ b/projects/gloo/pkg/api/grpc/validation/gloo_validation.pb.uniquehash.go @@ -0,0 +1,1644 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/grpc/validation/gloo_validation.proto + +package validation + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GlooValidationServiceRequest) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.GlooValidationServiceRequest")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetProxy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Proxy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Proxy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Resources.(type) { + + case *GlooValidationServiceRequest_ModifiedResources: + + if h, ok := interface{}(m.GetModifiedResources()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ModifiedResources")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetModifiedResources(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ModifiedResources")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GlooValidationServiceRequest_DeletedResources: + + if h, ok := interface{}(m.GetDeletedResources()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DeletedResources")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDeletedResources(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DeletedResources")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GlooValidationServiceResponse) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.GlooValidationServiceResponse")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ValidationReports")); err != nil { + return 0, err + } + for i, v := range m.GetValidationReports() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ModifiedResources) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.ModifiedResources")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Upstreams")); err != nil { + return 0, err + } + for i, v := range m.GetUpstreams() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DeletedResources) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.DeletedResources")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UpstreamRefs")); err != nil { + return 0, err + } + for i, v := range m.GetUpstreamRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("SecretRefs")); err != nil { + return 0, err + } + for i, v := range m.GetSecretRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ValidationReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.ValidationReport")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetProxyReport()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProxyReport")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxyReport(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProxyReport")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UpstreamReports")); err != nil { + return 0, err + } + for i, v := range m.GetUpstreamReports() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetProxy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Proxy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Proxy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ResourceReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.ResourceReport")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetResourceRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResourceRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResourceRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResourceRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Warnings")); err != nil { + return 0, err + } + for i, v := range m.GetWarnings() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Errors")); err != nil { + return 0, err + } + for i, v := range m.GetErrors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *NotifyOnResyncRequest) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.NotifyOnResyncRequest")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *NotifyOnResyncResponse) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.NotifyOnResyncResponse")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProxyReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.ProxyReport")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ListenerReports")); err != nil { + return 0, err + } + for i, v := range m.GetListenerReports() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ListenerReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.ListenerReport")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Errors")); err != nil { + return 0, err + } + for i, v := range m.GetErrors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Warnings")); err != nil { + return 0, err + } + for i, v := range m.GetWarnings() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ListenerTypeReport.(type) { + + case *ListenerReport_HttpListenerReport: + + if h, ok := interface{}(m.GetHttpListenerReport()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpListenerReport")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpListenerReport(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpListenerReport")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ListenerReport_TcpListenerReport: + + if h, ok := interface{}(m.GetTcpListenerReport()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpListenerReport")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpListenerReport(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpListenerReport")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ListenerReport_HybridListenerReport: + + if h, ok := interface{}(m.GetHybridListenerReport()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HybridListenerReport")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHybridListenerReport(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HybridListenerReport")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ListenerReport_AggregateListenerReport: + + if h, ok := interface{}(m.GetAggregateListenerReport()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AggregateListenerReport")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAggregateListenerReport(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AggregateListenerReport")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpListenerReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.HttpListenerReport")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Errors")); err != nil { + return 0, err + } + for i, v := range m.GetErrors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("VirtualHostReports")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualHostReports() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHostReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.VirtualHostReport")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Errors")); err != nil { + return 0, err + } + for i, v := range m.GetErrors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RouteReports")); err != nil { + return 0, err + } + for i, v := range m.GetRouteReports() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.RouteReport")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Errors")); err != nil { + return 0, err + } + for i, v := range m.GetErrors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Warnings")); err != nil { + return 0, err + } + for i, v := range m.GetWarnings() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpListenerReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.TcpListenerReport")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Errors")); err != nil { + return 0, err + } + for i, v := range m.GetErrors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("TcpHostReports")); err != nil { + return 0, err + } + for i, v := range m.GetTcpHostReports() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpHostReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.TcpHostReport")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Errors")); err != nil { + return 0, err + } + for i, v := range m.GetErrors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Warnings")); err != nil { + return 0, err + } + for i, v := range m.GetWarnings() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HybridListenerReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.HybridListenerReport")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetMatchedListenerReports() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchedListenerReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.MatchedListenerReport")); err != nil { + return 0, err + } + + switch m.ListenerReportType.(type) { + + case *MatchedListenerReport_HttpListenerReport: + + if h, ok := interface{}(m.GetHttpListenerReport()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpListenerReport")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpListenerReport(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpListenerReport")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MatchedListenerReport_TcpListenerReport: + + if h, ok := interface{}(m.GetTcpListenerReport()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpListenerReport")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpListenerReport(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpListenerReport")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AggregateListenerReport) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.AggregateListenerReport")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHttpListenerReports() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTcpListenerReports() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ListenerReport_Error) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.ListenerReport_Error")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ListenerReport_Warning) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.ListenerReport_Warning")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpListenerReport_Error) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.HttpListenerReport_Error")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHostReport_Error) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.VirtualHostReport_Error")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteReport_Error) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.RouteReport_Error")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteReport_Warning) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.RouteReport_Warning")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpListenerReport_Error) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.TcpListenerReport_Error")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpHostReport_Error) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.TcpHostReport_Error")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpHostReport_Warning) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/validation.TcpHostReport_Warning")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Reason")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetReason())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/grpc/version/version.pb.uniquehash.go b/projects/gloo/pkg/api/grpc/version/version.pb.uniquehash.go new file mode 100644 index 00000000000..1d479ec1781 --- /dev/null +++ b/projects/gloo/pkg/api/grpc/version/version.pb.uniquehash.go @@ -0,0 +1,287 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/grpc/version/version.proto + +package version + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServerVersion) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/version.ServerVersion")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Type")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Enterprise")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnterprise()) + if err != nil { + return 0, err + } + + switch m.VersionType.(type) { + + case *ServerVersion_Kubernetes: + + if h, ok := interface{}(m.GetKubernetes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Kubernetes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubernetes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Kubernetes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Kubernetes) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/version.Kubernetes")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Containers")); err != nil { + return 0, err + } + for i, v := range m.GetContainers() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Namespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNamespace())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ClientVersion) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/version.ClientVersion")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Version")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetVersion())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Version) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/version.Version")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClient()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Client")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClient(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Client")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Server")); err != nil { + return 0, err + } + for i, v := range m.GetServer() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Kubernetes_Container) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/grpc/version.Kubernetes_Container")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Tag")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTag())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Registry")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegistry())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("OssTag")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetOssTag())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/circuit_breaker.pb.uniquehash.go b/projects/gloo/pkg/api/v1/circuit_breaker.pb.uniquehash.go new file mode 100644 index 00000000000..caba28c7c5a --- /dev/null +++ b/projects/gloo/pkg/api/v1/circuit_breaker.pb.uniquehash.go @@ -0,0 +1,127 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/circuit_breaker.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CircuitBreakerConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.CircuitBreakerConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxConnections()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxConnections")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxConnections(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxConnections")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxPendingRequests()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxPendingRequests")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxPendingRequests(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxPendingRequests")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxRequests()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxRequests")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxRequests(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxRequests")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxRetries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxRetries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxRetries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxRetries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/connection.pb.uniquehash.go b/projects/gloo/pkg/api/v1/connection.pb.uniquehash.go new file mode 100644 index 00000000000..29ac217c093 --- /dev/null +++ b/projects/gloo/pkg/api/v1/connection.pb.uniquehash.go @@ -0,0 +1,222 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/connection.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConnectionConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.ConnectionConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxRequestsPerConnection")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxRequestsPerConnection()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConnectTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTcpKeepalive()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpKeepalive")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpKeepalive(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpKeepalive")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPerConnectionBufferLimitBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerConnectionBufferLimitBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerConnectionBufferLimitBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerConnectionBufferLimitBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCommonHttpProtocolOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CommonHttpProtocolOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCommonHttpProtocolOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CommonHttpProtocolOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHttp1ProtocolOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Http1ProtocolOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttp1ProtocolOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Http1ProtocolOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConnectionConfig_TcpKeepAlive) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.ConnectionConfig_TcpKeepAlive")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("KeepaliveProbes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetKeepaliveProbes()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetKeepaliveTime()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KeepaliveTime")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKeepaliveTime(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KeepaliveTime")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetKeepaliveInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KeepaliveInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKeepaliveInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KeepaliveInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/core/matchers/matchers.pb.uniquehash.go b/projects/gloo/pkg/api/v1/core/matchers/matchers.pb.uniquehash.go new file mode 100644 index 00000000000..28e004c8285 --- /dev/null +++ b/projects/gloo/pkg/api/v1/core/matchers/matchers.pb.uniquehash.go @@ -0,0 +1,306 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/core/matchers/matchers.proto + +package matchers + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Matcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("matchers.core.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/core/matchers.Matcher")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCaseSensitive()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CaseSensitive")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCaseSensitive(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CaseSensitive")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("QueryParameters")); err != nil { + return 0, err + } + for i, v := range m.GetQueryParameters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Methods")); err != nil { + return 0, err + } + for i, v := range m.GetMethods() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + switch m.PathSpecifier.(type) { + + case *Matcher_Prefix: + + if _, err = hasher.Write([]byte("Prefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefix())); err != nil { + return 0, err + } + + case *Matcher_Exact: + + if _, err = hasher.Write([]byte("Exact")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExact())); err != nil { + return 0, err + } + + case *Matcher_Regex: + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegex())); err != nil { + return 0, err + } + + case *Matcher_ConnectMatcher_: + + if h, ok := interface{}(m.GetConnectMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectMatcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectMatcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("matchers.core.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/core/matchers.HeaderMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRegex()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InvertMatch")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInvertMatch()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *QueryParameterMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("matchers.core.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/core/matchers.QueryParameterMatcher")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRegex()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Matcher_ConnectMatcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("matchers.core.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/core/matchers.Matcher_ConnectMatcher")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/core/selectors/selectors.pb.uniquehash.go b/projects/gloo/pkg/api/v1/core/selectors/selectors.pb.uniquehash.go new file mode 100644 index 00000000000..b906be3ae59 --- /dev/null +++ b/projects/gloo/pkg/api/v1/core/selectors/selectors.pb.uniquehash.go @@ -0,0 +1,174 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/core/selectors/selectors.proto + +package selectors + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Selector) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("selectors.core.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/core/selectors.Selector")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Namespaces")); err != nil { + return 0, err + } + for i, v := range m.GetNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetLabels() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Expressions")); err != nil { + return 0, err + } + for i, v := range m.GetExpressions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Selector_Expression) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("selectors.core.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/core/selectors.Selector_Expression")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Operator")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetOperator()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Values")); err != nil { + return 0, err + } + for i, v := range m.GetValues() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/endpoint.pb.uniquehash.go b/projects/gloo/pkg/api/v1/endpoint.pb.uniquehash.go new file mode 100644 index 00000000000..2972a611b7b --- /dev/null +++ b/projects/gloo/pkg/api/v1/endpoint.pb.uniquehash.go @@ -0,0 +1,165 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/endpoint.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Endpoint) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Endpoint")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Upstreams")); err != nil { + return 0, err + } + for i, v := range m.GetUpstreams() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Port")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPort()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Hostname")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostname())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheckConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.HealthCheckConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Hostname")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostname())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/caching/caching.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/caching/caching.pb.uniquehash.go new file mode 100644 index 00000000000..a33c90ee792 --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/caching/caching.pb.uniquehash.go @@ -0,0 +1,137 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/caching/caching.proto + +package caching + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("caching.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/caching.Settings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCachingServiceRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CachingServiceRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCachingServiceRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CachingServiceRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("AllowedVaryHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedVaryHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxPayloadSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxPayloadSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxPayloadSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxPayloadSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/dlp/dlp.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/dlp/dlp.pb.uniquehash.go new file mode 100644 index 00000000000..03f9bf166f7 --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/dlp/dlp.pb.uniquehash.go @@ -0,0 +1,446 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/dlp/dlp.proto + +package dlp + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FilterConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dlp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/dlp.FilterConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DlpRules")); err != nil { + return 0, err + } + for i, v := range m.GetDlpRules() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("EnabledFor")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnabledFor()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DlpRule) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dlp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/dlp.DlpRule")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Actions")); err != nil { + return 0, err + } + for i, v := range m.GetActions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Config) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dlp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/dlp.Config")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Actions")); err != nil { + return 0, err + } + for i, v := range m.GetActions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("EnabledFor")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnabledFor()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Action) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dlp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/dlp.Action")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ActionType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetActionType()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCustomAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CustomAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCustomAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CustomAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetKeyValueAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KeyValueAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKeyValueAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KeyValueAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Shadow")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetShadow()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CustomAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dlp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/dlp.CustomAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + for i, v := range m.GetRegex() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("MaskChar")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMaskChar())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPercent()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Percent")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPercent(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Percent")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RegexActions")); err != nil { + return 0, err + } + for i, v := range m.GetRegexActions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *KeyValueAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dlp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/dlp.KeyValueAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaskChar")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMaskChar())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPercent()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Percent")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPercent(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Percent")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("KeyToMask")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKeyToMask())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1/extauth.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1/extauth.pb.uniquehash.go new file mode 100644 index 00000000000..30a54cb3c30 --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1/extauth.pb.uniquehash.go @@ -0,0 +1,8414 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/extauth/v1/extauth.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AuthConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AuthConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Configs")); err != nil { + return 0, err + } + for i, v := range m.GetConfigs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetBooleanExpr()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BooleanExpr")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBooleanExpr(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BooleanExpr")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("FailOnRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailOnRedirect()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthExtension")); err != nil { + return 0, err + } + + switch m.Spec.(type) { + + case *ExtAuthExtension_Disable: + + if _, err = hasher.Write([]byte("Disable")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisable()) + if err != nil { + return 0, err + } + + case *ExtAuthExtension_ConfigRef: + + if h, ok := interface{}(m.GetConfigRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConfigRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfigRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConfigRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthExtension_CustomAuth: + + if h, ok := interface{}(m.GetCustomAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CustomAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCustomAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CustomAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.Settings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetExtauthzServerRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExtauthzServerRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtauthzServerRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExtauthzServerRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UserIdHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserIdHeader())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequestTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("FailureModeAllow")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailureModeAllow()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequestBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestBody")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestBody")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ClearRouteCache")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClearRouteCache()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("StatusOnError")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStatusOnError()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TransportApiVersion")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTransportApiVersion()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStatPrefix())); err != nil { + return 0, err + } + + switch m.ServiceType.(type) { + + case *Settings_HttpService: + + if h, ok := interface{}(m.GetHttpService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_GrpcService: + + if h, ok := interface{}(m.GetGrpcService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.GrpcService")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Authority")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthority())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.HttpService")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PathPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPathPrefix())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequest()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequest(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BufferSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BufferSettings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxRequestBytes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxRequestBytes()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowPartialMessage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAllowPartialMessage()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PackAsBytes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPackAsBytes()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CustomAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.CustomAuth")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetContextExtensions() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AuthPlugin) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AuthPlugin")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PluginFileName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPluginFileName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ExportedSymbolName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExportedSymbolName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Realm")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRealm())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetApr()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Apr")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetApr(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Apr")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEncryption()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Encryption")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEncryption(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Encryption")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.UserSource.(type) { + + case *BasicAuth_UserList_: + + if h, ok := interface{}(m.GetUserList()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UserList")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUserList(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UserList")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HmacAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.HmacAuth")); err != nil { + return 0, err + } + + switch m.SecretStorage.(type) { + + case *HmacAuth_SecretRefs: + + if h, ok := interface{}(m.GetSecretRefs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretRefs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretRefs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretRefs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ImplementationType.(type) { + + case *HmacAuth_ParametersInHeaders: + + if h, ok := interface{}(m.GetParametersInHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ParametersInHeaders")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetParametersInHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ParametersInHeaders")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SecretRefList) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.SecretRefList")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SecretRefs")); err != nil { + return 0, err + } + for i, v := range m.GetSecretRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HmacParametersInHeaders) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.HmacParametersInHeaders")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OAuth")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClientSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClientSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("IssuerUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIssuerUrl())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetAuthEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AppUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAppUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CallbackPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCallbackPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scopes")); err != nil { + return 0, err + } + for i, v := range m.GetScopes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OAuth2) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OAuth2")); err != nil { + return 0, err + } + + switch m.OauthType.(type) { + + case *OAuth2_OidcAuthorizationCode: + + if h, ok := interface{}(m.GetOidcAuthorizationCode()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OidcAuthorizationCode")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOidcAuthorizationCode(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OidcAuthorizationCode")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *OAuth2_AccessTokenValidation: + + if h, ok := interface{}(m.GetAccessTokenValidation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AccessTokenValidation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAccessTokenValidation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AccessTokenValidation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *OAuth2_Oauth2: + + if h, ok := interface{}(m.GetOauth2()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Oauth2")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOauth2(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Oauth2")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RedisOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.RedisOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Host")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHost())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Db")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDb()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PoolSize")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPoolSize()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsCertMountPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTlsCertMountPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SocketType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSocketType()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UserSession) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.UserSession")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FailOnFetchFailure")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailOnFetchFailure()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCookieOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CookieOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCookieOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CookieOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCipherConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CipherConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCipherConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CipherConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Session.(type) { + + case *UserSession_Cookie: + + if h, ok := interface{}(m.GetCookie()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCookie(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *UserSession_Redis: + + if h, ok := interface{}(m.GetRedis()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Redis")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRedis(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Redis")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderConfiguration) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.HeaderConfiguration")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IdTokenHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIdTokenHeader())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AccessTokenHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAccessTokenHeader())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUseBearerSchemaForAuthorization()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseBearerSchemaForAuthorization")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseBearerSchemaForAuthorization(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseBearerSchemaForAuthorization")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DiscoveryOverride) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.DiscoveryOverride")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AuthEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthEndpoint())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TokenEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTokenEndpoint())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("JwksUri")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetJwksUri())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scopes")); err != nil { + return 0, err + } + for i, v := range m.GetScopes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseTypes")); err != nil { + return 0, err + } + for i, v := range m.GetResponseTypes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Subjects")); err != nil { + return 0, err + } + for i, v := range m.GetSubjects() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("IdTokenAlgs")); err != nil { + return 0, err + } + for i, v := range m.GetIdTokenAlgs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AuthMethods")); err != nil { + return 0, err + } + for i, v := range m.GetAuthMethods() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Claims")); err != nil { + return 0, err + } + for i, v := range m.GetClaims() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("RevocationEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRevocationEndpoint())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("EndSessionEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetEndSessionEndpoint())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *JwksOnDemandCacheRefreshPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.JwksOnDemandCacheRefreshPolicy")); err != nil { + return 0, err + } + + switch m.Policy.(type) { + + case *JwksOnDemandCacheRefreshPolicy_Never: + + if h, ok := interface{}(m.GetNever()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Never")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNever(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Never")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *JwksOnDemandCacheRefreshPolicy_Always: + + if h, ok := interface{}(m.GetAlways()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Always")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAlways(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Always")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *JwksOnDemandCacheRefreshPolicy_MaxIdpReqPerPollingInterval: + + if _, err = hasher.Write([]byte("MaxIdpReqPerPollingInterval")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxIdpReqPerPollingInterval()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AutoMapFromMetadata) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AutoMapFromMetadata")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Namespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNamespace())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *EndSessionProperties) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.EndSessionProperties")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MethodType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMethodType()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ClaimToHeader) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ClaimToHeader")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Claim")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClaim())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeader())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAppend()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OidcAuthorizationCode) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OidcAuthorizationCode")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClientSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClientSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("IssuerUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIssuerUrl())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetAuthEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTokenEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AppUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAppUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CallbackPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCallbackPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogoutPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLogoutPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AfterLogoutUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAfterLogoutUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scopes")); err != nil { + return 0, err + } + for i, v := range m.GetScopes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetSession()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSession(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDiscoveryOverride()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DiscoveryOverride")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDiscoveryOverride(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DiscoveryOverride")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDiscoveryPollInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DiscoveryPollInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDiscoveryPollInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DiscoveryPollInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetJwksCacheRefreshPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("JwksCacheRefreshPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwksCacheRefreshPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("JwksCacheRefreshPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SessionIdHeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSessionIdHeaderName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ParseCallbackPathAsRegex")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetParseCallbackPathAsRegex()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAutoMapFromMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AutoMapFromMetadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAutoMapFromMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AutoMapFromMetadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEndSessionProperties()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EndSessionProperties")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEndSessionProperties(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EndSessionProperties")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetDynamicMetadataFromClaims() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetDisableClientSecret()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableClientSecret")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableClientSecret(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableClientSecret")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAccessToken()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AccessToken")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAccessToken(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AccessToken")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIdentityToken()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IdentityToken")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIdentityToken(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IdentityToken")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PlainOAuth2) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.PlainOAuth2")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClientSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClientSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetAuthEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AppUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAppUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CallbackPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCallbackPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scopes")); err != nil { + return 0, err + } + for i, v := range m.GetScopes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetSession()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSession(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("LogoutPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLogoutPath())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTokenEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AfterLogoutUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAfterLogoutUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AuthEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthEndpoint())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TokenEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTokenEndpoint())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RevocationEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRevocationEndpoint())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDisableClientSecret()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableClientSecret")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableClientSecret(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableClientSecret")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *JwtValidation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.JwtValidation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Issuer")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIssuer())); err != nil { + return 0, err + } + + switch m.JwksSourceSpecifier.(type) { + + case *JwtValidation_RemoteJwks_: + + if h, ok := interface{}(m.GetRemoteJwks()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RemoteJwks")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemoteJwks(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RemoteJwks")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *JwtValidation_LocalJwks_: + + if h, ok := interface{}(m.GetLocalJwks()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalJwks")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalJwks(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalJwks")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *IntrospectionValidation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.IntrospectionValidation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IntrospectionUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIntrospectionUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClientSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClientSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClientSecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UserIdAttributeName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserIdAttributeName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDisableClientSecret()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableClientSecret")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableClientSecret(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableClientSecret")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AccessTokenValidation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AccessTokenValidation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UserinfoUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserinfoUrl())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCacheTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CacheTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCacheTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CacheTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetDynamicMetadataFromClaims() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + switch m.ValidationType.(type) { + + case *AccessTokenValidation_IntrospectionUrl: + + if _, err = hasher.Write([]byte("IntrospectionUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIntrospectionUrl())); err != nil { + return 0, err + } + + case *AccessTokenValidation_Jwt: + + if h, ok := interface{}(m.GetJwt()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwt(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessTokenValidation_Introspection: + + if h, ok := interface{}(m.GetIntrospection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Introspection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIntrospection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Introspection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ScopeValidation.(type) { + + case *AccessTokenValidation_RequiredScopes: + + if h, ok := interface{}(m.GetRequiredScopes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequiredScopes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequiredScopes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequiredScopes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OauthSecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OauthSecret")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientSecret")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientSecret())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyAuth")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetLabelSelector() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ApiKeySecretRefs")); err != nil { + return 0, err + } + for i, v := range m.GetApiKeySecretRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("HeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeaderName())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeadersFromMetadata() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeadersFromMetadataEntry() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + switch m.StorageBackend.(type) { + + case *ApiKeyAuth_K8SSecretApikeyStorage: + + if h, ok := interface{}(m.GetK8SSecretApikeyStorage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("K8SSecretApikeyStorage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetK8SSecretApikeyStorage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("K8SSecretApikeyStorage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ApiKeyAuth_AerospikeApikeyStorage: + + if h, ok := interface{}(m.GetAerospikeApikeyStorage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AerospikeApikeyStorage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAerospikeApikeyStorage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AerospikeApikeyStorage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *K8SSecretApiKeyStorage) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.K8SSecretApiKeyStorage")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetLabelSelector() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ApiKeySecretRefs")); err != nil { + return 0, err + } + for i, v := range m.GetApiKeySecretRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AerospikeApiKeyStorage) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AerospikeApiKeyStorage")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Hostname")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostname())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Namespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNamespace())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Set")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSet())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Port")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPort()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("BatchSize")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetBatchSize()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetReadModeSc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ReadModeSc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReadModeSc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ReadModeSc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetReadModeAp()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ReadModeAp")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReadModeAp(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ReadModeAp")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("NodeTlsName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNodeTlsName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CertPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCertPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("KeyPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKeyPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowInsecure")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAllowInsecure()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RootCaPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRootCaPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsVersion")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTlsVersion())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsCurveGroups")); err != nil { + return 0, err + } + for i, v := range m.GetTlsCurveGroups() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetLabelSelector() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + switch m.CommitLevel.(type) { + + case *AerospikeApiKeyStorage_CommitAll: + + if _, err = hasher.Write([]byte("CommitAll")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCommitAll()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorage_CommitMaster: + + if _, err = hasher.Write([]byte("CommitMaster")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCommitMaster()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKey) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKey")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ApiKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetApiKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Labels")); err != nil { + return 0, err + } + for i, v := range m.GetLabels() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetMetadata() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Uuid")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUuid())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeySecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeySecret")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ApiKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetApiKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Labels")); err != nil { + return 0, err + } + for i, v := range m.GetLabels() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetMetadata() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OpaAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OpaAuth")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Modules")); err != nil { + return 0, err + } + for i, v := range m.GetModules() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("Query")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetQuery())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OpaAuthOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OpaAuthOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FastInputConversion")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFastInputConversion()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ReturnDecisionReason")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReturnDecisionReason()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Ldap) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.Ldap")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UserDnTemplate")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserDnTemplate())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MembershipAttributeName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMembershipAttributeName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowedGroups")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedGroups() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetPool()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Pool")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPool(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Pool")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SearchFilter")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSearchFilter())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DisableGroupChecking")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisableGroupChecking()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetGroupLookupSettings()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GroupLookupSettings")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGroupLookupSettings(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GroupLookupSettings")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LdapServiceAccount) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.LdapServiceAccount")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCredentialsSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CredentialsSecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCredentialsSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CredentialsSecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("CheckGroupsWithServiceAccount")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCheckGroupsWithServiceAccount()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PassThroughAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.PassThroughAuth")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("FailureModeAllow")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailureModeAllow()) + if err != nil { + return 0, err + } + + switch m.Protocol.(type) { + + case *PassThroughAuth_Grpc: + + if h, ok := interface{}(m.GetGrpc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *PassThroughAuth_Http: + + if h, ok := interface{}(m.GetHttp()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Http")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttp(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Http")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BackoffStrategy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BackoffStrategy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBaseInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBaseInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.RetryPolicy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetNumRetries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNumRetries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Strategy.(type) { + + case *RetryPolicy_RetryBackOff: + + if h, ok := interface{}(m.GetRetryBackOff()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryBackOff(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PassThroughGrpc) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.PassThroughGrpc")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConnectionTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTlsConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TlsConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTlsConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TlsConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PassThroughGrpcTLSConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.PassThroughGrpcTLSConfig")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PassThroughHttp) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.PassThroughHttp")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Url")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUrl())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequest()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequest(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConnectionTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AuthConfigRefName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthConfigRefName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Configs")); err != nil { + return 0, err + } + for i, v := range m.GetConfigs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetBooleanExpr()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BooleanExpr")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBooleanExpr(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BooleanExpr")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("FailOnRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailOnRedirect()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyCreateRequest) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyCreateRequest")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RawApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetRawApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyCreateResponse) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyCreateResponse")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyReadRequest) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyReadRequest")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RawApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetRawApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Labels")); err != nil { + return 0, err + } + for i, v := range m.GetLabels() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyReadResponse) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyReadResponse")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyUpdateRequest) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyUpdateRequest")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Upsert")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUpsert()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RawApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetRawApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyUpdateResponse) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyUpdateResponse")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyDeleteRequest) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyDeleteRequest")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RawApiKeys")); err != nil { + return 0, err + } + for i, v := range m.GetRawApiKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Labels")); err != nil { + return 0, err + } + for i, v := range m.GetLabels() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyDeleteResponse) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyDeleteResponse")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AuthConfig_Config) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AuthConfig_Config")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetName()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetName(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.AuthConfig.(type) { + + case *AuthConfig_Config_BasicAuth: + + if h, ok := interface{}(m.GetBasicAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BasicAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBasicAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BasicAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_Oauth: + + if h, ok := interface{}(m.GetOauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Oauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Oauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_Oauth2: + + if h, ok := interface{}(m.GetOauth2()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Oauth2")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOauth2(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Oauth2")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_ApiKeyAuth: + + if h, ok := interface{}(m.GetApiKeyAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ApiKeyAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetApiKeyAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ApiKeyAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_PluginAuth: + + if h, ok := interface{}(m.GetPluginAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PluginAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPluginAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PluginAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_OpaAuth: + + if h, ok := interface{}(m.GetOpaAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OpaAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOpaAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OpaAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_Ldap: + + if h, ok := interface{}(m.GetLdap()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ldap")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLdap(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ldap")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_Jwt: + + if h, ok := interface{}(m.GetJwt()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwt(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_PassThroughAuth: + + if h, ok := interface{}(m.GetPassThroughAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PassThroughAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPassThroughAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PassThroughAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AuthConfig_Config_HmacAuth: + + if h, ok := interface{}(m.GetHmacAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HmacAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHmacAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HmacAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpService_Request) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.HttpService_Request")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowedHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeadersToAdd() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowedHeadersRegex")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedHeadersRegex() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpService_Response) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.HttpService_Response")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowedUpstreamHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedUpstreamHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowedClientHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedClientHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowedUpstreamHeadersToAppend")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedUpstreamHeadersToAppend() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth_Apr) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth_Apr")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetUsers() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth_EncryptionType) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth_EncryptionType")); err != nil { + return 0, err + } + + switch m.Algorithm.(type) { + + case *BasicAuth_EncryptionType_Apr_: + + if h, ok := interface{}(m.GetApr()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Apr")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetApr(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Apr")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *BasicAuth_EncryptionType_Sha1_: + + if h, ok := interface{}(m.GetSha1()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Sha1")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSha1(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Sha1")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth_User) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth_User")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Salt")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSalt())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HashedPassword")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHashedPassword())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth_UserList) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth_UserList")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetUsers() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth_Apr_SaltedHashedPassword) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth_Apr_SaltedHashedPassword")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Salt")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSalt())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HashedPassword")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHashedPassword())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth_EncryptionType_Sha1) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth_EncryptionType_Sha1")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *BasicAuth_EncryptionType_Apr) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.BasicAuth_EncryptionType_Apr")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UserSession_InternalSession) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.UserSession_InternalSession")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAllowRefreshing()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowRefreshing")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowRefreshing(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowRefreshing")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("KeyPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKeyPrefix())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TargetDomain")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTargetDomain())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UserSession_RedisSession) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.UserSession_RedisSession")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("KeyPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKeyPrefix())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CookieName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCookieName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAllowRefreshing()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowRefreshing")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowRefreshing(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowRefreshing")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPreExpiryBuffer()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PreExpiryBuffer")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPreExpiryBuffer(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PreExpiryBuffer")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("TargetDomain")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTargetDomain())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeaderName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UserSession_CookieOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.UserSession_CookieOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxAge()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxAge")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxAge(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxAge")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("NotSecure")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetNotSecure()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHttpOnly()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpOnly")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpOnly(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpOnly")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPath()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPath(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SameSite")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSameSite()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Domain")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDomain())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UserSession_CipherConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.UserSession_CipherConfig")); err != nil { + return 0, err + } + + switch m.Key.(type) { + + case *UserSession_CipherConfig_KeyRef: + + if h, ok := interface{}(m.GetKeyRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KeyRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKeyRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KeyRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OidcAuthorizationCode_AccessToken) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OidcAuthorizationCode_AccessToken")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClaimsToHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetClaimsToHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OidcAuthorizationCode_IdentityToken) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.OidcAuthorizationCode_IdentityToken")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClaimsToHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetClaimsToHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *JwtValidation_RemoteJwks) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.JwtValidation_RemoteJwks")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Url")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUrl())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRefreshInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RefreshInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRefreshInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RefreshInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *JwtValidation_LocalJwks) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.JwtValidation_LocalJwks")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InlineString")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetInlineString())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AccessTokenValidation_ScopeList) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AccessTokenValidation_ScopeList")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scope")); err != nil { + return 0, err + } + for i, v := range m.GetScope() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyAuth_SecretKey) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyAuth_SecretKey")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Required")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequired()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ApiKeyAuth_MetadataEntry) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ApiKeyAuth_MetadataEntry")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Required")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequired()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AerospikeApiKeyStorageReadModeSc) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AerospikeApiKeyStorageReadModeSc")); err != nil { + return 0, err + } + + switch m.ReadModeSc.(type) { + + case *AerospikeApiKeyStorageReadModeSc_ReadModeScSession: + + if _, err = hasher.Write([]byte("ReadModeScSession")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadModeScSession()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorageReadModeSc_ReadModeScLinearize: + + if _, err = hasher.Write([]byte("ReadModeScLinearize")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadModeScLinearize()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorageReadModeSc_ReadModeScReplica: + + if _, err = hasher.Write([]byte("ReadModeScReplica")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadModeScReplica()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorageReadModeSc_ReadModeScAllowUnavailable: + + if _, err = hasher.Write([]byte("ReadModeScAllowUnavailable")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadModeScAllowUnavailable()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AerospikeApiKeyStorageReadModeAp) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AerospikeApiKeyStorageReadModeAp")); err != nil { + return 0, err + } + + switch m.ReadModeAp.(type) { + + case *AerospikeApiKeyStorageReadModeAp_ReadModeApOne: + + if _, err = hasher.Write([]byte("ReadModeApOne")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadModeApOne()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorageReadModeAp_ReadModeApAll: + + if _, err = hasher.Write([]byte("ReadModeApAll")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadModeApAll()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AerospikeApiKeyStorageTlsCurveID) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.AerospikeApiKeyStorageTlsCurveID")); err != nil { + return 0, err + } + + switch m.CurveId.(type) { + + case *AerospikeApiKeyStorageTlsCurveID_CurveP256: + + if _, err = hasher.Write([]byte("CurveP256")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCurveP256()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorageTlsCurveID_CurveP384: + + if _, err = hasher.Write([]byte("CurveP384")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCurveP384()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorageTlsCurveID_CurveP521: + + if _, err = hasher.Write([]byte("CurveP521")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCurveP521()) + if err != nil { + return 0, err + } + + case *AerospikeApiKeyStorageTlsCurveID_X_25519: + + if _, err = hasher.Write([]byte("X_25519")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetX_25519()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Ldap_ConnectionPool) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.Ldap_ConnectionPool")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInitialSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PassThroughHttp_Request) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.PassThroughHttp_Request")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowedHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeadersToAdd() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("PassThroughState")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPassThroughState()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PassThroughFilterMetadata")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPassThroughFilterMetadata()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PassThroughBody")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPassThroughBody()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PassThroughHttp_Response) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.PassThroughHttp_Response")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowedUpstreamHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedUpstreamHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowedClientHeadersOnDenied")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedClientHeadersOnDenied() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ReadStateFromResponse")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadStateFromResponse()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowedUpstreamHeadersToOverwrite")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedUpstreamHeadersToOverwrite() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_BasicAuthInternal) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_BasicAuthInternal")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Realm")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRealm())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEncryption()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Encryption")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEncryption(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Encryption")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.UserSource.(type) { + + case *ExtAuthConfig_BasicAuthInternal_UserList_: + + if h, ok := interface{}(m.GetUserList()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UserList")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUserList(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UserList")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_OAuthConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_OAuthConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientSecret")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientSecret())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IssuerUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIssuerUrl())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetAuthEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AppUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAppUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CallbackPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCallbackPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scopes")); err != nil { + return 0, err + } + for i, v := range m.GetScopes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_UserSessionConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_UserSessionConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FailOnFetchFailure")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailOnFetchFailure()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCookieOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CookieOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCookieOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CookieOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCipherConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CipherConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCipherConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CipherConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Session.(type) { + + case *ExtAuthConfig_UserSessionConfig_Cookie: + + if h, ok := interface{}(m.GetCookie()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCookie(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_UserSessionConfig_Redis: + + if h, ok := interface{}(m.GetRedis()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Redis")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRedis(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Redis")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_OidcAuthorizationCodeConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_OidcAuthorizationCodeConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientSecret")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientSecret())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IssuerUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIssuerUrl())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetAuthEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTokenEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AppUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAppUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CallbackPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCallbackPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogoutPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLogoutPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AfterLogoutUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAfterLogoutUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scopes")); err != nil { + return 0, err + } + for i, v := range m.GetScopes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetSession()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSession(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDiscoveryOverride()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DiscoveryOverride")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDiscoveryOverride(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DiscoveryOverride")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDiscoveryPollInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DiscoveryPollInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDiscoveryPollInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DiscoveryPollInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetJwksCacheRefreshPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("JwksCacheRefreshPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwksCacheRefreshPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("JwksCacheRefreshPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SessionIdHeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSessionIdHeaderName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ParseCallbackPathAsRegex")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetParseCallbackPathAsRegex()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAutoMapFromMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AutoMapFromMetadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAutoMapFromMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AutoMapFromMetadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEndSessionProperties()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EndSessionProperties")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEndSessionProperties(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EndSessionProperties")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUserSession()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UserSession")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUserSession(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UserSession")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_AccessTokenValidationConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_AccessTokenValidationConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UserinfoUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserinfoUrl())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCacheTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CacheTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCacheTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CacheTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.ValidationType.(type) { + + case *ExtAuthConfig_AccessTokenValidationConfig_IntrospectionUrl: + + if _, err = hasher.Write([]byte("IntrospectionUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIntrospectionUrl())); err != nil { + return 0, err + } + + case *ExtAuthConfig_AccessTokenValidationConfig_Jwt: + + if h, ok := interface{}(m.GetJwt()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwt(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_AccessTokenValidationConfig_Introspection: + + if h, ok := interface{}(m.GetIntrospection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Introspection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIntrospection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Introspection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ScopeValidation.(type) { + + case *ExtAuthConfig_AccessTokenValidationConfig_RequiredScopes: + + if h, ok := interface{}(m.GetRequiredScopes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequiredScopes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequiredScopes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequiredScopes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_PlainOAuth2Config) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_PlainOAuth2Config")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientSecret")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientSecret())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetAuthEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AppUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAppUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CallbackPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCallbackPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scopes")); err != nil { + return 0, err + } + for i, v := range m.GetScopes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetSession()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSession(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Session")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("LogoutPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLogoutPath())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTokenEndpointQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AfterLogoutUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAfterLogoutUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AuthEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthEndpoint())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TokenEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTokenEndpoint())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RevocationEndpoint")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRevocationEndpoint())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUserSession()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UserSession")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUserSession(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UserSession")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_OAuth2Config) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_OAuth2Config")); err != nil { + return 0, err + } + + switch m.OauthType.(type) { + + case *ExtAuthConfig_OAuth2Config_OidcAuthorizationCode: + + if h, ok := interface{}(m.GetOidcAuthorizationCode()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OidcAuthorizationCode")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOidcAuthorizationCode(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OidcAuthorizationCode")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_OAuth2Config_AccessTokenValidationConfig: + + if h, ok := interface{}(m.GetAccessTokenValidationConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AccessTokenValidationConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAccessTokenValidationConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AccessTokenValidationConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_OAuth2Config_Oauth2Config: + + if h, ok := interface{}(m.GetOauth2Config()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Oauth2Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOauth2Config(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Oauth2Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_ApiKeyAuthConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_ApiKeyAuthConfig")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetValidApiKeys() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("HeaderName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeaderName())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeadersFromKeyMetadata() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + switch m.StorageBackend.(type) { + + case *ExtAuthConfig_ApiKeyAuthConfig_K8SSecretApikeyStorage: + + if h, ok := interface{}(m.GetK8SSecretApikeyStorage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("K8SSecretApikeyStorage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetK8SSecretApikeyStorage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("K8SSecretApikeyStorage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_ApiKeyAuthConfig_AerospikeApikeyStorage: + + if h, ok := interface{}(m.GetAerospikeApikeyStorage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AerospikeApikeyStorage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAerospikeApikeyStorage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AerospikeApikeyStorage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_OpaAuthConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_OpaAuthConfig")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetModules() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Query")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetQuery())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_LdapConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_LdapConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UserDnTemplate")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserDnTemplate())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MembershipAttributeName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMembershipAttributeName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowedGroups")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedGroups() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetPool()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Pool")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPool(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Pool")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SearchFilter")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSearchFilter())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DisableGroupChecking")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisableGroupChecking()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetGroupLookupSettings()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GroupLookupSettings")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGroupLookupSettings(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GroupLookupSettings")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_LdapServiceAccountConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_LdapServiceAccountConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Username")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUsername())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Password")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPassword())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CheckGroupsWithServiceAccount")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCheckGroupsWithServiceAccount()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_HmacAuthConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_HmacAuthConfig")); err != nil { + return 0, err + } + + switch m.SecretStorage.(type) { + + case *ExtAuthConfig_HmacAuthConfig_SecretList: + + if h, ok := interface{}(m.GetSecretList()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretList")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretList(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretList")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ImplementationType.(type) { + + case *ExtAuthConfig_HmacAuthConfig_ParametersInHeaders: + + if h, ok := interface{}(m.GetParametersInHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ParametersInHeaders")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetParametersInHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ParametersInHeaders")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_InMemorySecretList) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_InMemorySecretList")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetSecretList() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_Config) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_Config")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetName()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetName(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.AuthConfig.(type) { + + case *ExtAuthConfig_Config_Oauth: + + if h, ok := interface{}(m.GetOauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Oauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Oauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_Oauth2: + + if h, ok := interface{}(m.GetOauth2()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Oauth2")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOauth2(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Oauth2")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_BasicAuth: + + if h, ok := interface{}(m.GetBasicAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BasicAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBasicAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BasicAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_BasicAuthInternal: + + if h, ok := interface{}(m.GetBasicAuthInternal()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BasicAuthInternal")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBasicAuthInternal(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BasicAuthInternal")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_ApiKeyAuth: + + if h, ok := interface{}(m.GetApiKeyAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ApiKeyAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetApiKeyAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ApiKeyAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_PluginAuth: + + if h, ok := interface{}(m.GetPluginAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PluginAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPluginAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PluginAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_OpaAuth: + + if h, ok := interface{}(m.GetOpaAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OpaAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOpaAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OpaAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_Ldap: + + if h, ok := interface{}(m.GetLdap()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ldap")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLdap(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ldap")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_LdapInternal: + + if h, ok := interface{}(m.GetLdapInternal()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LdapInternal")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLdapInternal(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LdapInternal")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_Jwt: + + if h, ok := interface{}(m.GetJwt()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwt(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_PassThroughAuth: + + if h, ok := interface{}(m.GetPassThroughAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PassThroughAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPassThroughAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PassThroughAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_Config_HmacAuth: + + if h, ok := interface{}(m.GetHmacAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HmacAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHmacAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HmacAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_BasicAuthInternal_EncryptionType) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_BasicAuthInternal_EncryptionType")); err != nil { + return 0, err + } + + switch m.Algorithm.(type) { + + case *ExtAuthConfig_BasicAuthInternal_EncryptionType_Apr_: + + if h, ok := interface{}(m.GetApr()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Apr")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetApr(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Apr")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_BasicAuthInternal_EncryptionType_Sha1_: + + if h, ok := interface{}(m.GetSha1()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Sha1")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSha1(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Sha1")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_BasicAuthInternal_User) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_BasicAuthInternal_User")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Salt")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSalt())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HashedPassword")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHashedPassword())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_BasicAuthInternal_UserList) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_BasicAuthInternal_UserList")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetUsers() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_BasicAuthInternal_EncryptionType_Sha1) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_BasicAuthInternal_EncryptionType_Sha1")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_BasicAuthInternal_EncryptionType_Apr) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_BasicAuthInternal_EncryptionType_Apr")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_UserSessionConfig_CipherConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_UserSessionConfig_CipherConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_AccessTokenValidationConfig_JwtValidation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_AccessTokenValidationConfig_JwtValidation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Issuer")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIssuer())); err != nil { + return 0, err + } + + switch m.JwksSourceSpecifier.(type) { + + case *ExtAuthConfig_AccessTokenValidationConfig_JwtValidation_RemoteJwks_: + + if h, ok := interface{}(m.GetRemoteJwks()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RemoteJwks")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemoteJwks(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RemoteJwks")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ExtAuthConfig_AccessTokenValidationConfig_JwtValidation_LocalJwks_: + + if h, ok := interface{}(m.GetLocalJwks()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalJwks")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalJwks(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalJwks")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_AccessTokenValidationConfig_IntrospectionValidation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_AccessTokenValidationConfig_IntrospectionValidation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IntrospectionUrl")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIntrospectionUrl())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientSecret")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientSecret())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UserIdAttributeName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUserIdAttributeName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_AccessTokenValidationConfig_ScopeList) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_AccessTokenValidationConfig_ScopeList")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Scope")); err != nil { + return 0, err + } + for i, v := range m.GetScope() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_AccessTokenValidationConfig_JwtValidation_RemoteJwks) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_AccessTokenValidationConfig_JwtValidation_RemoteJwks")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Url")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUrl())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRefreshInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RefreshInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRefreshInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RefreshInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_AccessTokenValidationConfig_JwtValidation_LocalJwks) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_AccessTokenValidationConfig_JwtValidation_LocalJwks")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InlineString")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetInlineString())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtAuthConfig_ApiKeyAuthConfig_KeyMetadata) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("enterprise.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extauth/v1.ExtAuthConfig_ApiKeyAuthConfig_KeyMetadata")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Username")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUsername())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetMetadata() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/extproc/extproc.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/extproc/extproc.pb.uniquehash.go new file mode 100644 index 00000000000..f9836fd37f9 --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/extproc/extproc.pb.uniquehash.go @@ -0,0 +1,777 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/extproc/extproc.proto + +package extproc + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("extproc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extproc.Settings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetGrpcService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFilterStage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterStage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterStage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterStage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFailureModeAllow()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FailureModeAllow")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFailureModeAllow(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FailureModeAllow")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetProcessingMode()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProcessingMode")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProcessingMode(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProcessingMode")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAsyncMode()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AsyncMode")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAsyncMode(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AsyncMode")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestAttributes")); err != nil { + return 0, err + } + for i, v := range m.GetRequestAttributes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseAttributes")); err != nil { + return 0, err + } + for i, v := range m.GetResponseAttributes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetMessageTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MessageTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMessageTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MessageTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStatPrefix()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStatPrefix(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMutationRules()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MutationRules")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMutationRules(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MutationRules")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxMessageTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxMessageTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxMessageTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxMessageTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisableClearRouteCache()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableClearRouteCache")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableClearRouteCache(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableClearRouteCache")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetForwardRules()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ForwardRules")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetForwardRules(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ForwardRules")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFilterMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterMetadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterMetadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAllowModeOverride()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowModeOverride")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowModeOverride(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowModeOverride")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("MetadataContextNamespaces")); err != nil { + return 0, err + } + for i, v := range m.GetMetadataContextNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("TypedMetadataContextNamespaces")); err != nil { + return 0, err + } + for i, v := range m.GetTypedMetadataContextNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("extproc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extproc.RouteSettings")); err != nil { + return 0, err + } + + switch m.Override.(type) { + + case *RouteSettings_Disabled: + + if h, ok := interface{}(m.GetDisabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Disabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Disabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteSettings_Overrides: + + if h, ok := interface{}(m.GetOverrides()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Overrides")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverrides(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Overrides")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("extproc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extproc.GrpcService")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetExtProcServerRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExtProcServerRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtProcServerRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExtProcServerRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAuthority()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Authority")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAuthority(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Authority")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("InitialMetadata")); err != nil { + return 0, err + } + for i, v := range m.GetInitialMetadata() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Overrides) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("extproc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extproc.Overrides")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetProcessingMode()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProcessingMode")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProcessingMode(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProcessingMode")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAsyncMode()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AsyncMode")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAsyncMode(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AsyncMode")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestAttributes")); err != nil { + return 0, err + } + for i, v := range m.GetRequestAttributes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseAttributes")); err != nil { + return 0, err + } + for i, v := range m.GetResponseAttributes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetGrpcService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("MetadataContextNamespaces")); err != nil { + return 0, err + } + for i, v := range m.GetMetadataContextNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("TypedMetadataContextNamespaces")); err != nil { + return 0, err + } + for i, v := range m.GetTypedMetadataContextNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderForwardingRules) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("extproc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/extproc.HeaderForwardingRules")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAllowedHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowedHeaders")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowedHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowedHeaders")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisallowedHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisallowedHeaders")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisallowedHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisallowedHeaders")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1/graphql.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1/graphql.pb.uniquehash.go new file mode 100644 index 00000000000..41a8d3009d3 --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1/graphql.pb.uniquehash.go @@ -0,0 +1,1579 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/graphql/v1beta1/graphql.proto + +package v1beta1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RequestTemplate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.RequestTemplate")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeaders() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ResponseTemplate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.ResponseTemplate")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResultRoot")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetResultRoot())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetSetters() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcRequestTemplate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.GrpcRequestTemplate")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOutgoingMessageJson()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OutgoingMessageJson")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOutgoingMessageJson(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OutgoingMessageJson")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MethodName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMethodName())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetRequestMetadata() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RESTResolver) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.RESTResolver")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUpstreamRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequest()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequest(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Request")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SpanName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSpanName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcDescriptorRegistry) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.GrpcDescriptorRegistry")); err != nil { + return 0, err + } + + switch m.DescriptorSet.(type) { + + case *GrpcDescriptorRegistry_ProtoDescriptor: + + if _, err = hasher.Write([]byte("ProtoDescriptor")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetProtoDescriptor())); err != nil { + return 0, err + } + + case *GrpcDescriptorRegistry_ProtoDescriptorBin: + + if _, err = hasher.Write([]byte("ProtoDescriptorBin")); err != nil { + return 0, err + } + if _, err = hasher.Write(m.GetProtoDescriptorBin()); err != nil { + return 0, err + } + + case *GrpcDescriptorRegistry_ProtoRefsList: + + if h, ok := interface{}(m.GetProtoRefsList()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProtoRefsList")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProtoRefsList(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProtoRefsList")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcResolver) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.GrpcResolver")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUpstreamRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequestTransform()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTransform")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTransform(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTransform")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SpanName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSpanName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *StitchedSchema) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.StitchedSchema")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Subschemas")); err != nil { + return 0, err + } + for i, v := range m.GetSubschemas() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MockResolver) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.MockResolver")); err != nil { + return 0, err + } + + switch m.Response.(type) { + + case *MockResolver_SyncResponse: + + if h, ok := interface{}(m.GetSyncResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SyncResponse")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSyncResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SyncResponse")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MockResolver_AsyncResponse_: + + if h, ok := interface{}(m.GetAsyncResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AsyncResponse")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAsyncResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AsyncResponse")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MockResolver_ErrorResponse: + + if _, err = hasher.Write([]byte("ErrorResponse")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetErrorResponse())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Resolution) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.Resolution")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetStatPrefix()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStatPrefix(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Resolver.(type) { + + case *Resolution_RestResolver: + + if h, ok := interface{}(m.GetRestResolver()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RestResolver")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRestResolver(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RestResolver")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Resolution_GrpcResolver: + + if h, ok := interface{}(m.GetGrpcResolver()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcResolver")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcResolver(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcResolver")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Resolution_MockResolver: + + if h, ok := interface{}(m.GetMockResolver()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MockResolver")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMockResolver(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MockResolver")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GraphQLApi) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.GraphQLApi")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStatPrefix()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStatPrefix(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPersistedQueryCacheConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PersistedQueryCacheConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPersistedQueryCacheConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PersistedQueryCacheConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("AllowedQueryHashes")); err != nil { + return 0, err + } + for i, v := range m.GetAllowedQueryHashes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Schema.(type) { + + case *GraphQLApi_ExecutableSchema: + + if h, ok := interface{}(m.GetExecutableSchema()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExecutableSchema")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExecutableSchema(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExecutableSchema")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *GraphQLApi_StitchedSchema: + + if h, ok := interface{}(m.GetStitchedSchema()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StitchedSchema")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStitchedSchema(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StitchedSchema")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PersistedQueryCacheConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.PersistedQueryCacheConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CacheSize")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCacheSize()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExecutableSchema) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.ExecutableSchema")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SchemaDefinition")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSchemaDefinition())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetExecutor()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Executor")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExecutor(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Executor")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGrpcDescriptorRegistry()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcDescriptorRegistry")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcDescriptorRegistry(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcDescriptorRegistry")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Executor) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.Executor")); err != nil { + return 0, err + } + + switch m.Executor.(type) { + + case *Executor_Local_: + + if h, ok := interface{}(m.GetLocal()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Local")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocal(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Local")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Executor_Remote_: + + if h, ok := interface{}(m.GetRemote()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Remote")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemote(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Remote")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcDescriptorRegistry_ProtoRefs) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.GrpcDescriptorRegistry_ProtoRefs")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ConfigMapRefs")); err != nil { + return 0, err + } + for i, v := range m.GetConfigMapRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *StitchedSchema_SubschemaConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.StitchedSchema_SubschemaConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Namespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNamespace())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTypeMerge() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *StitchedSchema_SubschemaConfig_TypeMergeConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.StitchedSchema_SubschemaConfig_TypeMergeConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SelectionSet")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSelectionSet())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("QueryName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetQueryName())); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetArgs() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MockResolver_AsyncResponse) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.MockResolver_AsyncResponse")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Response")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDelay()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Delay")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDelay(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Delay")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GraphQLApi_GraphQLApiOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.GraphQLApi_GraphQLApiOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogSensitiveInfo")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetLogSensitiveInfo()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Executor_Local) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.Executor_Local")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetResolutions() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("EnableIntrospection")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnableIntrospection()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Executor_Remote) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.Executor_Remote")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUpstreamRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeaders() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetQueryParams() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("SpanName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSpanName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Executor_Local_LocalExecutorOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/graphql/v1beta1.Executor_Local_LocalExecutorOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxDepth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxDepth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxDepth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxDepth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/jwt/jwt.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/jwt/jwt.pb.uniquehash.go new file mode 100644 index 00000000000..993948f288b --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/jwt/jwt.pb.uniquehash.go @@ -0,0 +1,702 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/jwt/jwt.proto + +package jwt + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *JwtStagedVhostExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.JwtStagedVhostExtension")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBeforeExtAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BeforeExtAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBeforeExtAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BeforeExtAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAfterExtAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AfterExtAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAfterExtAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AfterExtAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *JwtStagedRouteExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.JwtStagedRouteExtension")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBeforeExtAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BeforeExtAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBeforeExtAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BeforeExtAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAfterExtAuth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AfterExtAuth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAfterExtAuth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AfterExtAuth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VhostExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.VhostExtension")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetProviders() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowMissingOrFailedJwt")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAllowMissingOrFailedJwt()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.RouteExtension")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Disable")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisable()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Provider) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.Provider")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetJwks()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Jwks")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwks(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Jwks")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Audiences")); err != nil { + return 0, err + } + for i, v := range m.GetAudiences() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Issuer")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIssuer())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTokenSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TokenSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTokenSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TokenSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("KeepToken")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetKeepToken()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClaimsToHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetClaimsToHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetClockSkewSeconds()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClockSkewSeconds")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClockSkewSeconds(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClockSkewSeconds")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Jwks) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.Jwks")); err != nil { + return 0, err + } + + switch m.Jwks.(type) { + + case *Jwks_Remote: + + if h, ok := interface{}(m.GetRemote()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Remote")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemote(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Remote")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Jwks_Local: + + if h, ok := interface{}(m.GetLocal()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Local")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocal(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Local")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RemoteJwks) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.RemoteJwks")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Url")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUrl())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUpstreamRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCacheDuration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CacheDuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCacheDuration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CacheDuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAsyncFetch()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AsyncFetch")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAsyncFetch(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AsyncFetch")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LocalJwks) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.LocalJwks")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TokenSource) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.TokenSource")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Headers")); err != nil { + return 0, err + } + for i, v := range m.GetHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("QueryParams")); err != nil { + return 0, err + } + for i, v := range m.GetQueryParams() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ClaimToHeader) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.ClaimToHeader")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Claim")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClaim())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeader())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAppend()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TokenSource_HeaderSource) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("jwt.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/jwt.TokenSource_HeaderSource")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeader())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Prefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefix())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/ratelimit/ratelimit.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/ratelimit/ratelimit.pb.uniquehash.go new file mode 100644 index 00000000000..a571990549f --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/ratelimit/ratelimit.pb.uniquehash.go @@ -0,0 +1,529 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/ratelimit/ratelimit.proto + +package ratelimit + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *IngressRateLimit) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.IngressRateLimit")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAuthorizedLimits()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AuthorizedLimits")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAuthorizedLimits(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AuthorizedLimits")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAnonymousLimits()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AnonymousLimits")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAnonymousLimits(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AnonymousLimits")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.Settings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRatelimitServerRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitServerRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitServerRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitServerRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequestTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DenyOnFail")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDenyOnFail()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("EnableXRatelimitHeaders")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnableXRatelimitHeaders()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RateLimitBeforeAuth")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRateLimitBeforeAuth()) + if err != nil { + return 0, err + } + + switch m.ServiceType.(type) { + + case *Settings_GrpcService: + + if h, ok := interface{}(m.GetGrpcService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.GrpcService")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Authority")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAuthority())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.ServiceSettings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Descriptors")); err != nil { + return 0, err + } + for i, v := range m.GetDescriptors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("SetDescriptors")); err != nil { + return 0, err + } + for i, v := range m.GetSetDescriptors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimitConfigRefs) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.RateLimitConfigRefs")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Refs")); err != nil { + return 0, err + } + for i, v := range m.GetRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimitConfigRef) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.RateLimitConfigRef")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Namespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNamespace())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimitVhostExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.RateLimitVhostExtension")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + for i, v := range m.GetRateLimits() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetLocalRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalRatelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalRatelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimitRouteExtension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/ratelimit.RateLimitRouteExtension")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IncludeVhRateLimits")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIncludeVhRateLimits()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + for i, v := range m.GetRateLimits() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetLocalRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalRatelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalRatelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/rbac/rbac.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/rbac/rbac.pb.uniquehash.go new file mode 100644 index 00000000000..a0338dc720f --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/rbac/rbac.pb.uniquehash.go @@ -0,0 +1,345 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/rbac/rbac.proto + +package rbac + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rbac.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/rbac.Settings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequireRbac")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequireRbac()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ExtensionSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rbac.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/rbac.ExtensionSettings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Disable")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisable()) + if err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetPolicies() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Policy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rbac.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/rbac.Policy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Principals")); err != nil { + return 0, err + } + for i, v := range m.GetPrincipals() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetPermissions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Permissions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPermissions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Permissions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("NestedClaimDelimiter")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetNestedClaimDelimiter())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Principal) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rbac.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/rbac.Principal")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetJwtPrincipal()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("JwtPrincipal")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwtPrincipal(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("JwtPrincipal")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *JWTPrincipal) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rbac.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/rbac.JWTPrincipal")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetClaims() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Provider")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetProvider())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMatcher()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Permissions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rbac.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/rbac.Permissions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PathPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPathPrefix())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Methods")); err != nil { + return 0, err + } + for i, v := range m.GetMethods() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/options/waf/waf.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/options/waf/waf.pb.uniquehash.go new file mode 100644 index 00000000000..9fc11622db9 --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/options/waf/waf.pb.uniquehash.go @@ -0,0 +1,275 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/options/waf/waf.proto + +package waf + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("waf.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/waf.Settings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Disabled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisabled()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CustomInterventionMessage")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCustomInterventionMessage())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCoreRuleSet()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CoreRuleSet")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCoreRuleSet(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CoreRuleSet")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RuleSets")); err != nil { + return 0, err + } + for i, v := range m.GetRuleSets() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ConfigMapRuleSets")); err != nil { + return 0, err + } + for i, v := range m.GetConfigMapRuleSets() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetAuditLogging()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AuditLogging")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAuditLogging(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AuditLogging")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RequestHeadersOnly")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequestHeadersOnly()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseHeadersOnly")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseHeadersOnly()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RuleSetFromConfigMap) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("waf.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/waf.RuleSetFromConfigMap")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfigMapRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConfigMapRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfigMapRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConfigMapRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DataMapKeys")); err != nil { + return 0, err + } + for i, v := range m.GetDataMapKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CoreRuleSet) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("waf.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise/options/waf.CoreRuleSet")); err != nil { + return 0, err + } + + switch m.CustomSettingsType.(type) { + + case *CoreRuleSet_CustomSettingsString: + + if _, err = hasher.Write([]byte("CustomSettingsString")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCustomSettingsString())); err != nil { + return 0, err + } + + case *CoreRuleSet_CustomSettingsFile: + + if _, err = hasher.Write([]byte("CustomSettingsFile")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCustomSettingsFile())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/enterprise/ratelimit.pb.uniquehash.go b/projects/gloo/pkg/api/v1/enterprise/ratelimit.pb.uniquehash.go new file mode 100644 index 00000000000..fe14b3369b6 --- /dev/null +++ b/projects/gloo/pkg/api/v1/enterprise/ratelimit.pb.uniquehash.go @@ -0,0 +1,114 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/enterprise/ratelimit.proto + +package enterprise + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RateLimitConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("glooe.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/enterprise.RateLimitConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Domain")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDomain())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Descriptors")); err != nil { + return 0, err + } + for i, v := range m.GetDescriptors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("SetDescriptors")); err != nil { + return 0, err + } + for i, v := range m.GetSetDescriptors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/extensions.pb.uniquehash.go b/projects/gloo/pkg/api/v1/extensions.pb.uniquehash.go new file mode 100644 index 00000000000..f20ee5b68d6 --- /dev/null +++ b/projects/gloo/pkg/api/v1/extensions.pb.uniquehash.go @@ -0,0 +1,128 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/extensions.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Extensions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Extensions")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetConfigs() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Extension) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Extension")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/failover.pb.uniquehash.go b/projects/gloo/pkg/api/v1/failover.pb.uniquehash.go new file mode 100644 index 00000000000..904e2eec618 --- /dev/null +++ b/projects/gloo/pkg/api/v1/failover.pb.uniquehash.go @@ -0,0 +1,456 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/failover.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Failover) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Failover")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PrioritizedLocalities")); err != nil { + return 0, err + } + for i, v := range m.GetPrioritizedLocalities() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Policy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Policy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LocalityLbEndpoints) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LocalityLbEndpoints")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetLocality()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Locality")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocality(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Locality")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("LbEndpoints")); err != nil { + return 0, err + } + for i, v := range m.GetLbEndpoints() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetLoadBalancingWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LoadBalancingWeight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLoadBalancingWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LoadBalancingWeight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LbEndpoint) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LbEndpoint")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Port")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPort()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHealthCheckConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthCheckConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthCheckConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthCheckConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUpstreamSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamSslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamSslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetLoadBalancingWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LoadBalancingWeight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLoadBalancingWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LoadBalancingWeight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Locality) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Locality")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Region")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegion())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Zone")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetZone())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SubZone")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSubZone())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Failover_PrioritizedLocality) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Failover_PrioritizedLocality")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LocalityEndpoints")); err != nil { + return 0, err + } + for i, v := range m.GetLocalityEndpoints() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Failover_Policy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Failover_Policy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOverprovisioningFactor()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OverprovisioningFactor")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverprovisioningFactor(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OverprovisioningFactor")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LbEndpoint_HealthCheckConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LbEndpoint_HealthCheckConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PortValue")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPortValue()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Hostname")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostname())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Method")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMethod())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/filters/stages.pb.uniquehash.go b/projects/gloo/pkg/api/v1/filters/stages.pb.uniquehash.go new file mode 100644 index 00000000000..fe68ab560e6 --- /dev/null +++ b/projects/gloo/pkg/api/v1/filters/stages.pb.uniquehash.go @@ -0,0 +1,63 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/filters/stages.proto + +package filters + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FilterStage) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("filters.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/filters.FilterStage")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStage()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Predicate")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPredicate()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/gloosnapshot/snap.pb.uniquehash.go b/projects/gloo/pkg/api/v1/gloosnapshot/snap.pb.uniquehash.go new file mode 100644 index 00000000000..a2254b0db71 --- /dev/null +++ b/projects/gloo/pkg/api/v1/gloosnapshot/snap.pb.uniquehash.go @@ -0,0 +1,28 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/gloosnapshot/snap.proto + +package gloosnapshot + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) diff --git a/projects/gloo/pkg/api/v1/load_balancer.pb.uniquehash.go b/projects/gloo/pkg/api/v1/load_balancer.pb.uniquehash.go new file mode 100644 index 00000000000..6578fe8aa17 --- /dev/null +++ b/projects/gloo/pkg/api/v1/load_balancer.pb.uniquehash.go @@ -0,0 +1,504 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/load_balancer.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHealthyPanicThreshold()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthyPanicThreshold")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthyPanicThreshold(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthyPanicThreshold")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUpdateMergeWindow()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpdateMergeWindow")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpdateMergeWindow(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpdateMergeWindow")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Type.(type) { + + case *LoadBalancerConfig_RoundRobin_: + + if h, ok := interface{}(m.GetRoundRobin()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RoundRobin")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRoundRobin(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RoundRobin")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *LoadBalancerConfig_LeastRequest_: + + if h, ok := interface{}(m.GetLeastRequest()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LeastRequest")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLeastRequest(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LeastRequest")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *LoadBalancerConfig_Random_: + + if h, ok := interface{}(m.GetRandom()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Random")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRandom(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Random")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *LoadBalancerConfig_RingHash_: + + if h, ok := interface{}(m.GetRingHash()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RingHash")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRingHash(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RingHash")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *LoadBalancerConfig_Maglev_: + + if h, ok := interface{}(m.GetMaglev()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Maglev")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaglev(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Maglev")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.LocalityConfig.(type) { + + case *LoadBalancerConfig_LocalityWeightedLbConfig: + + if h, ok := interface{}(m.GetLocalityWeightedLbConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalityWeightedLbConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalityWeightedLbConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalityWeightedLbConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig_RoundRobin) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig_RoundRobin")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSlowStartConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SlowStartConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSlowStartConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SlowStartConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig_LeastRequest) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig_LeastRequest")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ChoiceCount")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetChoiceCount()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSlowStartConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SlowStartConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSlowStartConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SlowStartConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig_Random) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig_Random")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig_RingHashConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig_RingHashConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MinimumRingSize")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMinimumRingSize()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaximumRingSize")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaximumRingSize()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig_RingHash) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig_RingHash")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRingHashConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RingHashConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRingHashConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RingHashConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig_Maglev) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig_Maglev")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LoadBalancerConfig_SlowStartConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.LoadBalancerConfig_SlowStartConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSlowStartWindow()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SlowStartWindow")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSlowStartWindow(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SlowStartWindow")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAggression()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Aggression")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAggression(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Aggression")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMinWeightPercent()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MinWeightPercent")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMinWeightPercent(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MinWeightPercent")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options.pb.uniquehash.go new file mode 100644 index 00000000000..2a86d2cf4d8 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options.pb.uniquehash.go @@ -0,0 +1,2600 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ListenerOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.ListenerOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAccessLoggingService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AccessLoggingService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAccessLoggingService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AccessLoggingService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtensions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtensions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPerConnectionBufferLimitBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerConnectionBufferLimitBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerConnectionBufferLimitBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerConnectionBufferLimitBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SocketOptions")); err != nil { + return 0, err + } + for i, v := range m.GetSocketOptions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetProxyProtocol()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProxyProtocol")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxyProtocol(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProxyProtocol")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConnectionBalanceConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionBalanceConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionBalanceConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionBalanceConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConnectionBalanceConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.ConnectionBalanceConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetExactBalance()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExactBalance")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExactBalance(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExactBalance")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteConfigurationOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.RouteConfigurationOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxDirectResponseBodySizeBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxDirectResponseBodySizeBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxDirectResponseBodySizeBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxDirectResponseBodySizeBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMostSpecificHeaderMutationsWins()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MostSpecificHeaderMutationsWins")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMostSpecificHeaderMutationsWins(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MostSpecificHeaderMutationsWins")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpListenerOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.HttpListenerOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetGrpcWeb()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcWeb")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcWeb(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcWeb")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHttpConnectionManagerSettings()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpConnectionManagerSettings")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpConnectionManagerSettings(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpConnectionManagerSettings")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHealthCheck()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthCheck")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthCheck(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthCheck")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtensions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtensions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWaf()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Waf")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWaf(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Waf")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDlp()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Dlp")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDlp(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Dlp")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWasm()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Wasm")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWasm(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Wasm")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRatelimitServer()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitServer")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitServer(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitServer")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCaching()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Caching")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCaching(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Caching")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGzip()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Gzip")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGzip(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Gzip")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetProxyLatency()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProxyLatency")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxyLatency(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProxyLatency")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetBuffer()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Buffer")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBuffer(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Buffer")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCsrf()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCsrf(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGrpcJsonTranscoder()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcJsonTranscoder")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcJsonTranscoder(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcJsonTranscoder")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSanitizeClusterHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SanitizeClusterHeader")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSanitizeClusterHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SanitizeClusterHeader")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetLeftmostXffAddress()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LeftmostXffAddress")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLeftmostXffAddress(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LeftmostXffAddress")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDynamicForwardProxy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DynamicForwardProxy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDynamicForwardProxy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DynamicForwardProxy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConnectionLimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionLimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionLimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionLimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetNetworkLocalRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NetworkLocalRatelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNetworkLocalRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NetworkLocalRatelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHttpLocalRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpLocalRatelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpLocalRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpLocalRatelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRouter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Router")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRouter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Router")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.ExtProcConfig.(type) { + + case *HttpListenerOptions_DisableExtProc: + + if h, ok := interface{}(m.GetDisableExtProc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableExtProc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableExtProc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableExtProc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HttpListenerOptions_ExtProc: + + if h, ok := interface{}(m.GetExtProc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtProc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpListenerOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.TcpListenerOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTcpProxySettings()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpProxySettings")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpProxySettings(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpProxySettings")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConnectionLimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionLimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionLimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionLimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetLocalRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalRatelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalRatelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHostOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.VirtualHostOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetExtensions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtensions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Retries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Retries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStats()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Stats")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStats(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Stats")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHeaderManipulation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderManipulation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderManipulation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderManipulation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCors()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCors(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTransformations()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformations(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRatelimitBasic()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitBasic")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitBasic(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitBasic")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWaf()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Waf")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWaf(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Waf")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRbac()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Rbac")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRbac(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Rbac")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDlp()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Dlp")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDlp(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Dlp")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetBufferPerRoute()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BufferPerRoute")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBufferPerRoute(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BufferPerRoute")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCsrf()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCsrf(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIncludeRequestAttemptCount()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IncludeRequestAttemptCount")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIncludeRequestAttemptCount(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IncludeRequestAttemptCount")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIncludeAttemptCountInResponse()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IncludeAttemptCountInResponse")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIncludeAttemptCountInResponse(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IncludeAttemptCountInResponse")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStagedTransformations()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StagedTransformations")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStagedTransformations(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StagedTransformations")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtProc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtProc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.RateLimitEarlyConfigType.(type) { + + case *VirtualHostOptions_RatelimitEarly: + + if h, ok := interface{}(m.GetRatelimitEarly()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitEarly")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitEarly(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitEarly")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *VirtualHostOptions_RateLimitEarlyConfigs: + + if h, ok := interface{}(m.GetRateLimitEarlyConfigs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimitEarlyConfigs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimitEarlyConfigs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimitEarlyConfigs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.RateLimitConfigType.(type) { + + case *VirtualHostOptions_Ratelimit: + + if h, ok := interface{}(m.GetRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ratelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ratelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *VirtualHostOptions_RateLimitConfigs: + + if h, ok := interface{}(m.GetRateLimitConfigs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimitConfigs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimitConfigs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimitConfigs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.RateLimitRegularConfigType.(type) { + + case *VirtualHostOptions_RatelimitRegular: + + if h, ok := interface{}(m.GetRatelimitRegular()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitRegular")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitRegular(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitRegular")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *VirtualHostOptions_RateLimitRegularConfigs: + + if h, ok := interface{}(m.GetRateLimitRegularConfigs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimitRegularConfigs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimitRegularConfigs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimitRegularConfigs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.JwtConfig.(type) { + + case *VirtualHostOptions_Jwt: + + if h, ok := interface{}(m.GetJwt()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwt(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *VirtualHostOptions_JwtStaged: + + if h, ok := interface{}(m.GetJwtStaged()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("JwtStaged")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwtStaged(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("JwtStaged")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.RouteOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTransformations()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformations(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFaults()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Faults")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFaults(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Faults")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPrefixRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PrefixRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPrefixRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PrefixRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Timeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Retries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Retries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtensions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtensions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTracing()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTracing(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetShadowing()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Shadowing")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetShadowing(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Shadowing")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHeaderManipulation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderManipulation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderManipulation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderManipulation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAppendXForwardedHost()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AppendXForwardedHost")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppendXForwardedHost(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AppendXForwardedHost")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCors()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCors(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cors")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetLbHash()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LbHash")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLbHash(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LbHash")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Upgrades")); err != nil { + return 0, err + } + for i, v := range m.GetUpgrades() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetRatelimitBasic()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitBasic")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitBasic(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitBasic")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWaf()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Waf")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWaf(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Waf")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRbac()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Rbac")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRbac(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Rbac")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDlp()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Dlp")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDlp(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Dlp")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetBufferPerRoute()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BufferPerRoute")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBufferPerRoute(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BufferPerRoute")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCsrf()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCsrf(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStagedTransformations()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StagedTransformations")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStagedTransformations(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StagedTransformations")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetEnvoyMetadata() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetRegexRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRegexRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxStreamDuration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxStreamDuration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIdleTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIdleTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtProc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtProc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.HostRewriteType.(type) { + + case *RouteOptions_HostRewrite: + + if _, err = hasher.Write([]byte("HostRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRewrite())); err != nil { + return 0, err + } + + case *RouteOptions_AutoHostRewrite: + + if h, ok := interface{}(m.GetAutoHostRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AutoHostRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAutoHostRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AutoHostRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteOptions_HostRewritePathRegex: + + if h, ok := interface{}(m.GetHostRewritePathRegex()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HostRewritePathRegex")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHostRewritePathRegex(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HostRewritePathRegex")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.RateLimitEarlyConfigType.(type) { + + case *RouteOptions_RatelimitEarly: + + if h, ok := interface{}(m.GetRatelimitEarly()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitEarly")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitEarly(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitEarly")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteOptions_RateLimitEarlyConfigs: + + if h, ok := interface{}(m.GetRateLimitEarlyConfigs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimitEarlyConfigs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimitEarlyConfigs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimitEarlyConfigs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.RateLimitConfigType.(type) { + + case *RouteOptions_Ratelimit: + + if h, ok := interface{}(m.GetRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ratelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ratelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteOptions_RateLimitConfigs: + + if h, ok := interface{}(m.GetRateLimitConfigs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimitConfigs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimitConfigs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimitConfigs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.RateLimitRegularConfigType.(type) { + + case *RouteOptions_RatelimitRegular: + + if h, ok := interface{}(m.GetRatelimitRegular()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitRegular")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitRegular(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitRegular")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteOptions_RateLimitRegularConfigs: + + if h, ok := interface{}(m.GetRateLimitRegularConfigs()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimitRegularConfigs")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimitRegularConfigs(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimitRegularConfigs")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.JwtConfig.(type) { + + case *RouteOptions_Jwt: + + if h, ok := interface{}(m.GetJwt()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwt(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Jwt")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteOptions_JwtStaged: + + if h, ok := interface{}(m.GetJwtStaged()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("JwtStaged")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJwtStaged(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("JwtStaged")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DestinationSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.DestinationSpec")); err != nil { + return 0, err + } + + switch m.DestinationType.(type) { + + case *DestinationSpec_Aws: + + if h, ok := interface{}(m.GetAws()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAws(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DestinationSpec_Azure: + + if h, ok := interface{}(m.GetAzure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Azure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAzure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Azure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DestinationSpec_Rest: + + if h, ok := interface{}(m.GetRest()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Rest")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRest(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Rest")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DestinationSpec_Grpc: + + if h, ok := interface{}(m.GetGrpc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WeightedDestinationOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.WeightedDestinationOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHeaderManipulation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderManipulation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderManipulation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderManipulation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTransformations()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformations(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Transformations")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtensions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtensions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetBufferPerRoute()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BufferPerRoute")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBufferPerRoute(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BufferPerRoute")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCsrf()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCsrf(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Csrf")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStagedTransformations()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StagedTransformations")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStagedTransformations(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StagedTransformations")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConnectionBalanceConfig_ExactBalance) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.ConnectionBalanceConfig_ExactBalance")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteOptions_MaxStreamDuration) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.RouteOptions_MaxStreamDuration")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxStreamDuration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxStreamDuration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGrpcTimeoutHeaderMax()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcTimeoutHeaderMax")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcTimeoutHeaderMax(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcTimeoutHeaderMax")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGrpcTimeoutHeaderOffset()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcTimeoutHeaderOffset")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcTimeoutHeaderOffset(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcTimeoutHeaderOffset")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go new file mode 100644 index 00000000000..a5b144f62db --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/als/als.pb.uniquehash.go @@ -0,0 +1,993 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/als/als.proto + +package als + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AccessLoggingService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.AccessLoggingService")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AccessLog")); err != nil { + return 0, err + } + for i, v := range m.GetAccessLog() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AccessLog) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.AccessLog")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Filter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Filter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.OutputDestination.(type) { + + case *AccessLog_FileSink: + + if h, ok := interface{}(m.GetFileSink()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FileSink")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFileSink(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FileSink")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLog_GrpcService: + + if h, ok := interface{}(m.GetGrpcService()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcService(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcService")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FileSink) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.FileSink")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + switch m.OutputFormat.(type) { + + case *FileSink_StringFormat: + + if _, err = hasher.Write([]byte("StringFormat")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStringFormat())); err != nil { + return 0, err + } + + case *FileSink_JsonFormat: + + if h, ok := interface{}(m.GetJsonFormat()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("JsonFormat")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetJsonFormat(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("JsonFormat")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.GrpcService")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLogName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AdditionalRequestHeadersToLog")); err != nil { + return 0, err + } + for i, v := range m.GetAdditionalRequestHeadersToLog() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AdditionalResponseHeadersToLog")); err != nil { + return 0, err + } + for i, v := range m.GetAdditionalResponseHeadersToLog() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AdditionalResponseTrailersToLog")); err != nil { + return 0, err + } + for i, v := range m.GetAdditionalResponseTrailersToLog() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + switch m.ServiceRef.(type) { + + case *GrpcService_StaticClusterName: + + if _, err = hasher.Write([]byte("StaticClusterName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStaticClusterName())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AccessLogFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.AccessLogFilter")); err != nil { + return 0, err + } + + switch m.FilterSpecifier.(type) { + + case *AccessLogFilter_StatusCodeFilter: + + if h, ok := interface{}(m.GetStatusCodeFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StatusCodeFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStatusCodeFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StatusCodeFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_DurationFilter: + + if h, ok := interface{}(m.GetDurationFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DurationFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDurationFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DurationFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_NotHealthCheckFilter: + + if h, ok := interface{}(m.GetNotHealthCheckFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NotHealthCheckFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNotHealthCheckFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NotHealthCheckFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_TraceableFilter: + + if h, ok := interface{}(m.GetTraceableFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TraceableFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTraceableFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TraceableFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_RuntimeFilter: + + if h, ok := interface{}(m.GetRuntimeFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RuntimeFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRuntimeFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RuntimeFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_AndFilter: + + if h, ok := interface{}(m.GetAndFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AndFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAndFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AndFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_OrFilter: + + if h, ok := interface{}(m.GetOrFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OrFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOrFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OrFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_HeaderFilter: + + if h, ok := interface{}(m.GetHeaderFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_ResponseFlagFilter: + + if h, ok := interface{}(m.GetResponseFlagFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseFlagFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseFlagFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseFlagFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *AccessLogFilter_GrpcStatusFilter: + + if h, ok := interface{}(m.GetGrpcStatusFilter()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcStatusFilter")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcStatusFilter(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcStatusFilter")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ComparisonFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.ComparisonFilter")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Op")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetOp()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *StatusCodeFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.StatusCodeFilter")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetComparison()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Comparison")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetComparison(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Comparison")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DurationFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.DurationFilter")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetComparison()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Comparison")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetComparison(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Comparison")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *NotHealthCheckFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.NotHealthCheckFilter")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TraceableFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.TraceableFilter")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RuntimeFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.RuntimeFilter")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RuntimeKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRuntimeKey())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPercentSampled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PercentSampled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPercentSampled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PercentSampled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("UseIndependentRandomness")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUseIndependentRandomness()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AndFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.AndFilter")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Filters")); err != nil { + return 0, err + } + for i, v := range m.GetFilters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *OrFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.OrFilter")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Filters")); err != nil { + return 0, err + } + for i, v := range m.GetFilters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.HeaderFilter")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ResponseFlagFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.ResponseFlagFilter")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Flags")); err != nil { + return 0, err + } + for i, v := range m.GetFlags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcStatusFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("als.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/als.GrpcStatusFilter")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Statuses")); err != nil { + return 0, err + } + for i, v := range m.GetStatuses() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, v) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Exclude")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetExclude()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/aws/aws.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/aws/aws.pb.uniquehash.go new file mode 100644 index 00000000000..b3142242d6c --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/aws/aws.pb.uniquehash.go @@ -0,0 +1,260 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/aws/aws.proto + +package aws + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("aws.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/aws.UpstreamSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Region")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegion())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("LambdaFunctions")); err != nil { + return 0, err + } + for i, v := range m.GetLambdaFunctions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RoleArn")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRoleArn())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AwsAccountId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAwsAccountId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DisableRoleChaining")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisableRoleChaining()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDestinationOverrides()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DestinationOverrides")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDestinationOverrides(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DestinationOverrides")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *LambdaFunctionSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("aws.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/aws.LambdaFunctionSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogicalName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLogicalName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LambdaFunctionName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLambdaFunctionName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Qualifier")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetQualifier())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DestinationSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("aws.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/aws.DestinationSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogicalName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetLogicalName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InvocationStyle")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInvocationStyle()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetRequestTransformation()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseTransformation()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UnwrapAsAlb")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUnwrapAsAlb()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UnwrapAsApiGateway")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUnwrapAsApiGateway()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("WrapAsApiGateway")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetWrapAsApiGateway()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/aws/ec2/aws_ec2.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/aws/ec2/aws_ec2.pb.uniquehash.go new file mode 100644 index 00000000000..3595fd08893 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/aws/ec2/aws_ec2.pb.uniquehash.go @@ -0,0 +1,214 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/aws/ec2/aws_ec2.proto + +package ec2 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("aws_ec2.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/aws/ec2.UpstreamSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Region")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegion())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RoleArn")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRoleArn())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Filters")); err != nil { + return 0, err + } + for i, v := range m.GetFilters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("PublicIp")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPublicIp()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Port")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPort()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TagFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("aws_ec2.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/aws/ec2.TagFilter")); err != nil { + return 0, err + } + + switch m.Spec.(type) { + + case *TagFilter_Key: + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + case *TagFilter_KvPair_: + + if h, ok := interface{}(m.GetKvPair()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KvPair")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKvPair(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KvPair")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TagFilter_KvPair) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("aws_ec2.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/aws/ec2.TagFilter_KvPair")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/azure/azure.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/azure/azure.pb.uniquehash.go new file mode 100644 index 00000000000..33faca9e55d --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/azure/azure.pb.uniquehash.go @@ -0,0 +1,164 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/azure/azure.proto + +package azure + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("azure.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/azure.UpstreamSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FunctionAppName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetFunctionAppName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Functions")); err != nil { + return 0, err + } + for i, v := range m.GetFunctions() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DestinationSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("azure.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/azure.DestinationSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FunctionName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetFunctionName())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec_FunctionSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("azure.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/azure.UpstreamSpec_FunctionSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FunctionName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetFunctionName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AuthLevel")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAuthLevel()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/connection_limit/connection_limit.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/connection_limit/connection_limit.pb.uniquehash.go new file mode 100644 index 00000000000..0bf9ec64354 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/connection_limit/connection_limit.pb.uniquehash.go @@ -0,0 +1,87 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/connection_limit/connection_limit.proto + +package connection_limit + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConnectionLimit) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("connection_limit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/connection_limit.ConnectionLimit")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxActiveConnections()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxActiveConnections")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxActiveConnections(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxActiveConnections")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDelayBeforeClose()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DelayBeforeClose")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDelayBeforeClose(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DelayBeforeClose")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/consul/consul.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/consul/consul.pb.uniquehash.go new file mode 100644 index 00000000000..95c1ff91e50 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/consul/consul.pb.uniquehash.go @@ -0,0 +1,195 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/consul/consul.proto + +package consul + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("consul.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/consul.UpstreamSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceTags")); err != nil { + return 0, err + } + for i, v := range m.GetServiceTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("SubsetTags")); err != nil { + return 0, err + } + for i, v := range m.GetSubsetTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("InstanceTags")); err != nil { + return 0, err + } + for i, v := range m.GetInstanceTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("InstanceBlacklistTags")); err != nil { + return 0, err + } + for i, v := range m.GetInstanceBlacklistTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetServiceSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ConsistencyMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetConsistencyMode()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetQueryOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("QueryOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetQueryOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("QueryOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ConnectEnabled")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetConnectEnabled()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DataCenters")); err != nil { + return 0, err + } + for i, v := range m.GetDataCenters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/consul/query_options.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/consul/query_options.pb.uniquehash.go new file mode 100644 index 00000000000..b5e1d39129e --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/consul/query_options.pb.uniquehash.go @@ -0,0 +1,67 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/consul/query_options.proto + +package consul + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *QueryOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("consul.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/consul.QueryOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUseCache()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseCache")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseCache(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseCache")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/cors/cors.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/cors/cors.pb.uniquehash.go new file mode 100644 index 00000000000..42311b61ea5 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/cors/cors.pb.uniquehash.go @@ -0,0 +1,155 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/cors/cors.proto + +package cors + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CorsPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("cors.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/cors.CorsPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowOrigin")); err != nil { + return 0, err + } + for i, v := range m.GetAllowOrigin() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowOriginRegex")); err != nil { + return 0, err + } + for i, v := range m.GetAllowOriginRegex() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowMethods")); err != nil { + return 0, err + } + for i, v := range m.GetAllowMethods() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AllowHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetAllowHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ExposeHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetExposeHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("MaxAge")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMaxAge())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AllowCredentials")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAllowCredentials()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DisableForRoute")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisableForRoute()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy/dynamic_forward_proxy.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy/dynamic_forward_proxy.pb.uniquehash.go new file mode 100644 index 00000000000..025a0e91d9b --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy/dynamic_forward_proxy.pb.uniquehash.go @@ -0,0 +1,582 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/dynamic_forward_proxy/dynamic_forward_proxy.proto + +package dynamic_forward_proxy + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FilterConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.FilterConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDnsCacheConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsCacheConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsCacheConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsCacheConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SaveUpstreamAddress")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSaveUpstreamAddress()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DnsCacheCircuitBreakers) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.DnsCacheCircuitBreakers")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxPendingRequests()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxPendingRequests")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxPendingRequests(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxPendingRequests")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DnsCacheConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.DnsCacheConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DnsLookupFamily")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDnsLookupFamily()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDnsRefreshRate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsRefreshRate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsRefreshRate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsRefreshRate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHostTtl()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HostTtl")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHostTtl(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HostTtl")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxHosts()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxHosts")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxHosts(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxHosts")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDnsFailureRefreshRate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsFailureRefreshRate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsFailureRefreshRate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsFailureRefreshRate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDnsCacheCircuitBreaker()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsCacheCircuitBreaker")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsCacheCircuitBreaker(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsCacheCircuitBreaker")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("PreresolveHostnames")); err != nil { + return 0, err + } + for i, v := range m.GetPreresolveHostnames() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetDnsQueryTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsQueryTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsQueryTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsQueryTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.DnsCacheType.(type) { + + case *DnsCacheConfig_CaresDns: + + if h, ok := interface{}(m.GetCaresDns()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CaresDns")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCaresDns(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CaresDns")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *DnsCacheConfig_AppleDns: + + if h, ok := interface{}(m.GetAppleDns()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AppleDns")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppleDns(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AppleDns")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RefreshRate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.RefreshRate")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBaseInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBaseInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PerRouteConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.PerRouteConfig")); err != nil { + return 0, err + } + + switch m.HostRewriteSpecifier.(type) { + + case *PerRouteConfig_HostRewrite: + + if _, err = hasher.Write([]byte("HostRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRewrite())); err != nil { + return 0, err + } + + case *PerRouteConfig_AutoHostRewriteHeader: + + if _, err = hasher.Write([]byte("AutoHostRewriteHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAutoHostRewriteHeader())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DnsResolverOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.DnsResolverOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UseTcpForDnsLookups")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUseTcpForDnsLookups()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("NoDefaultSearchDomain")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetNoDefaultSearchDomain()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CaresDnsResolverConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.CaresDnsResolverConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Resolvers")); err != nil { + return 0, err + } + for i, v := range m.GetResolvers() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetDnsResolverOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsResolverOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsResolverOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsResolverOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AppleDnsResolverConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("dfp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/dynamic_forward_proxy.AppleDnsResolverConfig")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/faultinjection/fault.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/faultinjection/fault.pb.uniquehash.go new file mode 100644 index 00000000000..6b5269860c0 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/faultinjection/fault.pb.uniquehash.go @@ -0,0 +1,169 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/faultinjection/fault.proto + +package faultinjection + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAbort) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("fault.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/faultinjection.RouteAbort")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Percentage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPercentage()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HttpStatus")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHttpStatus()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteDelay) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("fault.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/faultinjection.RouteDelay")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Percentage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPercentage()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetFixedDelay()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FixedDelay")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFixedDelay(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FixedDelay")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteFaults) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("fault.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/faultinjection.RouteFaults")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAbort()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Abort")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAbort(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Abort")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDelay()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Delay")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDelay(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Delay")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/graphql/graphql.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/graphql/graphql.pb.uniquehash.go new file mode 100644 index 00000000000..f63c497bc6f --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/graphql/graphql.pb.uniquehash.go @@ -0,0 +1,93 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/graphql/graphql.proto + +package graphql + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/graphql.ServiceSpec")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEndpoint()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Endpoint")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEndpoint(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Endpoint")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSpec_Endpoint) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("graphql.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/graphql.ServiceSpec_Endpoint")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Url")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUrl())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/grpc/grpc.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/grpc/grpc.pb.uniquehash.go new file mode 100644 index 00000000000..56fa45ecd9c --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/grpc/grpc.pb.uniquehash.go @@ -0,0 +1,194 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/grpc/grpc.proto + +package grpc + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("grpc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/grpc.ServiceSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Descriptors")); err != nil { + return 0, err + } + if _, err = hasher.Write(m.GetDescriptors()); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("GrpcServices")); err != nil { + return 0, err + } + for i, v := range m.GetGrpcServices() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DestinationSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("grpc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/grpc.DestinationSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Package")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPackage())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Service")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetService())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Function")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetFunction())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetParameters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetParameters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSpec_GrpcService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("grpc.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/grpc.ServiceSpec_GrpcService")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PackageName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPackageName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FunctionNames")); err != nil { + return 0, err + } + for i, v := range m.GetFunctionNames() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/grpc_json/grpc_json.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/grpc_json/grpc_json.pb.uniquehash.go new file mode 100644 index 00000000000..aefda04c1bf --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/grpc_json/grpc_json.pb.uniquehash.go @@ -0,0 +1,274 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/grpc_json/grpc_json.proto + +package grpc_json + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcJsonTranscoder) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("grpc_json.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/grpc_json.GrpcJsonTranscoder")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Services")); err != nil { + return 0, err + } + for i, v := range m.GetServices() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetPrintOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PrintOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPrintOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PrintOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("MatchIncomingRequestRoute")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMatchIncomingRequestRoute()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IgnoredQueryParameters")); err != nil { + return 0, err + } + for i, v := range m.GetIgnoredQueryParameters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("AutoMapping")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAutoMapping()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IgnoreUnknownQueryParameters")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIgnoreUnknownQueryParameters()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ConvertGrpcStatus")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetConvertGrpcStatus()) + if err != nil { + return 0, err + } + + switch m.DescriptorSet.(type) { + + case *GrpcJsonTranscoder_ProtoDescriptor: + + if _, err = hasher.Write([]byte("ProtoDescriptor")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetProtoDescriptor())); err != nil { + return 0, err + } + + case *GrpcJsonTranscoder_ProtoDescriptorBin: + + if _, err = hasher.Write([]byte("ProtoDescriptorBin")); err != nil { + return 0, err + } + if _, err = hasher.Write(m.GetProtoDescriptorBin()); err != nil { + return 0, err + } + + case *GrpcJsonTranscoder_ProtoDescriptorConfigMap: + + if h, ok := interface{}(m.GetProtoDescriptorConfigMap()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProtoDescriptorConfigMap")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProtoDescriptorConfigMap(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProtoDescriptorConfigMap")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcJsonTranscoder_PrintOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("grpc_json.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/grpc_json.GrpcJsonTranscoder_PrintOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AddWhitespace")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAddWhitespace()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AlwaysPrintPrimitiveFields")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAlwaysPrintPrimitiveFields()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AlwaysPrintEnumsAsInts")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAlwaysPrintEnumsAsInts()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PreserveProtoFieldNames")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPreserveProtoFieldNames()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcJsonTranscoder_DescriptorConfigMap) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("grpc_json.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/grpc_json.GrpcJsonTranscoder_DescriptorConfigMap")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfigMapRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConfigMapRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfigMapRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConfigMapRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/grpc_web/grpc_web.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/grpc_web/grpc_web.pb.uniquehash.go new file mode 100644 index 00000000000..86b2f934616 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/grpc_web/grpc_web.pb.uniquehash.go @@ -0,0 +1,55 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/grpc_web/grpc_web.proto + +package grpc_web + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GrpcWeb) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("grpc_web.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/grpc_web.GrpcWeb")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Disable")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisable()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/hcm/hcm.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/hcm/hcm.pb.uniquehash.go new file mode 100644 index 00000000000..9c2997cf7fe --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/hcm/hcm.pb.uniquehash.go @@ -0,0 +1,1098 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/hcm/hcm.proto + +package hcm + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpConnectionManagerSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("hcm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/hcm.HttpConnectionManagerSettings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSkipXffAppend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SkipXffAppend")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSkipXffAppend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SkipXffAppend")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetVia()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Via")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVia(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Via")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetXffNumTrustedHops()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("XffNumTrustedHops")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetXffNumTrustedHops(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("XffNumTrustedHops")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUseRemoteAddress()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseRemoteAddress")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseRemoteAddress(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseRemoteAddress")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGenerateRequestId()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GenerateRequestId")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGenerateRequestId(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GenerateRequestId")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetProxy_100Continue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Proxy_100Continue")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxy_100Continue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Proxy_100Continue")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStreamIdleTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StreamIdleTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStreamIdleTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StreamIdleTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIdleTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIdleTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxRequestHeadersKb()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxRequestHeadersKb")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxRequestHeadersKb(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxRequestHeadersKb")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequestTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRequestHeadersTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestHeadersTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestHeadersTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestHeadersTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDrainTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DrainTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDrainTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DrainTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDelayedCloseTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DelayedCloseTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDelayedCloseTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DelayedCloseTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetServerName()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServerName")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServerName(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServerName")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetStripAnyHostPort()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("StripAnyHostPort")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStripAnyHostPort(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("StripAnyHostPort")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAcceptHttp_10()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AcceptHttp_10")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAcceptHttp_10(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AcceptHttp_10")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDefaultHostForHttp_10()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DefaultHostForHttp_10")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDefaultHostForHttp_10(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DefaultHostForHttp_10")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAllowChunkedLength()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowChunkedLength")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowChunkedLength(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowChunkedLength")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnableTrailers()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnableTrailers")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnableTrailers(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnableTrailers")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTracing()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTracing(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Tracing")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ForwardClientCertDetails")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetForwardClientCertDetails()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSetCurrentClientCertDetails()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SetCurrentClientCertDetails")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSetCurrentClientCertDetails(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SetCurrentClientCertDetails")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPreserveExternalRequestId()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PreserveExternalRequestId")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPreserveExternalRequestId(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PreserveExternalRequestId")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Upgrades")); err != nil { + return 0, err + } + for i, v := range m.GetUpgrades() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetMaxConnectionDuration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxConnectionDuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxConnectionDuration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxConnectionDuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxStreamDuration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxStreamDuration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxHeadersCount()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxHeadersCount")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxHeadersCount(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxHeadersCount")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HeadersWithUnderscoresAction")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHeadersWithUnderscoresAction()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxRequestsPerConnection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxRequestsPerConnection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxRequestsPerConnection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxRequestsPerConnection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ServerHeaderTransformation")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetServerHeaderTransformation()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PathWithEscapedSlashesAction")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPathWithEscapedSlashesAction()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CodecType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCodecType()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMergeSlashes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MergeSlashes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMergeSlashes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MergeSlashes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetNormalizePath()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("NormalizePath")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetNormalizePath(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("NormalizePath")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUuidRequestIdConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UuidRequestIdConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUuidRequestIdConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UuidRequestIdConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHttp2ProtocolOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Http2ProtocolOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttp2ProtocolOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Http2ProtocolOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInternalAddressConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InternalAddressConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInternalAddressConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InternalAddressConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAppendXForwardedPort()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AppendXForwardedPort")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppendXForwardedPort(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AppendXForwardedPort")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.HeaderFormat.(type) { + + case *HttpConnectionManagerSettings_ProperCaseHeaderKeyFormat: + + if h, ok := interface{}(m.GetProperCaseHeaderKeyFormat()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProperCaseHeaderKeyFormat")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProperCaseHeaderKeyFormat(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProperCaseHeaderKeyFormat")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HttpConnectionManagerSettings_PreserveCaseHeaderKeyFormat: + + if h, ok := interface{}(m.GetPreserveCaseHeaderKeyFormat()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PreserveCaseHeaderKeyFormat")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPreserveCaseHeaderKeyFormat(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PreserveCaseHeaderKeyFormat")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpConnectionManagerSettings_SetCurrentClientCertDetails) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("hcm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/hcm.HttpConnectionManagerSettings_SetCurrentClientCertDetails")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSubject()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Subject")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSubject(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Subject")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCert()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cert")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCert(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cert")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetChain()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Chain")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetChain(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Chain")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDns()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Dns")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDns(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Dns")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUri()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Uri")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUri(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Uri")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpConnectionManagerSettings_UuidRequestIdConfigSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("hcm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/hcm.HttpConnectionManagerSettings_UuidRequestIdConfigSettings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPackTraceReason()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PackTraceReason")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPackTraceReason(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PackTraceReason")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUseRequestIdForTraceSampling()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseRequestIdForTraceSampling")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseRequestIdForTraceSampling(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseRequestIdForTraceSampling")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpConnectionManagerSettings_CidrRange) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("hcm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/hcm.HttpConnectionManagerSettings_CidrRange")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AddressPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddressPrefix())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPrefixLen()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PrefixLen")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPrefixLen(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PrefixLen")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpConnectionManagerSettings_InternalAddressConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("hcm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/hcm.HttpConnectionManagerSettings_InternalAddressConfig")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUnixSockets()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UnixSockets")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUnixSockets(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UnixSockets")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("CidrRanges")); err != nil { + return 0, err + } + for i, v := range m.GetCidrRanges() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/headers/headers.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/headers/headers.pb.uniquehash.go new file mode 100644 index 00000000000..0e6ef81cb51 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/headers/headers.pb.uniquehash.go @@ -0,0 +1,233 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/headers/headers.proto + +package headers + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderManipulation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("headers.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/headers.HeaderManipulation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("RequestHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseHeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetResponseHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderValueOption) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("headers.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/headers.HeaderValueOption")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAppend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderValue) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("headers.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/headers.HeaderValue")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/healthcheck/healthcheck.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/healthcheck/healthcheck.pb.uniquehash.go new file mode 100644 index 00000000000..13da00fc339 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/healthcheck/healthcheck.pb.uniquehash.go @@ -0,0 +1,54 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/healthcheck/healthcheck.proto + +package healthcheck + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HealthCheck) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("healthcheck.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/healthcheck.HealthCheck")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/kubernetes/kubernetes.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/kubernetes/kubernetes.pb.uniquehash.go new file mode 100644 index 00000000000..331b2bd9433 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/kubernetes/kubernetes.pb.uniquehash.go @@ -0,0 +1,138 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/kubernetes/kubernetes.proto + +package kubernetes + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("kubernetes.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/kubernetes.UpstreamSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceNamespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceNamespace())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServicePort")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetServicePort()) + if err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetSelector() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetServiceSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSubsetSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SubsetSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSubsetSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SubsetSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/lbhash/lbhash.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/lbhash/lbhash.pb.uniquehash.go new file mode 100644 index 00000000000..de8324a1aa4 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/lbhash/lbhash.pb.uniquehash.go @@ -0,0 +1,202 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/lbhash/lbhash.proto + +package lbhash + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteActionHashConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("lbhash.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/lbhash.RouteActionHashConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HashPolicies")); err != nil { + return 0, err + } + for i, v := range m.GetHashPolicies() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Cookie) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("lbhash.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/lbhash.Cookie")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTtl()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ttl")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTtl(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ttl")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HashPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("lbhash.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/lbhash.HashPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Terminal")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTerminal()) + if err != nil { + return 0, err + } + + switch m.KeyType.(type) { + + case *HashPolicy_Header: + + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeader())); err != nil { + return 0, err + } + + case *HashPolicy_Cookie: + + if h, ok := interface{}(m.GetCookie()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCookie(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Cookie")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *HashPolicy_SourceIp: + + if _, err = hasher.Write([]byte("SourceIp")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSourceIp()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/local_ratelimit/local_ratelimit.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/local_ratelimit/local_ratelimit.pb.uniquehash.go new file mode 100644 index 00000000000..c55559f2ec4 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/local_ratelimit/local_ratelimit.pb.uniquehash.go @@ -0,0 +1,174 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/local_ratelimit/local_ratelimit.proto + +package local_ratelimit + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TokenBucket) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("local_ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/local_ratelimit.TokenBucket")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaxTokens")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxTokens()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTokensPerFill()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TokensPerFill")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTokensPerFill(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TokensPerFill")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFillInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FillInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFillInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FillInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("local_ratelimit.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/local_ratelimit.Settings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDefaultLimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DefaultLimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDefaultLimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DefaultLimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetLocalRateLimitPerDownstreamConnection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LocalRateLimitPerDownstreamConnection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLocalRateLimitPerDownstreamConnection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LocalRateLimitPerDownstreamConnection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnableXRatelimitHeaders()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnableXRatelimitHeaders")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnableXRatelimitHeaders(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnableXRatelimitHeaders")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/pipe/pipe.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/pipe/pipe.pb.uniquehash.go new file mode 100644 index 00000000000..862d9f938d6 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/pipe/pipe.pb.uniquehash.go @@ -0,0 +1,74 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/pipe/pipe.proto + +package pipe + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("pipe.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/pipe.UpstreamSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetServiceSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/protocol/protocol.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/protocol/protocol.pb.uniquehash.go new file mode 100644 index 00000000000..7099ff76286 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/protocol/protocol.pb.uniquehash.go @@ -0,0 +1,273 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/protocol/protocol.proto + +package protocol + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpProtocolOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("protocol.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/protocol.HttpProtocolOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetIdleTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIdleTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("MaxHeadersCount")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaxHeadersCount()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxStreamDuration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxStreamDuration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxStreamDuration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HeadersWithUnderscoresAction")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHeadersWithUnderscoresAction()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Http1ProtocolOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("protocol.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/protocol.Http1ProtocolOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("EnableTrailers")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnableTrailers()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOverrideStreamErrorOnInvalidHttpMessage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OverrideStreamErrorOnInvalidHttpMessage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverrideStreamErrorOnInvalidHttpMessage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OverrideStreamErrorOnInvalidHttpMessage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.HeaderFormat.(type) { + + case *Http1ProtocolOptions_ProperCaseHeaderKeyFormat: + + if _, err = hasher.Write([]byte("ProperCaseHeaderKeyFormat")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetProperCaseHeaderKeyFormat()) + if err != nil { + return 0, err + } + + case *Http1ProtocolOptions_PreserveCaseHeaderKeyFormat: + + if _, err = hasher.Write([]byte("PreserveCaseHeaderKeyFormat")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPreserveCaseHeaderKeyFormat()) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Http2ProtocolOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("protocol.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/protocol.Http2ProtocolOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxConcurrentStreams()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxConcurrentStreams")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxConcurrentStreams(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxConcurrentStreams")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInitialStreamWindowSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialStreamWindowSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialStreamWindowSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialStreamWindowSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInitialConnectionWindowSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialConnectionWindowSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialConnectionWindowSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialConnectionWindowSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOverrideStreamErrorOnInvalidHttpMessage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OverrideStreamErrorOnInvalidHttpMessage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverrideStreamErrorOnInvalidHttpMessage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OverrideStreamErrorOnInvalidHttpMessage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/protocol_upgrade/protocol_upgrade.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/protocol_upgrade/protocol_upgrade.pb.uniquehash.go new file mode 100644 index 00000000000..cf4a12419db --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/protocol_upgrade/protocol_upgrade.pb.uniquehash.go @@ -0,0 +1,134 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/protocol_upgrade/protocol_upgrade.proto + +package protocol_upgrade + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProtocolUpgradeConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("protocol_upgrade.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/protocol_upgrade.ProtocolUpgradeConfig")); err != nil { + return 0, err + } + + switch m.UpgradeType.(type) { + + case *ProtocolUpgradeConfig_Websocket: + + if h, ok := interface{}(m.GetWebsocket()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Websocket")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWebsocket(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Websocket")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ProtocolUpgradeConfig_Connect: + + if h, ok := interface{}(m.GetConnect()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Connect")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnect(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Connect")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProtocolUpgradeConfig_ProtocolUpgradeSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("protocol_upgrade.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/protocol_upgrade.ProtocolUpgradeConfig_ProtocolUpgradeSpec")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/proxy_protocol/proxy_protocol.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/proxy_protocol/proxy_protocol.pb.uniquehash.go new file mode 100644 index 00000000000..2f92f716256 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/proxy_protocol/proxy_protocol.pb.uniquehash.go @@ -0,0 +1,165 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/proxy_protocol/proxy_protocol.proto + +package proxy_protocol + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProxyProtocol) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("proxy_protocol.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/proxy_protocol.ProxyProtocol")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Rules")); err != nil { + return 0, err + } + for i, v := range m.GetRules() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("AllowRequestsWithoutProxyProtocol")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAllowRequestsWithoutProxyProtocol()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProxyProtocol_KeyValuePair) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("proxy_protocol.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/proxy_protocol.ProxyProtocol_KeyValuePair")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MetadataNamespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMetadataNamespace())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ProxyProtocol_Rule) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("proxy_protocol.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/proxy_protocol.ProxyProtocol_Rule")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlvType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetTlvType()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOnTlvPresent()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OnTlvPresent")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOnTlvPresent(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OnTlvPresent")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/rest/rest.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/rest/rest.pb.uniquehash.go new file mode 100644 index 00000000000..75e9c17b612 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/rest/rest.pb.uniquehash.go @@ -0,0 +1,216 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/rest/rest.proto + +package rest + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rest.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/rest.ServiceSpec")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetTransformations() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetSwaggerInfo()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SwaggerInfo")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSwaggerInfo(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SwaggerInfo")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DestinationSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rest.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/rest.DestinationSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FunctionName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetFunctionName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetParameters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetParameters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSpec_SwaggerInfo) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("rest.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/rest.ServiceSpec_SwaggerInfo")); err != nil { + return 0, err + } + + switch m.SwaggerSpec.(type) { + + case *ServiceSpec_SwaggerInfo_Url: + + if _, err = hasher.Write([]byte("Url")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUrl())); err != nil { + return 0, err + } + + case *ServiceSpec_SwaggerInfo_Inline: + + if _, err = hasher.Write([]byte("Inline")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetInline())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/retries/retries.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/retries/retries.pb.uniquehash.go new file mode 100644 index 00000000000..77980745bf1 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/retries/retries.pb.uniquehash.go @@ -0,0 +1,161 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/retries/retries.proto + +package retries + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryBackOff) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("retries.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries.RetryBackOff")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetBaseInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBaseInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("BaseInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RetryPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("retries.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/retries.RetryPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RetryOn")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRetryOn())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("NumRetries")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetNumRetries()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPerTryTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerTryTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerTryTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerTryTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRetryBackOff()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRetryBackOff(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RetryBackOff")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/service_spec.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/service_spec.pb.uniquehash.go new file mode 100644 index 00000000000..79b50ad50f2 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/service_spec.pb.uniquehash.go @@ -0,0 +1,139 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/service_spec.proto + +package options + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ServiceSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options.ServiceSpec")); err != nil { + return 0, err + } + + switch m.PluginType.(type) { + + case *ServiceSpec_Rest: + + if h, ok := interface{}(m.GetRest()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Rest")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRest(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Rest")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ServiceSpec_Grpc: + + if h, ok := interface{}(m.GetGrpc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Grpc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ServiceSpec_GrpcJsonTranscoder: + + if h, ok := interface{}(m.GetGrpcJsonTranscoder()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrpcJsonTranscoder")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrpcJsonTranscoder(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrpcJsonTranscoder")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ServiceSpec_Graphql: + + if h, ok := interface{}(m.GetGraphql()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Graphql")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGraphql(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Graphql")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/shadowing/shadowing.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/shadowing/shadowing.pb.uniquehash.go new file mode 100644 index 00000000000..4ce568fbb7d --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/shadowing/shadowing.pb.uniquehash.go @@ -0,0 +1,75 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/shadowing/shadowing.proto + +package shadowing + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteShadowing) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("shadowing.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/shadowing.RouteShadowing")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUpstream()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Upstream")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstream(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Upstream")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Percentage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPercentage()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/static/static.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/static/static.pb.uniquehash.go new file mode 100644 index 00000000000..ce396a430aa --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/static/static.pb.uniquehash.go @@ -0,0 +1,251 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/static/static.proto + +package static + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("static.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/static.UpstreamSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Hosts")); err != nil { + return 0, err + } + for i, v := range m.GetHosts() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetUseTls()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseTls")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseTls(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseTls")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetServiceSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAutoSniRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AutoSniRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAutoSniRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AutoSniRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Host) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("static.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/static.Host")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Addr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddr())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Port")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPort()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SniAddr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSniAddr())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetLoadBalancingWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LoadBalancingWeight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLoadBalancingWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LoadBalancingWeight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHealthCheckConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HealthCheckConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHealthCheckConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HealthCheckConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Host_HealthCheckConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("static.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/static.Host_HealthCheckConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Method")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMethod())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/stats/stats.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/stats/stats.pb.uniquehash.go new file mode 100644 index 00000000000..0f53891e647 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/stats/stats.pb.uniquehash.go @@ -0,0 +1,117 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/stats/stats.proto + +package stats + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Stats) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("stats.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/stats.Stats")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VirtualClusters")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualClusters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualCluster) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("stats.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/stats.VirtualCluster")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Pattern")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPattern())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Method")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMethod())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/subset_spec.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/subset_spec.pb.uniquehash.go new file mode 100644 index 00000000000..fd533f3c82b --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/subset_spec.pb.uniquehash.go @@ -0,0 +1,197 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/subset_spec.proto + +package options + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SubsetSpec) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options.SubsetSpec")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Selectors")); err != nil { + return 0, err + } + for i, v := range m.GetSelectors() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("FallbackPolicy")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFallbackPolicy()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDefaultSubset()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DefaultSubset")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDefaultSubset(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DefaultSubset")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Selector) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options.Selector")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Keys")); err != nil { + return 0, err + } + for i, v := range m.GetKeys() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("SingleHostPerSubset")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSingleHostPerSubset()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Subset) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options.Subset")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetValues() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/tcp/tcp.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/tcp/tcp.pb.uniquehash.go new file mode 100644 index 00000000000..b48c837d710 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/tcp/tcp.pb.uniquehash.go @@ -0,0 +1,275 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/tcp/tcp.proto + +package tcp + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpProxySettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tcp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tcp.TcpProxySettings")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMaxConnectAttempts()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxConnectAttempts")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxConnectAttempts(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxConnectAttempts")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIdleTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIdleTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IdleTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTunnelingConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TunnelingConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTunnelingConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TunnelingConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAccessLogFlushInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AccessLogFlushInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAccessLogFlushInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AccessLogFlushInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderValueOption) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tcp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tcp.HeaderValueOption")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAppend()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppend(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Append")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderValue) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tcp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tcp.HeaderValue")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpProxySettings_TunnelingConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tcp.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tcp.TcpProxySettings_TunnelingConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Hostname")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostname())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HeadersToAdd")); err != nil { + return 0, err + } + for i, v := range m.GetHeadersToAdd() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/tracing/tracing.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/tracing/tracing.pb.uniquehash.go new file mode 100644 index 00000000000..5c9fe0932c0 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/tracing/tracing.pb.uniquehash.go @@ -0,0 +1,552 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/tracing/tracing.proto + +package tracing + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ListenerTracingSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tracing.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing.ListenerTracingSettings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestHeadersForTags")); err != nil { + return 0, err + } + for i, v := range m.GetRequestHeadersForTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetVerbose()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Verbose")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVerbose(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Verbose")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTracePercentages()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TracePercentages")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTracePercentages(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TracePercentages")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("EnvironmentVariablesForTags")); err != nil { + return 0, err + } + for i, v := range m.GetEnvironmentVariablesForTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("LiteralsForTags")); err != nil { + return 0, err + } + for i, v := range m.GetLiteralsForTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ProviderConfig.(type) { + + case *ListenerTracingSettings_ZipkinConfig: + + if h, ok := interface{}(m.GetZipkinConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ZipkinConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetZipkinConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ZipkinConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ListenerTracingSettings_DatadogConfig: + + if h, ok := interface{}(m.GetDatadogConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DatadogConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDatadogConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DatadogConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ListenerTracingSettings_OpenTelemetryConfig: + + if h, ok := interface{}(m.GetOpenTelemetryConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OpenTelemetryConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOpenTelemetryConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OpenTelemetryConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *ListenerTracingSettings_OpenCensusConfig: + + if h, ok := interface{}(m.GetOpenCensusConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OpenCensusConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOpenCensusConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OpenCensusConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteTracingSettings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tracing.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing.RouteTracingSettings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RouteDescriptor")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRouteDescriptor())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTracePercentages()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TracePercentages")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTracePercentages(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TracePercentages")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPropagate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Propagate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPropagate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Propagate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TracePercentages) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tracing.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing.TracePercentages")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetClientSamplePercentage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ClientSamplePercentage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetClientSamplePercentage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ClientSamplePercentage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRandomSamplePercentage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RandomSamplePercentage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRandomSamplePercentage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RandomSamplePercentage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOverallSamplePercentage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OverallSamplePercentage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverallSamplePercentage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OverallSamplePercentage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TracingTagEnvironmentVariable) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tracing.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing.TracingTagEnvironmentVariable")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTag()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Tag")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTag(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Tag")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetName()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetName(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDefaultValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDefaultValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DefaultValue")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TracingTagLiteral) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("tracing.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/tracing.TracingTagLiteral")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTag()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Tag")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTag(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Tag")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/transformation/parameters.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/transformation/parameters.pb.uniquehash.go new file mode 100644 index 00000000000..8c6e0d864d3 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/transformation/parameters.pb.uniquehash.go @@ -0,0 +1,96 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/transformation/parameters.proto + +package transformation + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Parameters) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.Parameters")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeaders() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetPath()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPath(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Path")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/transformation/transformation.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/transformation/transformation.pb.uniquehash.go new file mode 100644 index 00000000000..ba3040b414e --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/transformation/transformation.pb.uniquehash.go @@ -0,0 +1,1122 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/transformation/transformation.proto + +package transformation + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ResponseMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.ResponseMatch")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Matchers")); err != nil { + return 0, err + } + for i, v := range m.GetMatchers() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseCodeDetails")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetResponseCodeDetails())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RequestMatch) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.RequestMatch")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ClearRouteCache")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClearRouteCache()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequestTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Transformations) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.Transformations")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRequestTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRequestTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RequestTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ClearRouteCache")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetClearRouteCache()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetResponseTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResponseTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResponseTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RequestResponseTransformations) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.RequestResponseTransformations")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RequestTransforms")); err != nil { + return 0, err + } + for i, v := range m.GetRequestTransforms() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("ResponseTransforms")); err != nil { + return 0, err + } + for i, v := range m.GetResponseTransforms() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationStages) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.TransformationStages")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEarly()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Early")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEarly(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Early")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRegular()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Regular")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRegular(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Regular")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("InheritTransformation")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInheritTransformation()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetLogRequestResponseInfo()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LogRequestResponseInfo")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLogRequestResponseInfo(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LogRequestResponseInfo")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEscapeCharacters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EscapeCharacters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEscapeCharacters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EscapeCharacters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Transformation) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.Transformation")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LogRequestResponseInfo")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetLogRequestResponseInfo()) + if err != nil { + return 0, err + } + + switch m.TransformationType.(type) { + + case *Transformation_TransformationTemplate: + + if h, ok := interface{}(m.GetTransformationTemplate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TransformationTemplate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformationTemplate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TransformationTemplate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Transformation_HeaderBodyTransform: + + if h, ok := interface{}(m.GetHeaderBodyTransform()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HeaderBodyTransform")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeaderBodyTransform(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HeaderBodyTransform")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Transformation_XsltTransformation: + + if h, ok := interface{}(m.GetXsltTransformation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("XsltTransformation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetXsltTransformation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("XsltTransformation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Extraction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.Extraction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Regex")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegex())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Subgroup")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSubgroup()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetReplacementText()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ReplacementText")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReplacementText(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ReplacementText")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Mode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMode()) + if err != nil { + return 0, err + } + + switch m.Source.(type) { + + case *Extraction_Header: + + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeader())); err != nil { + return 0, err + } + + case *Extraction_Body: + + if h, ok := interface{}(m.GetBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationTemplate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.TransformationTemplate")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AdvancedTemplates")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAdvancedTemplates()) + if err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetExtractors() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeaders() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("HeadersToAppend")); err != nil { + return 0, err + } + for i, v := range m.GetHeadersToAppend() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("HeadersToRemove")); err != nil { + return 0, err + } + for i, v := range m.GetHeadersToRemove() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("ParseBodyBehavior")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetParseBodyBehavior()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IgnoreErrorOnParse")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIgnoreErrorOnParse()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DynamicMetadataValues")); err != nil { + return 0, err + } + for i, v := range m.GetDynamicMetadataValues() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetEscapeCharacters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EscapeCharacters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEscapeCharacters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EscapeCharacters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.BodyTransformation.(type) { + + case *TransformationTemplate_Body: + + if h, ok := interface{}(m.GetBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TransformationTemplate_Passthrough: + + if h, ok := interface{}(m.GetPassthrough()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Passthrough")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPassthrough(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Passthrough")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TransformationTemplate_MergeExtractorsToBody: + + if h, ok := interface{}(m.GetMergeExtractorsToBody()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MergeExtractorsToBody")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMergeExtractorsToBody(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MergeExtractorsToBody")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *InjaTemplate) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.InjaTemplate")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Text")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetText())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Passthrough) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.Passthrough")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MergeExtractorsToBody) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.MergeExtractorsToBody")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderBodyTransform) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.HeaderBodyTransform")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AddRequestMetadata")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAddRequestMetadata()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationTemplate_HeaderToAppend) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.TransformationTemplate_HeaderToAppend")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TransformationTemplate_DynamicMetadataValue) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("transformation.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/transformation.TransformationTemplate_DynamicMetadataValue")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MetadataNamespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMetadataNamespace())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetValue()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValue(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/options/wasm/wasm.pb.uniquehash.go b/projects/gloo/pkg/api/v1/options/wasm/wasm.pb.uniquehash.go new file mode 100644 index 00000000000..ca7e15813c4 --- /dev/null +++ b/projects/gloo/pkg/api/v1/options/wasm/wasm.pb.uniquehash.go @@ -0,0 +1,223 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/options/wasm/wasm.proto + +package wasm + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PluginSource) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("wasm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/wasm.PluginSource")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Filters")); err != nil { + return 0, err + } + for i, v := range m.GetFilters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WasmFilter) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("wasm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/wasm.WasmFilter")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Config")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFilterStage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FilterStage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFilterStage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FilterStage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RootId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRootId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VmType")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetVmType()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FailOpen")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFailOpen()) + if err != nil { + return 0, err + } + + switch m.Src.(type) { + + case *WasmFilter_Image: + + if _, err = hasher.Write([]byte("Image")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetImage())); err != nil { + return 0, err + } + + case *WasmFilter_FilePath: + + if _, err = hasher.Write([]byte("FilePath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetFilePath())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *FilterStage) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("wasm.options.gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/wasm.FilterStage")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Stage")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStage()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Predicate")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPredicate()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/proxy.pb.uniquehash.go b/projects/gloo/pkg/api/v1/proxy.pb.uniquehash.go new file mode 100644 index 00000000000..fb27b117fcd --- /dev/null +++ b/projects/gloo/pkg/api/v1/proxy.pb.uniquehash.go @@ -0,0 +1,2301 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/proxy.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Proxy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Proxy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CompressedSpec")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCompressedSpec())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Listeners")); err != nil { + return 0, err + } + for i, v := range m.GetListeners() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Listener) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Listener")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("BindAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetBindAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("BindPort")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetBindPort()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SslConfigurations")); err != nil { + return 0, err + } + for i, v := range m.GetSslConfigurations() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetUseProxyProto()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseProxyProto")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseProxyProto(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseProxyProto")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRouteOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RouteOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRouteOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RouteOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.ListenerType.(type) { + + case *Listener_HttpListener: + + if h, ok := interface{}(m.GetHttpListener()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpListener")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpListener(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpListener")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Listener_TcpListener: + + if h, ok := interface{}(m.GetTcpListener()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpListener")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpListener(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpListener")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Listener_HybridListener: + + if h, ok := interface{}(m.GetHybridListener()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HybridListener")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHybridListener(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HybridListener")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Listener_AggregateListener: + + if h, ok := interface{}(m.GetAggregateListener()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AggregateListener")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAggregateListener(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AggregateListener")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.OpaqueMetadata.(type) { + + case *Listener_Metadata: + + case *Listener_MetadataStatic: + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpListener) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.TcpListener")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TcpHosts")); err != nil { + return 0, err + } + for i, v := range m.GetTcpHosts() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStatPrefix())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpHost) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.TcpHost")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDestination()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Destination")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDestination(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Destination")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HttpListener) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.HttpListener")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VirtualHosts")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualHosts() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("StatPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetStatPrefix())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HybridListener) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.HybridListener")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MatchedListeners")); err != nil { + return 0, err + } + for i, v := range m.GetMatchedListeners() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchedListener) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.MatchedListener")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SslConfigurations")); err != nil { + return 0, err + } + for i, v := range m.GetSslConfigurations() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ListenerType.(type) { + + case *MatchedListener_HttpListener: + + if h, ok := interface{}(m.GetHttpListener()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpListener")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpListener(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpListener")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *MatchedListener_TcpListener: + + if h, ok := interface{}(m.GetTcpListener()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpListener")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpListener(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpListener")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MatchedTcpListener) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.MatchedTcpListener")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTcpListener()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TcpListener")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTcpListener(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TcpListener")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Matcher) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Matcher")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SourcePrefixRanges")); err != nil { + return 0, err + } + for i, v := range m.GetSourcePrefixRanges() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("PassthroughCipherSuites")); err != nil { + return 0, err + } + for i, v := range m.GetPassthroughCipherSuites() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AggregateListener) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.AggregateListener")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetHttpResources()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpResources")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpResources(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpResources")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HttpFilterChains")); err != nil { + return 0, err + } + for i, v := range m.GetHttpFilterChains() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if _, err = hasher.Write([]byte("TcpListeners")); err != nil { + return 0, err + } + for i, v := range m.GetTcpListeners() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualHost) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.VirtualHost")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Domains")); err != nil { + return 0, err + } + for i, v := range m.GetDomains() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("Routes")); err != nil { + return 0, err + } + for i, v := range m.GetRoutes() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.OpaqueMetadata.(type) { + + case *VirtualHost_Metadata: + + case *VirtualHost_MetadataStatic: + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Route) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Route")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Matchers")); err != nil { + return 0, err + } + for i, v := range m.GetMatchers() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Name")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetName())); err != nil { + return 0, err + } + + switch m.Action.(type) { + + case *Route_RouteAction: + + if h, ok := interface{}(m.GetRouteAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RouteAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRouteAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RouteAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_RedirectAction: + + if h, ok := interface{}(m.GetRedirectAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RedirectAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRedirectAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RedirectAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_DirectResponseAction: + + if h, ok := interface{}(m.GetDirectResponseAction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DirectResponseAction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectResponseAction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DirectResponseAction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Route_GraphqlApiRef: + + if h, ok := interface{}(m.GetGraphqlApiRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GraphqlApiRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGraphqlApiRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GraphqlApiRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.OpaqueMetadata.(type) { + + case *Route_Metadata: + + case *Route_MetadataStatic: + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RouteAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.RouteAction")); err != nil { + return 0, err + } + + switch m.Destination.(type) { + + case *RouteAction_Single: + + if h, ok := interface{}(m.GetSingle()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Single")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSingle(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Single")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_Multi: + + if h, ok := interface{}(m.GetMulti()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Multi")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMulti(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Multi")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_UpstreamGroup: + + if h, ok := interface{}(m.GetUpstreamGroup()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamGroup")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamGroup(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamGroup")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *RouteAction_ClusterHeader: + + if _, err = hasher.Write([]byte("ClusterHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterHeader())); err != nil { + return 0, err + } + + case *RouteAction_DynamicForwardProxy: + + if h, ok := interface{}(m.GetDynamicForwardProxy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DynamicForwardProxy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDynamicForwardProxy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DynamicForwardProxy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Destination) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Destination")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDestinationSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DestinationSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDestinationSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DestinationSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSubset()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Subset")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSubset(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Subset")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.DestinationType.(type) { + + case *Destination_Upstream: + + if h, ok := interface{}(m.GetUpstream()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Upstream")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstream(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Upstream")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Destination_Kube: + + if h, ok := interface{}(m.GetKube()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Kube")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKube(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Kube")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Destination_Consul: + + if h, ok := interface{}(m.GetConsul()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Consul")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsul(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Consul")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *KubernetesServiceDestination) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.KubernetesServiceDestination")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ref")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("Port")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetPort()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConsulServiceDestination) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.ConsulServiceDestination")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ServiceName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetServiceName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Tags")); err != nil { + return 0, err + } + for i, v := range m.GetTags() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("DataCenters")); err != nil { + return 0, err + } + for i, v := range m.GetDataCenters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamGroup) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.UpstreamGroup")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Destinations")); err != nil { + return 0, err + } + for i, v := range m.GetDestinations() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *MultiDestination) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.MultiDestination")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Destinations")); err != nil { + return 0, err + } + for i, v := range m.GetDestinations() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *WeightedDestination) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.WeightedDestination")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDestination()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Destination")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDestination(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Destination")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWeight()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWeight(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Weight")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Options")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *RedirectAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.RedirectAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HostRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHostRedirect())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ResponseCode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetResponseCode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("HttpsRedirect")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetHttpsRedirect()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("StripQuery")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStripQuery()) + if err != nil { + return 0, err + } + + switch m.PathRewriteSpecifier.(type) { + + case *RedirectAction_PathRedirect: + + if _, err = hasher.Write([]byte("PathRedirect")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPathRedirect())); err != nil { + return 0, err + } + + case *RedirectAction_PrefixRewrite: + + if _, err = hasher.Write([]byte("PrefixRewrite")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrefixRewrite())); err != nil { + return 0, err + } + + case *RedirectAction_RegexRewrite: + + if h, ok := interface{}(m.GetRegexRewrite()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRegexRewrite(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RegexRewrite")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DirectResponseAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.DirectResponseAction")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Status")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetStatus()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Body")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetBody())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SourceMetadata) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.SourceMetadata")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Sources")); err != nil { + return 0, err + } + for i, v := range m.GetSources() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TcpHost_TcpAction) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.TcpHost_TcpAction")); err != nil { + return 0, err + } + + switch m.Destination.(type) { + + case *TcpHost_TcpAction_Single: + + if h, ok := interface{}(m.GetSingle()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Single")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSingle(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Single")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TcpHost_TcpAction_Multi: + + if h, ok := interface{}(m.GetMulti()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Multi")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMulti(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Multi")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TcpHost_TcpAction_UpstreamGroup: + + if h, ok := interface{}(m.GetUpstreamGroup()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamGroup")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamGroup(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamGroup")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *TcpHost_TcpAction_ForwardSniClusterName: + + if h, ok := interface{}(m.GetForwardSniClusterName()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ForwardSniClusterName")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetForwardSniClusterName(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ForwardSniClusterName")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AggregateListener_HttpResources) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.AggregateListener_HttpResources")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetVirtualHosts() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHttpOptions() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AggregateListener_HttpFilterChain) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.AggregateListener_HttpFilterChain")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMatcher()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMatcher(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Matcher")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HttpOptionsRef")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHttpOptionsRef())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VirtualHostRefs")); err != nil { + return 0, err + } + for i, v := range m.GetVirtualHostRefs() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SourceMetadata_SourceRef) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.SourceMetadata_SourceRef")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetResourceRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ResourceRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetResourceRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ResourceRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ResourceKind")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetResourceKind())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ObservedGeneration")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetObservedGeneration()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/secret.pb.uniquehash.go b/projects/gloo/pkg/api/v1/secret.pb.uniquehash.go new file mode 100644 index 00000000000..ea5a1f859d7 --- /dev/null +++ b/projects/gloo/pkg/api/v1/secret.pb.uniquehash.go @@ -0,0 +1,511 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/secret.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Secret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Secret")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.Kind.(type) { + + case *Secret_Aws: + + if h, ok := interface{}(m.GetAws()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAws(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_Azure: + + if h, ok := interface{}(m.GetAzure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Azure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAzure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Azure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_Tls: + + if h, ok := interface{}(m.GetTls()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Tls")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTls(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Tls")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_Oauth: + + if h, ok := interface{}(m.GetOauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Oauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Oauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_ApiKey: + + if h, ok := interface{}(m.GetApiKey()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ApiKey")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetApiKey(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ApiKey")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_Header: + + if h, ok := interface{}(m.GetHeader()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHeader(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_Credentials: + + if h, ok := interface{}(m.GetCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Credentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Credentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_Encryption: + + if h, ok := interface{}(m.GetEncryption()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Encryption")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEncryption(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Encryption")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Secret_Extensions: + + if h, ok := interface{}(m.GetExtensions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtensions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AwsSecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.AwsSecret")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AccessKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAccessKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SecretKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSecretKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SessionToken")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSessionToken())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AzureSecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.AzureSecret")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetApiKeys() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *TlsSecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.TlsSecret")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CertChain")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCertChain())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PrivateKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPrivateKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RootCa")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRootCa())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("OcspStaple")); err != nil { + return 0, err + } + if _, err = hasher.Write(m.GetOcspStaple()); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderSecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.HeaderSecret")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetHeaders() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *AccountCredentialsSecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.AccountCredentialsSecret")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Username")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUsername())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Password")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPassword())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *EncryptionKeySecret) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.EncryptionKeySecret")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/settings.pb.uniquehash.go b/projects/gloo/pkg/api/v1/settings.pb.uniquehash.go new file mode 100644 index 00000000000..bf809f24b4a --- /dev/null +++ b/projects/gloo/pkg/api/v1/settings.pb.uniquehash.go @@ -0,0 +1,3257 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/settings.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" + + consul "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/consul" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) + + _ = consul.ConsulConsistencyModes(0) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DiscoveryNamespace")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDiscoveryNamespace())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("WatchNamespaces")); err != nil { + return 0, err + } + for i, v := range m.GetWatchNamespaces() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetSecretOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRefreshRate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RefreshRate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRefreshRate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RefreshRate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DevMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDevMode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Linkerd")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetLinkerd()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetKnative()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Knative")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKnative(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Knative")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDiscovery()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Discovery")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDiscovery(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Discovery")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGloo()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Gloo")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGloo(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Gloo")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGateway()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Gateway")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGateway(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Gateway")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConsul()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Consul")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsul(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Consul")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConsulDiscovery()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConsulDiscovery")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsulDiscovery(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConsulDiscovery")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetKubernetes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Kubernetes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubernetes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Kubernetes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtensions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtensions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extensions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRatelimit()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Ratelimit")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimit(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Ratelimit")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRatelimitServer()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RatelimitServer")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRatelimitServer(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RatelimitServer")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRbac()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Rbac")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRbac(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Rbac")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtauth()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtauth(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Extauth")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetNamedExtauth() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetCachingServer()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CachingServer")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCachingServer(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CachingServer")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetObservabilityOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ObservabilityOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetObservabilityOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ObservabilityOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetUpstreamOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UpstreamOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUpstreamOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UpstreamOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConsoleOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConsoleOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsoleOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConsoleOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetGraphqlOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GraphqlOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGraphqlOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GraphqlOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetExtProc()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetExtProc(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ExtProc")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.ConfigSource.(type) { + + case *Settings_KubernetesConfigSource: + + if h, ok := interface{}(m.GetKubernetesConfigSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KubernetesConfigSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubernetesConfigSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KubernetesConfigSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_DirectoryConfigSource: + + if h, ok := interface{}(m.GetDirectoryConfigSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DirectoryConfigSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectoryConfigSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DirectoryConfigSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_ConsulKvSource: + + if h, ok := interface{}(m.GetConsulKvSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConsulKvSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsulKvSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConsulKvSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.SecretSource.(type) { + + case *Settings_KubernetesSecretSource: + + if h, ok := interface{}(m.GetKubernetesSecretSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KubernetesSecretSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubernetesSecretSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KubernetesSecretSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_VaultSecretSource: + + if h, ok := interface{}(m.GetVaultSecretSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("VaultSecretSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVaultSecretSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("VaultSecretSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_DirectorySecretSource: + + if h, ok := interface{}(m.GetDirectorySecretSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DirectorySecretSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectorySecretSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DirectorySecretSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + switch m.ArtifactSource.(type) { + + case *Settings_KubernetesArtifactSource: + + if h, ok := interface{}(m.GetKubernetesArtifactSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KubernetesArtifactSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubernetesArtifactSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KubernetesArtifactSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_DirectoryArtifactSource: + + if h, ok := interface{}(m.GetDirectoryArtifactSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DirectoryArtifactSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectoryArtifactSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DirectoryArtifactSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_ConsulKvArtifactSource: + + if h, ok := interface{}(m.GetConsulKvArtifactSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConsulKvArtifactSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsulKvArtifactSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConsulKvArtifactSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.UpstreamOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSslParameters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslParameters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslParameters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslParameters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetGlobalAnnotations() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GlooOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GlooOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("XdsBindAddr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetXdsBindAddr())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ValidationBindAddr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValidationBindAddr())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetCircuitBreakers()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CircuitBreakers")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCircuitBreakers(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CircuitBreakers")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEndpointsWarmingTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EndpointsWarmingTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEndpointsWarmingTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EndpointsWarmingTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAwsOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AwsOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAwsOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AwsOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInvalidConfigPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InvalidConfigPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInvalidConfigPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InvalidConfigPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DisableKubernetesDestinations")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetDisableKubernetesDestinations()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDisableGrpcWeb()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableGrpcWeb")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableGrpcWeb(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableGrpcWeb")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisableProxyGarbageCollection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableProxyGarbageCollection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableProxyGarbageCollection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableProxyGarbageCollection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRegexMaxProgramSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RegexMaxProgramSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRegexMaxProgramSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RegexMaxProgramSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RestXdsBindAddr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRestXdsBindAddr())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEnableRestEds()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnableRestEds")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnableRestEds(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnableRestEds")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFailoverUpstreamDnsPollingInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FailoverUpstreamDnsPollingInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFailoverUpstreamDnsPollingInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FailoverUpstreamDnsPollingInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRemoveUnusedFilters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RemoveUnusedFilters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRemoveUnusedFilters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RemoveUnusedFilters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ProxyDebugBindAddr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetProxyDebugBindAddr())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetLogTransformationRequestResponseInfo()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LogTransformationRequestResponseInfo")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLogTransformationRequestResponseInfo(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LogTransformationRequestResponseInfo")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTransformationEscapeCharacters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TransformationEscapeCharacters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransformationEscapeCharacters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TransformationEscapeCharacters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIstioOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IstioOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIstioOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IstioOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *VirtualServiceOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.VirtualServiceOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetOneWayTls()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OneWayTls")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOneWayTls(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OneWayTls")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GatewayOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GatewayOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ValidationServerAddr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValidationServerAddr())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetValidation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Validation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValidation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Validation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ReadGatewaysFromAllNamespaces")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReadGatewaysFromAllNamespaces()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AlwaysSortRouteTableRoutes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetAlwaysSortRouteTableRoutes()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CompressedProxySpec")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetCompressedProxySpec()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetVirtualServiceOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("VirtualServiceOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVirtualServiceOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("VirtualServiceOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPersistProxySpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PersistProxySpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPersistProxySpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PersistProxySpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetEnableGatewayController()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EnableGatewayController")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnableGatewayController(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EnableGatewayController")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetIsolateVirtualHostsBySslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IsolateVirtualHostsBySslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIsolateVirtualHostsBySslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IsolateVirtualHostsBySslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTranslateEmptyGateways()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TranslateEmptyGateways")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTranslateEmptyGateways(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TranslateEmptyGateways")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *ConsoleOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.ConsoleOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetReadOnly()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ReadOnly")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetReadOnly(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ReadOnly")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetApiExplorerEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ApiExplorerEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetApiExplorerEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ApiExplorerEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GraphqlOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GraphqlOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetSchemaChangeValidationOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SchemaChangeValidationOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSchemaChangeValidationOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SchemaChangeValidationOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_SecretOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_SecretOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Sources")); err != nil { + return 0, err + } + for i, v := range m.GetSources() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_KubernetesCrds) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_KubernetesCrds")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_KubernetesSecrets) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_KubernetesSecrets")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_VaultSecrets) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_VaultSecrets")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Token")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetToken())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CaCert")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCaCert())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CaPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCaPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientCert")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientCert())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsServerName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTlsServerName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetInsecure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Insecure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInsecure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Insecure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("RootKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRootKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("PathPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPathPrefix())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetTlsConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TlsConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTlsConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TlsConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.AuthMethod.(type) { + + case *Settings_VaultSecrets_AccessToken: + + if _, err = hasher.Write([]byte("AccessToken")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAccessToken())); err != nil { + return 0, err + } + + case *Settings_VaultSecrets_Aws: + + if h, ok := interface{}(m.GetAws()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAws(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_VaultAwsAuth) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_VaultAwsAuth")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VaultRole")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetVaultRole())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Region")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRegion())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IamServerIdHeader")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetIamServerIdHeader())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MountPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetMountPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("AccessKeyId")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAccessKeyId())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SecretAccessKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSecretAccessKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SessionToken")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSessionToken())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("LeaseIncrement")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetLeaseIncrement()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_VaultTlsConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_VaultTlsConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CaCert")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCaCert())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CaPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCaPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientCert")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientCert())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClientKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClientKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsServerName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTlsServerName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetInsecure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Insecure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInsecure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Insecure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_ConsulKv) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_ConsulKv")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RootKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRootKey())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_KubernetesConfigmaps) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_KubernetesConfigmaps")); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_Directory) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_Directory")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Directory")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDirectory())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_KnativeOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_KnativeOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ClusterIngressProxyAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterIngressProxyAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("KnativeExternalProxyAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKnativeExternalProxyAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("KnativeInternalProxyAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKnativeInternalProxyAddress())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_DiscoveryOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_DiscoveryOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("FdsMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetFdsMode()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUdsOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UdsOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUdsOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UdsOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFdsOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FdsOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFdsOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FdsOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_ConsulConfiguration) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_ConsulConfiguration")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Address")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Datacenter")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDatacenter())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Username")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetUsername())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Password")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetPassword())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Token")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetToken())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CaFile")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCaFile())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CaPath")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCaPath())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CertFile")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCertFile())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("KeyFile")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKeyFile())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetInsecureSkipVerify()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InsecureSkipVerify")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInsecureSkipVerify(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InsecureSkipVerify")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWaitTime()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("WaitTime")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWaitTime(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("WaitTime")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetServiceDiscovery()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceDiscovery")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceDiscovery(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceDiscovery")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HttpAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHttpAddress())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DnsAddress")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDnsAddress())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDnsPollingInterval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsPollingInterval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsPollingInterval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsPollingInterval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_ConsulUpstreamDiscoveryConfiguration) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_ConsulUpstreamDiscoveryConfiguration")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("UseTlsTagging")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetUseTlsTagging()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsTagName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTlsTagName())); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRootCa()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RootCa")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRootCa(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RootCa")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("SplitTlsServices")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetSplitTlsServices()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ConsistencyMode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetConsistencyMode()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetQueryOptions()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("QueryOptions")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetQueryOptions(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("QueryOptions")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ServiceTagsAllowlist")); err != nil { + return 0, err + } + for i, v := range m.GetServiceTagsAllowlist() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetEdsBlockingQueries()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("EdsBlockingQueries")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEdsBlockingQueries(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("EdsBlockingQueries")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_KubernetesConfiguration) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_KubernetesConfiguration")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRateLimits()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRateLimits(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RateLimits")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_ObservabilityOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_ObservabilityOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetGrafanaIntegration()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GrafanaIntegration")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGrafanaIntegration(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GrafanaIntegration")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetConfigStatusMetricLabels() { + innerHash.Reset() + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(innerHash); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(innerHash, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_SecretOptions_Source) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_SecretOptions_Source")); err != nil { + return 0, err + } + + switch m.Source.(type) { + + case *Settings_SecretOptions_Source_Kubernetes: + + if h, ok := interface{}(m.GetKubernetes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Kubernetes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubernetes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Kubernetes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_SecretOptions_Source_Vault: + + if h, ok := interface{}(m.GetVault()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Vault")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetVault(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Vault")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Settings_SecretOptions_Source_Directory: + + if h, ok := interface{}(m.GetDirectory()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Directory")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDirectory(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Directory")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_DiscoveryOptions_UdsOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_DiscoveryOptions_UdsOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Enabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetWatchLabels() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_DiscoveryOptions_FdsOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_DiscoveryOptions_FdsOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetGraphqlEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("GraphqlEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetGraphqlEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("GraphqlEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_ConsulConfiguration_ServiceDiscoveryOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_ConsulConfiguration_ServiceDiscoveryOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("DataCenters")); err != nil { + return 0, err + } + for i, v := range m.GetDataCenters() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_KubernetesConfiguration_RateLimits) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_KubernetesConfiguration_RateLimits")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("QPS")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetQPS()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Burst")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetBurst()) + if err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_ObservabilityOptions_GrafanaIntegration) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_ObservabilityOptions_GrafanaIntegration")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetDefaultDashboardFolderId()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DefaultDashboardFolderId")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDefaultDashboardFolderId(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DefaultDashboardFolderId")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("DashboardPrefix")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetDashboardPrefix())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ExtraMetricQueryParameters")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetExtraMetricQueryParameters())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Settings_ObservabilityOptions_MetricLabels) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Settings_ObservabilityOptions_MetricLabels")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetLabelToPath() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GlooOptions_AWSOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GlooOptions_AWSOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPropagateOriginalRouting()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PropagateOriginalRouting")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPropagateOriginalRouting(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PropagateOriginalRouting")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCredentialRefreshDelay()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CredentialRefreshDelay")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCredentialRefreshDelay(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CredentialRefreshDelay")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFallbackToFirstFunction()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FallbackToFirstFunction")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFallbackToFirstFunction(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FallbackToFirstFunction")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.CredentialsFetcher.(type) { + + case *GlooOptions_AWSOptions_EnableCredentialsDiscovey: + + if _, err = hasher.Write([]byte("EnableCredentialsDiscovey")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetEnableCredentialsDiscovey()) + if err != nil { + return 0, err + } + + case *GlooOptions_AWSOptions_ServiceAccountCredentials: + + if h, ok := interface{}(m.GetServiceAccountCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServiceAccountCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServiceAccountCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServiceAccountCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GlooOptions_InvalidConfigPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GlooOptions_InvalidConfigPolicy")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ReplaceInvalidRoutes")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetReplaceInvalidRoutes()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InvalidRouteResponseCode")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetInvalidRouteResponseCode()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("InvalidRouteResponseBody")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetInvalidRouteResponseBody())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GlooOptions_IstioOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GlooOptions_IstioOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAppendXForwardedHost()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AppendXForwardedHost")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAppendXForwardedHost(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AppendXForwardedHost")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GatewayOptions_ValidationOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GatewayOptions_ValidationOptions")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ProxyValidationServerAddr")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetProxyValidationServerAddr())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ValidationWebhookTlsCert")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValidationWebhookTlsCert())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ValidationWebhookTlsKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValidationWebhookTlsKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("IgnoreGlooValidationFailure")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetIgnoreGlooValidationFailure()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetAlwaysAccept()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AlwaysAccept")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAlwaysAccept(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AlwaysAccept")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetAllowWarnings()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowWarnings")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowWarnings(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowWarnings")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWarnRouteShortCircuiting()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("WarnRouteShortCircuiting")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWarnRouteShortCircuiting(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("WarnRouteShortCircuiting")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisableTransformationValidation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableTransformationValidation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableTransformationValidation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableTransformationValidation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetValidationServerGrpcMaxSizeBytes()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ValidationServerGrpcMaxSizeBytes")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetValidationServerGrpcMaxSizeBytes(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ValidationServerGrpcMaxSizeBytes")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetServerEnabled()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ServerEnabled")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetServerEnabled(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ServerEnabled")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetWarnMissingTlsSecret()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("WarnMissingTlsSecret")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetWarnMissingTlsSecret(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("WarnMissingTlsSecret")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *GraphqlOptions_SchemaChangeValidationOptions) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.GraphqlOptions_SchemaChangeValidationOptions")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetRejectBreakingChanges()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RejectBreakingChanges")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRejectBreakingChanges(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RejectBreakingChanges")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ProcessingRules")); err != nil { + return 0, err + } + for i, v := range m.GetProcessingRules() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, v) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/ssl/ssl.pb.uniquehash.go b/projects/gloo/pkg/api/v1/ssl/ssl.pb.uniquehash.go new file mode 100644 index 00000000000..a20de1522d2 --- /dev/null +++ b/projects/gloo/pkg/api/v1/ssl/ssl.pb.uniquehash.go @@ -0,0 +1,689 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/ssl/ssl.proto + +package ssl + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SslConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/ssl.SslConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("SniDomains")); err != nil { + return 0, err + } + for i, v := range m.GetSniDomains() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("VerifySubjectAltName")); err != nil { + return 0, err + } + for i, v := range m.GetVerifySubjectAltName() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetParameters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetParameters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("AlpnProtocols")); err != nil { + return 0, err + } + for i, v := range m.GetAlpnProtocols() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetOneWayTls()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OneWayTls")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOneWayTls(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OneWayTls")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDisableTlsSessionResumption()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DisableTlsSessionResumption")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDisableTlsSessionResumption(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DisableTlsSessionResumption")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetTransportSocketConnectTimeout()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("TransportSocketConnectTimeout")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetTransportSocketConnectTimeout(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("TransportSocketConnectTimeout")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("OcspStaplePolicy")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetOcspStaplePolicy()) + if err != nil { + return 0, err + } + + switch m.SslSecrets.(type) { + + case *SslConfig_SecretRef: + + if h, ok := interface{}(m.GetSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *SslConfig_SslFiles: + + if h, ok := interface{}(m.GetSslFiles()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslFiles")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslFiles(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslFiles")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *SslConfig_Sds: + + if h, ok := interface{}(m.GetSds()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Sds")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSds(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Sds")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SSLFiles) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/ssl.SSLFiles")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsCert")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTlsCert())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TlsKey")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTlsKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("RootCa")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetRootCa())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("OcspStaple")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetOcspStaple())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *UpstreamSslConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/ssl.UpstreamSslConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Sni")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetSni())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("VerifySubjectAltName")); err != nil { + return 0, err + } + for i, v := range m.GetVerifySubjectAltName() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetParameters()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetParameters(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Parameters")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("AlpnProtocols")); err != nil { + return 0, err + } + for i, v := range m.GetAlpnProtocols() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if h, ok := interface{}(m.GetAllowRenegotiation()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AllowRenegotiation")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAllowRenegotiation(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AllowRenegotiation")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.SslSecrets.(type) { + + case *UpstreamSslConfig_SecretRef: + + if h, ok := interface{}(m.GetSecretRef()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSecretRef(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SecretRef")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *UpstreamSslConfig_SslFiles: + + if h, ok := interface{}(m.GetSslFiles()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslFiles")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslFiles(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslFiles")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *UpstreamSslConfig_Sds: + + if h, ok := interface{}(m.GetSds()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Sds")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSds(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Sds")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SDSConfig) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/ssl.SDSConfig")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TargetUri")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTargetUri())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CertificatesSecretName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetCertificatesSecretName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("ValidationContextName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValidationContextName())); err != nil { + return 0, err + } + + switch m.SdsBuilder.(type) { + + case *SDSConfig_CallCredentials: + + if h, ok := interface{}(m.GetCallCredentials()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CallCredentials")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCallCredentials(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CallCredentials")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *SDSConfig_ClusterName: + + if _, err = hasher.Write([]byte("ClusterName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetClusterName())); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CallCredentials) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/ssl.CallCredentials")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetFileCredentialSource()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("FileCredentialSource")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFileCredentialSource(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("FileCredentialSource")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *SslParameters) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/ssl.SslParameters")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MinimumProtocolVersion")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMinimumProtocolVersion()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("MaximumProtocolVersion")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetMaximumProtocolVersion()) + if err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("CipherSuites")); err != nil { + return 0, err + } + for i, v := range m.GetCipherSuites() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + if _, err = hasher.Write([]byte("EcdhCurves")); err != nil { + return 0, err + } + for i, v := range m.GetEcdhCurves() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(v)); err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *CallCredentials_FileCredentialSource) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1/ssl.CallCredentials_FileCredentialSource")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("TokenFileName")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetTokenFileName())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Header")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetHeader())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/subset.pb.uniquehash.go b/projects/gloo/pkg/api/v1/subset.pb.uniquehash.go new file mode 100644 index 00000000000..744ffcdce0c --- /dev/null +++ b/projects/gloo/pkg/api/v1/subset.pb.uniquehash.go @@ -0,0 +1,76 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/subset.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Subset) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Subset")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetValues() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} diff --git a/projects/gloo/pkg/api/v1/upstream.pb.uniquehash.go b/projects/gloo/pkg/api/v1/upstream.pb.uniquehash.go new file mode 100644 index 00000000000..06cc312e02c --- /dev/null +++ b/projects/gloo/pkg/api/v1/upstream.pb.uniquehash.go @@ -0,0 +1,813 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/gloo/api/v1/upstream.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Upstream) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.Upstream")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDiscoveryMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DiscoveryMetadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDiscoveryMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DiscoveryMetadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("SslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetCircuitBreakers()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("CircuitBreakers")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetCircuitBreakers(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("CircuitBreakers")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetLoadBalancerConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("LoadBalancerConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetLoadBalancerConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("LoadBalancerConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HealthChecks")); err != nil { + return 0, err + } + for i, v := range m.GetHealthChecks() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetOutlierDetection()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OutlierDetection")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOutlierDetection(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OutlierDetection")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetFailover()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Failover")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetFailover(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Failover")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetConnectionConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ConnectionConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConnectionConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ConnectionConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("ProtocolSelection")); err != nil { + return 0, err + } + err = binary.Write(hasher, binary.LittleEndian, m.GetProtocolSelection()) + if err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetUseHttp2()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("UseHttp2")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetUseHttp2(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("UseHttp2")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInitialStreamWindowSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialStreamWindowSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialStreamWindowSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialStreamWindowSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetInitialConnectionWindowSize()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("InitialConnectionWindowSize")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetInitialConnectionWindowSize(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("InitialConnectionWindowSize")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMaxConcurrentStreams()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("MaxConcurrentStreams")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMaxConcurrentStreams(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("MaxConcurrentStreams")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetOverrideStreamErrorOnInvalidHttpMessage()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("OverrideStreamErrorOnInvalidHttpMessage")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetOverrideStreamErrorOnInvalidHttpMessage(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("OverrideStreamErrorOnInvalidHttpMessage")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHttpProxyHostname()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpProxyHostname")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpProxyHostname(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpProxyHostname")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetHttpConnectSslConfig()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("HttpConnectSslConfig")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetHttpConnectSslConfig(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("HttpConnectSslConfig")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if _, err = hasher.Write([]byte("HttpConnectHeaders")); err != nil { + return 0, err + } + for i, v := range m.GetHttpConnectHeaders() { + if _, err = hasher.Write([]byte(strconv.Itoa(i))); err != nil { + return 0, err + } + + if h, ok := interface{}(v).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(v, nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("v")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + if h, ok := interface{}(m.GetIgnoreHealthOnHostRemoval()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("IgnoreHealthOnHostRemoval")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetIgnoreHealthOnHostRemoval(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("IgnoreHealthOnHostRemoval")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetRespectDnsTtl()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("RespectDnsTtl")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetRespectDnsTtl(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("RespectDnsTtl")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetDnsRefreshRate()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("DnsRefreshRate")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetDnsRefreshRate(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("DnsRefreshRate")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetProxyProtocolVersion()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("ProxyProtocolVersion")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetProxyProtocolVersion(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("ProxyProtocolVersion")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPreconnectPolicy()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PreconnectPolicy")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPreconnectPolicy(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PreconnectPolicy")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + switch m.UpstreamType.(type) { + + case *Upstream_Kube: + + if h, ok := interface{}(m.GetKube()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Kube")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKube(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Kube")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Upstream_Static: + + if h, ok := interface{}(m.GetStatic()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Static")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetStatic(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Static")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Upstream_Pipe: + + if h, ok := interface{}(m.GetPipe()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Pipe")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPipe(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Pipe")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Upstream_Aws: + + if h, ok := interface{}(m.GetAws()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAws(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Aws")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Upstream_Azure: + + if h, ok := interface{}(m.GetAzure()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Azure")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAzure(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Azure")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Upstream_Consul: + + if h, ok := interface{}(m.GetConsul()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Consul")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetConsul(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Consul")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + case *Upstream_AwsEc2: + + if h, ok := interface{}(m.GetAwsEc2()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("AwsEc2")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetAwsEc2(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("AwsEc2")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *DiscoveryMetadata) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.DiscoveryMetadata")); err != nil { + return 0, err + } + + { + var result uint64 + innerHash := fnv.New64() + for k, v := range m.GetLabels() { + innerHash.Reset() + + if _, err = innerHash.Write([]byte("v")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(v)); err != nil { + return 0, err + } + + if _, err = innerHash.Write([]byte("k")); err != nil { + return 0, err + } + if _, err = innerHash.Write([]byte(k)); err != nil { + return 0, err + } + + result = result ^ innerHash.Sum64() + } + err = binary.Write(hasher, binary.LittleEndian, result) + if err != nil { + return 0, err + } + + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *HeaderValue) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.HeaderValue")); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Key")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetKey())); err != nil { + return 0, err + } + + if _, err = hasher.Write([]byte("Value")); err != nil { + return 0, err + } + if _, err = hasher.Write([]byte(m.GetValue())); err != nil { + return 0, err + } + + return hasher.Sum64(), nil +} + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *PreconnectPolicy) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("gloo.solo.io.github.com/solo-io/gloo/projects/gloo/pkg/api/v1.PreconnectPolicy")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetPerUpstreamPreconnectRatio()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PerUpstreamPreconnectRatio")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPerUpstreamPreconnectRatio(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PerUpstreamPreconnectRatio")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetPredictivePreconnectRatio()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("PredictivePreconnectRatio")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetPredictivePreconnectRatio(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("PredictivePreconnectRatio")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/ingress/pkg/api/v1/ingress.pb.uniquehash.go b/projects/ingress/pkg/api/v1/ingress.pb.uniquehash.go new file mode 100644 index 00000000000..48c8a277326 --- /dev/null +++ b/projects/ingress/pkg/api/v1/ingress.pb.uniquehash.go @@ -0,0 +1,87 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/ingress/api/v1/ingress.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *Ingress) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ingress.solo.io.github.com/solo-io/gloo/projects/ingress/pkg/api/v1.Ingress")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetKubeIngressSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KubeIngressSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubeIngressSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KubeIngressSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} diff --git a/projects/ingress/pkg/api/v1/service.pb.uniquehash.go b/projects/ingress/pkg/api/v1/service.pb.uniquehash.go new file mode 100644 index 00000000000..41798a1bcc2 --- /dev/null +++ b/projects/ingress/pkg/api/v1/service.pb.uniquehash.go @@ -0,0 +1,107 @@ +// Code generated by protoc-gen-ext. DO NOT EDIT. +// source: github.com/solo-io/gloo/projects/ingress/api/v1/service.proto + +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "hash" + "hash/fnv" + "strconv" + + safe_hasher "github.com/solo-io/protoc-gen-ext/pkg/hasher" + "github.com/solo-io/protoc-gen-ext/pkg/hasher/hashstructure" +) + +// ensure the imports are used +var ( + _ = errors.New("") + _ = fmt.Print + _ = binary.LittleEndian + _ = new(hash.Hash64) + _ = fnv.New64 + _ = strconv.Itoa + _ = hashstructure.Hash + _ = new(safe_hasher.SafeHasher) +) + +// HashUnique function generates a hash of the object that is unique to the object by +// hashing field name and value pairs. +// Replaces Hash due to original hashing implemention only using field values. The omission +// of the field name in the hash calculation can lead to hash collisions. +func (m *KubeService) HashUnique(hasher hash.Hash64) (uint64, error) { + if m == nil { + return 0, nil + } + if hasher == nil { + hasher = fnv.New64() + } + var err error + if _, err = hasher.Write([]byte("ingress.solo.io.github.com/solo-io/gloo/projects/ingress/pkg/api/v1.KubeService")); err != nil { + return 0, err + } + + if h, ok := interface{}(m.GetKubeServiceSpec()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KubeServiceSpec")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubeServiceSpec(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KubeServiceSpec")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetKubeServiceStatus()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("KubeServiceStatus")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetKubeServiceStatus(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("KubeServiceStatus")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + if h, ok := interface{}(m.GetMetadata()).(safe_hasher.SafeHasher); ok { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if _, err = h.Hash(hasher); err != nil { + return 0, err + } + } else { + if fieldValue, err := hashstructure.Hash(m.GetMetadata(), nil); err != nil { + return 0, err + } else { + if _, err = hasher.Write([]byte("Metadata")); err != nil { + return 0, err + } + if err := binary.Write(hasher, binary.LittleEndian, fieldValue); err != nil { + return 0, err + } + } + } + + return hasher.Sum64(), nil +} From 33e619c136ae78fca86162b546c004d2405952d9 Mon Sep 17 00:00:00 2001 From: Ryan Old Date: Sat, 22 Feb 2025 12:16:40 -0800 Subject: [PATCH 3/4] Fixing build failure --- ci/cloudbuild/run-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/cloudbuild/run-tests.yaml b/ci/cloudbuild/run-tests.yaml index ff57e0fffb7..2a0113cb93c 100644 --- a/ci/cloudbuild/run-tests.yaml +++ b/ci/cloudbuild/run-tests.yaml @@ -101,7 +101,7 @@ steps: secretEnv: - 'JWT_PRIVATE_KEY' -- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.7.7' +- name: 'gcr.io/$PROJECT_ID/e2e-go-mod-ginkgo:0.10.2' id: 'run-hashicorp-e2e-tests' dir: *dir entrypoint: 'make' From ca0bd118a2396a96e1ac697ed347160f746e3586 Mon Sep 17 00:00:00 2001 From: Ryan Old Date: Mon, 24 Feb 2025 07:49:19 -0800 Subject: [PATCH 4/4] Trigger builds the hard way