2024-02-24 00:34:55 +00:00
|
|
|
// Copyright 2023 Google LLC
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
|
|
// versions:
|
|
|
|
// protoc-gen-go v1.26.0
|
2024-02-24 00:34:55 +00:00
|
|
|
// protoc v3.21.9
|
2022-07-07 20:11:50 +00:00
|
|
|
// source: google/api/routing.proto
|
|
|
|
|
|
|
|
package annotations
|
|
|
|
|
|
|
|
import (
|
|
|
|
reflect "reflect"
|
|
|
|
sync "sync"
|
|
|
|
|
|
|
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
|
|
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
|
|
|
descriptorpb "google.golang.org/protobuf/types/descriptorpb"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
// Verify that this generated code is sufficiently up-to-date.
|
|
|
|
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
|
|
|
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
|
|
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
|
|
|
)
|
|
|
|
|
|
|
|
// Specifies the routing information that should be sent along with the request
|
|
|
|
// in the form of routing header.
|
|
|
|
// **NOTE:** All service configuration rules follow the "last one wins" order.
|
|
|
|
//
|
|
|
|
// The examples below will apply to an RPC which has the following request type:
|
|
|
|
//
|
|
|
|
// Message Definition:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// message Request {
|
|
|
|
// // The name of the Table
|
|
|
|
// // Values can be of the following formats:
|
|
|
|
// // - `projects/<project>/tables/<table>`
|
|
|
|
// // - `projects/<project>/instances/<instance>/tables/<table>`
|
|
|
|
// // - `region/<region>/zones/<zone>/tables/<table>`
|
|
|
|
// string table_name = 1;
|
|
|
|
//
|
|
|
|
// // This value specifies routing for replication.
|
|
|
|
// // It can be in the following formats:
|
|
|
|
// // - `profiles/<profile_id>`
|
|
|
|
// // - a legacy `profile_id` that can be any string
|
|
|
|
// string app_profile_id = 2;
|
|
|
|
// }
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Example message:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// {
|
|
|
|
// table_name: projects/proj_foo/instances/instance_bar/table/table_baz,
|
|
|
|
// app_profile_id: profiles/prof_qux
|
|
|
|
// }
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// The routing header consists of one or multiple key-value pairs. Every key
|
|
|
|
// and value must be percent-encoded, and joined together in the format of
|
|
|
|
// `key1=value1&key2=value2`.
|
|
|
|
// In the examples below I am skipping the percent-encoding for readablity.
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 1
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting a field from the request to put into the routing header
|
|
|
|
// unchanged, with the key equal to the field name.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // Take the `app_profile_id`.
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "app_profile_id"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params: app_profile_id=profiles/prof_qux
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 2
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting a field from the request to put into the routing header
|
|
|
|
// unchanged, with the key different from the field name.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // Take the `app_profile_id`, but name it `routing_id` in the header.
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "app_profile_id"
|
|
|
|
// path_template: "{routing_id=**}"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params: routing_id=profiles/prof_qux
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 3
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting a field from the request to put into the routing
|
|
|
|
// header, while matching a path template syntax on the field's value.
|
|
|
|
//
|
|
|
|
// NB: it is more useful to send nothing than to send garbage for the purpose
|
|
|
|
// of dynamic routing, since garbage pollutes cache. Thus the matching.
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Sub-example 3a
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// The field matches the template.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // Take the `table_name`, if it's well-formed (with project-based
|
|
|
|
// // syntax).
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{table_name=projects/*/instances/*/**}"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params:
|
|
|
|
// table_name=projects/proj_foo/instances/instance_bar/table/table_baz
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Sub-example 3b
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// The field does not match the template.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // Take the `table_name`, if it's well-formed (with region-based
|
|
|
|
// // syntax).
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{table_name=regions/*/zones/*/**}"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// <no routing header will be sent>
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Sub-example 3c
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Multiple alternative conflictingly named path templates are
|
|
|
|
// specified. The one that matches is used to construct the header.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // Take the `table_name`, if it's well-formed, whether
|
|
|
|
// // using the region- or projects-based syntax.
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{table_name=regions/*/zones/*/**}"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{table_name=projects/*/instances/*/**}"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params:
|
|
|
|
// table_name=projects/proj_foo/instances/instance_bar/table/table_baz
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 4
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting a single routing header key-value pair by matching a
|
|
|
|
// template syntax on (a part of) a single request field.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // Take just the project id from the `table_name` field.
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{routing_id=projects/*}/**"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params: routing_id=projects/proj_foo
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 5
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting a single routing header key-value pair by matching
|
|
|
|
// several conflictingly named path templates on (parts of) a single request
|
|
|
|
// field. The last template to match "wins" the conflict.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // If the `table_name` does not have instances information,
|
|
|
|
// // take just the project id for routing.
|
|
|
|
// // Otherwise take project + instance.
|
|
|
|
//
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{routing_id=projects/*}/**"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{routing_id=projects/*/instances/*}/**"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params:
|
|
|
|
// routing_id=projects/proj_foo/instances/instance_bar
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 6
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting multiple routing header key-value pairs by matching
|
|
|
|
// several non-conflicting path templates on (parts of) a single request field.
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Sub-example 6a
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Make the templates strict, so that if the `table_name` does not
|
|
|
|
// have an instance information, nothing is sent.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // The routing code needs two keys instead of one composite
|
|
|
|
// // but works only for the tables with the "project-instance" name
|
|
|
|
// // syntax.
|
|
|
|
//
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{project_id=projects/*}/instances/*/**"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "projects/*/{instance_id=instances/*}/**"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params:
|
|
|
|
// project_id=projects/proj_foo&instance_id=instances/instance_bar
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Sub-example 6b
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Make the templates loose, so that if the `table_name` does not
|
|
|
|
// have an instance information, just the project id part is sent.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // The routing code wants two keys instead of one composite
|
|
|
|
// // but will work with just the `project_id` for tables without
|
|
|
|
// // an instance in the `table_name`.
|
|
|
|
//
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{project_id=projects/*}/**"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "projects/*/{instance_id=instances/*}/**"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result (is the same as 6a for our example message because it has the instance
|
|
|
|
// information):
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params:
|
|
|
|
// project_id=projects/proj_foo&instance_id=instances/instance_bar
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 7
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting multiple routing header key-value pairs by matching
|
|
|
|
// several path templates on multiple request fields.
|
|
|
|
//
|
|
|
|
// NB: note that here there is no way to specify sending nothing if one of the
|
|
|
|
// fields does not match its template. E.g. if the `table_name` is in the wrong
|
|
|
|
// format, the `project_id` will not be sent, but the `routing_id` will be.
|
|
|
|
// The backend routing code has to be aware of that and be prepared to not
|
|
|
|
// receive a full complement of keys if it expects multiple.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // The routing needs both `project_id` and `routing_id`
|
|
|
|
// // (from the `app_profile_id` field) for routing.
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{project_id=projects/*}/**"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "app_profile_id"
|
|
|
|
// path_template: "{routing_id=**}"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params:
|
|
|
|
// project_id=projects/proj_foo&routing_id=profiles/prof_qux
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 8
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Extracting a single routing header key-value pair by matching
|
|
|
|
// several conflictingly named path templates on several request fields. The
|
|
|
|
// last template to match "wins" the conflict.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // The `routing_id` can be a project id or a region id depending on
|
|
|
|
// // the table name format, but only if the `app_profile_id` is not set.
|
|
|
|
// // If `app_profile_id` is set it should be used instead.
|
|
|
|
//
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{routing_id=projects/*}/**"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{routing_id=regions/*}/**"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "app_profile_id"
|
|
|
|
// path_template: "{routing_id=**}"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params: routing_id=profiles/prof_qux
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// # Example 9
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// Bringing it all together.
|
|
|
|
//
|
|
|
|
// annotation:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// option (google.api.routing) = {
|
|
|
|
// // For routing both `table_location` and a `routing_id` are needed.
|
|
|
|
// //
|
|
|
|
// // table_location can be either an instance id or a region+zone id.
|
|
|
|
// //
|
|
|
|
// // For `routing_id`, take the value of `app_profile_id`
|
|
|
|
// // - If it's in the format `profiles/<profile_id>`, send
|
|
|
|
// // just the `<profile_id>` part.
|
|
|
|
// // - If it's any other literal, send it as is.
|
|
|
|
// // If the `app_profile_id` is empty, and the `table_name` starts with
|
|
|
|
// // the project_id, send that instead.
|
|
|
|
//
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "projects/*/{table_location=instances/*}/tables/*"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{table_location=regions/*/zones/*}/tables/*"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{routing_id=projects/*}/**"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "app_profile_id"
|
|
|
|
// path_template: "{routing_id=**}"
|
|
|
|
// }
|
|
|
|
// routing_parameters {
|
|
|
|
// field: "app_profile_id"
|
|
|
|
// path_template: "profiles/{routing_id=*}"
|
|
|
|
// }
|
|
|
|
// };
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// result:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// x-goog-request-params:
|
|
|
|
// table_location=instances/instance_bar&routing_id=prof_qux
|
2022-07-07 20:11:50 +00:00
|
|
|
type RoutingRule struct {
|
|
|
|
state protoimpl.MessageState
|
|
|
|
sizeCache protoimpl.SizeCache
|
|
|
|
unknownFields protoimpl.UnknownFields
|
|
|
|
|
|
|
|
// A collection of Routing Parameter specifications.
|
|
|
|
// **NOTE:** If multiple Routing Parameters describe the same key
|
|
|
|
// (via the `path_template` field or via the `field` field when
|
|
|
|
// `path_template` is not provided), "last one wins" rule
|
|
|
|
// determines which Parameter gets used.
|
|
|
|
// See the examples for more details.
|
|
|
|
RoutingParameters []*RoutingParameter `protobuf:"bytes,2,rep,name=routing_parameters,json=routingParameters,proto3" json:"routing_parameters,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (x *RoutingRule) Reset() {
|
|
|
|
*x = RoutingRule{}
|
|
|
|
if protoimpl.UnsafeEnabled {
|
|
|
|
mi := &file_google_api_routing_proto_msgTypes[0]
|
|
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
|
|
ms.StoreMessageInfo(mi)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (x *RoutingRule) String() string {
|
|
|
|
return protoimpl.X.MessageStringOf(x)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (*RoutingRule) ProtoMessage() {}
|
|
|
|
|
|
|
|
func (x *RoutingRule) ProtoReflect() protoreflect.Message {
|
|
|
|
mi := &file_google_api_routing_proto_msgTypes[0]
|
|
|
|
if protoimpl.UnsafeEnabled && x != nil {
|
|
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
|
|
if ms.LoadMessageInfo() == nil {
|
|
|
|
ms.StoreMessageInfo(mi)
|
|
|
|
}
|
|
|
|
return ms
|
|
|
|
}
|
|
|
|
return mi.MessageOf(x)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Deprecated: Use RoutingRule.ProtoReflect.Descriptor instead.
|
|
|
|
func (*RoutingRule) Descriptor() ([]byte, []int) {
|
|
|
|
return file_google_api_routing_proto_rawDescGZIP(), []int{0}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (x *RoutingRule) GetRoutingParameters() []*RoutingParameter {
|
|
|
|
if x != nil {
|
|
|
|
return x.RoutingParameters
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// A projection from an input message to the GRPC or REST header.
|
|
|
|
type RoutingParameter struct {
|
|
|
|
state protoimpl.MessageState
|
|
|
|
sizeCache protoimpl.SizeCache
|
|
|
|
unknownFields protoimpl.UnknownFields
|
|
|
|
|
|
|
|
// A request field to extract the header key-value pair from.
|
|
|
|
Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"`
|
|
|
|
// A pattern matching the key-value field. Optional.
|
|
|
|
// If not specified, the whole field specified in the `field` field will be
|
|
|
|
// taken as value, and its name used as key. If specified, it MUST contain
|
|
|
|
// exactly one named segment (along with any number of unnamed segments) The
|
|
|
|
// pattern will be matched over the field specified in the `field` field, then
|
|
|
|
// if the match is successful:
|
|
|
|
// - the name of the single named segment will be used as a header name,
|
|
|
|
// - the match value of the segment will be used as a header value;
|
|
|
|
// if the match is NOT successful, nothing will be sent.
|
|
|
|
//
|
|
|
|
// Example:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// -- This is a field in the request message
|
|
|
|
// | that the header value will be extracted from.
|
|
|
|
// |
|
|
|
|
// | -- This is the key name in the
|
|
|
|
// | | routing header.
|
|
|
|
// V |
|
|
|
|
// field: "table_name" v
|
|
|
|
// path_template: "projects/*/{table_location=instances/*}/tables/*"
|
|
|
|
// ^ ^
|
|
|
|
// | |
|
|
|
|
// In the {} brackets is the pattern that -- |
|
|
|
|
// specifies what to extract from the |
|
|
|
|
// field as a value to be sent. |
|
|
|
|
// |
|
|
|
|
// The string in the field must match the whole pattern --
|
|
|
|
// before brackets, inside brackets, after brackets.
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// When looking at this specific example, we can see that:
|
2024-02-24 00:34:55 +00:00
|
|
|
// - A key-value pair with the key `table_location`
|
|
|
|
// and the value matching `instances/*` should be added
|
|
|
|
// to the x-goog-request-params routing header.
|
|
|
|
// - The value is extracted from the request message's `table_name` field
|
|
|
|
// if it matches the full pattern specified:
|
|
|
|
// `projects/*/instances/*/tables/*`.
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// **NB:** If the `path_template` field is not provided, the key name is
|
|
|
|
// equal to the field name, and the whole field should be sent as a value.
|
|
|
|
// This makes the pattern for the field and the value functionally equivalent
|
|
|
|
// to `**`, and the configuration
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// {
|
|
|
|
// field: "table_name"
|
|
|
|
// }
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// is a functionally equivalent shorthand to:
|
|
|
|
//
|
2024-02-24 00:34:55 +00:00
|
|
|
// {
|
|
|
|
// field: "table_name"
|
|
|
|
// path_template: "{table_name=**}"
|
|
|
|
// }
|
2022-07-07 20:11:50 +00:00
|
|
|
//
|
|
|
|
// See Example 1 for more details.
|
|
|
|
PathTemplate string `protobuf:"bytes,2,opt,name=path_template,json=pathTemplate,proto3" json:"path_template,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (x *RoutingParameter) Reset() {
|
|
|
|
*x = RoutingParameter{}
|
|
|
|
if protoimpl.UnsafeEnabled {
|
|
|
|
mi := &file_google_api_routing_proto_msgTypes[1]
|
|
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
|
|
ms.StoreMessageInfo(mi)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (x *RoutingParameter) String() string {
|
|
|
|
return protoimpl.X.MessageStringOf(x)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (*RoutingParameter) ProtoMessage() {}
|
|
|
|
|
|
|
|
func (x *RoutingParameter) ProtoReflect() protoreflect.Message {
|
|
|
|
mi := &file_google_api_routing_proto_msgTypes[1]
|
|
|
|
if protoimpl.UnsafeEnabled && x != nil {
|
|
|
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
|
|
if ms.LoadMessageInfo() == nil {
|
|
|
|
ms.StoreMessageInfo(mi)
|
|
|
|
}
|
|
|
|
return ms
|
|
|
|
}
|
|
|
|
return mi.MessageOf(x)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Deprecated: Use RoutingParameter.ProtoReflect.Descriptor instead.
|
|
|
|
func (*RoutingParameter) Descriptor() ([]byte, []int) {
|
|
|
|
return file_google_api_routing_proto_rawDescGZIP(), []int{1}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (x *RoutingParameter) GetField() string {
|
|
|
|
if x != nil {
|
|
|
|
return x.Field
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
func (x *RoutingParameter) GetPathTemplate() string {
|
|
|
|
if x != nil {
|
|
|
|
return x.PathTemplate
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
var file_google_api_routing_proto_extTypes = []protoimpl.ExtensionInfo{
|
|
|
|
{
|
|
|
|
ExtendedType: (*descriptorpb.MethodOptions)(nil),
|
|
|
|
ExtensionType: (*RoutingRule)(nil),
|
|
|
|
Field: 72295729,
|
|
|
|
Name: "google.api.routing",
|
|
|
|
Tag: "bytes,72295729,opt,name=routing",
|
|
|
|
Filename: "google/api/routing.proto",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
// Extension fields to descriptorpb.MethodOptions.
|
|
|
|
var (
|
|
|
|
// See RoutingRule.
|
|
|
|
//
|
|
|
|
// optional google.api.RoutingRule routing = 72295729;
|
|
|
|
E_Routing = &file_google_api_routing_proto_extTypes[0]
|
|
|
|
)
|
|
|
|
|
|
|
|
var File_google_api_routing_proto protoreflect.FileDescriptor
|
|
|
|
|
|
|
|
var file_google_api_routing_proto_rawDesc = []byte{
|
|
|
|
0x0a, 0x18, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x6f, 0x75,
|
|
|
|
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67,
|
|
|
|
0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
|
|
|
|
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
|
|
|
|
0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74,
|
|
|
|
0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x69,
|
|
|
|
0x6e, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20,
|
|
|
|
0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69,
|
|
|
|
0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
|
|
|
|
0x72, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
|
|
|
|
0x74, 0x65, 0x72, 0x73, 0x22, 0x4d, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50,
|
|
|
|
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c,
|
|
|
|
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23,
|
|
|
|
0x0a, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18,
|
|
|
|
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x74, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c,
|
|
|
|
0x61, 0x74, 0x65, 0x3a, 0x54, 0x0a, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e,
|
|
|
|
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
|
|
|
0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb1,
|
|
|
|
0xca, 0xbc, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
|
|
|
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
|
|
|
|
0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6a, 0x0a, 0x0e, 0x63, 0x6f, 0x6d,
|
|
|
|
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0c, 0x52, 0x6f, 0x75,
|
|
|
|
0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f,
|
|
|
|
0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67,
|
|
|
|
0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
|
|
|
|
0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
|
|
|
0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02,
|
|
|
|
0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
file_google_api_routing_proto_rawDescOnce sync.Once
|
|
|
|
file_google_api_routing_proto_rawDescData = file_google_api_routing_proto_rawDesc
|
|
|
|
)
|
|
|
|
|
|
|
|
func file_google_api_routing_proto_rawDescGZIP() []byte {
|
|
|
|
file_google_api_routing_proto_rawDescOnce.Do(func() {
|
|
|
|
file_google_api_routing_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_api_routing_proto_rawDescData)
|
|
|
|
})
|
|
|
|
return file_google_api_routing_proto_rawDescData
|
|
|
|
}
|
|
|
|
|
|
|
|
var file_google_api_routing_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
|
|
|
|
var file_google_api_routing_proto_goTypes = []interface{}{
|
|
|
|
(*RoutingRule)(nil), // 0: google.api.RoutingRule
|
|
|
|
(*RoutingParameter)(nil), // 1: google.api.RoutingParameter
|
|
|
|
(*descriptorpb.MethodOptions)(nil), // 2: google.protobuf.MethodOptions
|
|
|
|
}
|
|
|
|
var file_google_api_routing_proto_depIdxs = []int32{
|
|
|
|
1, // 0: google.api.RoutingRule.routing_parameters:type_name -> google.api.RoutingParameter
|
|
|
|
2, // 1: google.api.routing:extendee -> google.protobuf.MethodOptions
|
|
|
|
0, // 2: google.api.routing:type_name -> google.api.RoutingRule
|
|
|
|
3, // [3:3] is the sub-list for method output_type
|
|
|
|
3, // [3:3] is the sub-list for method input_type
|
|
|
|
2, // [2:3] is the sub-list for extension type_name
|
|
|
|
1, // [1:2] is the sub-list for extension extendee
|
|
|
|
0, // [0:1] is the sub-list for field type_name
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() { file_google_api_routing_proto_init() }
|
|
|
|
func file_google_api_routing_proto_init() {
|
|
|
|
if File_google_api_routing_proto != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if !protoimpl.UnsafeEnabled {
|
|
|
|
file_google_api_routing_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
|
|
switch v := v.(*RoutingRule); i {
|
|
|
|
case 0:
|
|
|
|
return &v.state
|
|
|
|
case 1:
|
|
|
|
return &v.sizeCache
|
|
|
|
case 2:
|
|
|
|
return &v.unknownFields
|
|
|
|
default:
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
file_google_api_routing_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
|
|
|
switch v := v.(*RoutingParameter); i {
|
|
|
|
case 0:
|
|
|
|
return &v.state
|
|
|
|
case 1:
|
|
|
|
return &v.sizeCache
|
|
|
|
case 2:
|
|
|
|
return &v.unknownFields
|
|
|
|
default:
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
type x struct{}
|
|
|
|
out := protoimpl.TypeBuilder{
|
|
|
|
File: protoimpl.DescBuilder{
|
|
|
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
|
|
|
RawDescriptor: file_google_api_routing_proto_rawDesc,
|
|
|
|
NumEnums: 0,
|
|
|
|
NumMessages: 2,
|
|
|
|
NumExtensions: 1,
|
|
|
|
NumServices: 0,
|
|
|
|
},
|
|
|
|
GoTypes: file_google_api_routing_proto_goTypes,
|
|
|
|
DependencyIndexes: file_google_api_routing_proto_depIdxs,
|
|
|
|
MessageInfos: file_google_api_routing_proto_msgTypes,
|
|
|
|
ExtensionInfos: file_google_api_routing_proto_extTypes,
|
|
|
|
}.Build()
|
|
|
|
File_google_api_routing_proto = out.File
|
|
|
|
file_google_api_routing_proto_rawDesc = nil
|
|
|
|
file_google_api_routing_proto_goTypes = nil
|
|
|
|
file_google_api_routing_proto_depIdxs = nil
|
|
|
|
}
|