google_cloud_rust_raw/api/
routing.rs1#![allow(unknown_lints)]
6#![allow(clippy::all)]
7
8#![allow(unused_attributes)]
9#![cfg_attr(rustfmt, rustfmt::skip)]
10
11#![allow(box_pointers)]
12#![allow(dead_code)]
13#![allow(missing_docs)]
14#![allow(non_camel_case_types)]
15#![allow(non_snake_case)]
16#![allow(non_upper_case_globals)]
17#![allow(trivial_casts)]
18#![allow(unused_imports)]
19#![allow(unused_results)]
20#[derive(PartialEq,Clone,Default)]
27pub struct RoutingRule {
28 pub routing_parameters: ::protobuf::RepeatedField<RoutingParameter>,
30 pub unknown_fields: ::protobuf::UnknownFields,
32 pub cached_size: ::protobuf::CachedSize,
33}
34
35impl<'a> ::std::default::Default for &'a RoutingRule {
36 fn default() -> &'a RoutingRule {
37 <RoutingRule as ::protobuf::Message>::default_instance()
38 }
39}
40
41impl RoutingRule {
42 pub fn new() -> RoutingRule {
43 ::std::default::Default::default()
44 }
45
46 pub fn get_routing_parameters(&self) -> &[RoutingParameter] {
50 &self.routing_parameters
51 }
52 pub fn clear_routing_parameters(&mut self) {
53 self.routing_parameters.clear();
54 }
55
56 pub fn set_routing_parameters(&mut self, v: ::protobuf::RepeatedField<RoutingParameter>) {
58 self.routing_parameters = v;
59 }
60
61 pub fn mut_routing_parameters(&mut self) -> &mut ::protobuf::RepeatedField<RoutingParameter> {
63 &mut self.routing_parameters
64 }
65
66 pub fn take_routing_parameters(&mut self) -> ::protobuf::RepeatedField<RoutingParameter> {
68 ::std::mem::replace(&mut self.routing_parameters, ::protobuf::RepeatedField::new())
69 }
70}
71
72impl ::protobuf::Message for RoutingRule {
73 fn is_initialized(&self) -> bool {
74 for v in &self.routing_parameters {
75 if !v.is_initialized() {
76 return false;
77 }
78 };
79 true
80 }
81
82 fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
83 while !is.eof()? {
84 let (field_number, wire_type) = is.read_tag_unpack()?;
85 match field_number {
86 2 => {
87 ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.routing_parameters)?;
88 },
89 _ => {
90 ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
91 },
92 };
93 }
94 ::std::result::Result::Ok(())
95 }
96
97 #[allow(unused_variables)]
99 fn compute_size(&self) -> u32 {
100 let mut my_size = 0;
101 for value in &self.routing_parameters {
102 let len = value.compute_size();
103 my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
104 };
105 my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
106 self.cached_size.set(my_size);
107 my_size
108 }
109
110 fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
111 for v in &self.routing_parameters {
112 os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
113 os.write_raw_varint32(v.get_cached_size())?;
114 v.write_to_with_cached_sizes(os)?;
115 };
116 os.write_unknown_fields(self.get_unknown_fields())?;
117 ::std::result::Result::Ok(())
118 }
119
120 fn get_cached_size(&self) -> u32 {
121 self.cached_size.get()
122 }
123
124 fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
125 &self.unknown_fields
126 }
127
128 fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
129 &mut self.unknown_fields
130 }
131
132 fn as_any(&self) -> &dyn (::std::any::Any) {
133 self as &dyn (::std::any::Any)
134 }
135 fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
136 self as &mut dyn (::std::any::Any)
137 }
138 fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
139 self
140 }
141
142 fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
143 Self::descriptor_static()
144 }
145
146 fn new() -> RoutingRule {
147 RoutingRule::new()
148 }
149
150 fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
151 static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
152 descriptor.get(|| {
153 let mut fields = ::std::vec::Vec::new();
154 fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<RoutingParameter>>(
155 "routing_parameters",
156 |m: &RoutingRule| { &m.routing_parameters },
157 |m: &mut RoutingRule| { &mut m.routing_parameters },
158 ));
159 ::protobuf::reflect::MessageDescriptor::new_pb_name::<RoutingRule>(
160 "RoutingRule",
161 fields,
162 file_descriptor_proto()
163 )
164 })
165 }
166
167 fn default_instance() -> &'static RoutingRule {
168 static instance: ::protobuf::rt::LazyV2<RoutingRule> = ::protobuf::rt::LazyV2::INIT;
169 instance.get(RoutingRule::new)
170 }
171}
172
173impl ::protobuf::Clear for RoutingRule {
174 fn clear(&mut self) {
175 self.routing_parameters.clear();
176 self.unknown_fields.clear();
177 }
178}
179
180impl ::std::fmt::Debug for RoutingRule {
181 fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
182 ::protobuf::text_format::fmt(self, f)
183 }
184}
185
186impl ::protobuf::reflect::ProtobufValue for RoutingRule {
187 fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
188 ::protobuf::reflect::ReflectValueRef::Message(self)
189 }
190}
191
192#[derive(PartialEq,Clone,Default)]
193pub struct RoutingParameter {
194 pub field: ::std::string::String,
196 pub path_template: ::std::string::String,
197 pub unknown_fields: ::protobuf::UnknownFields,
199 pub cached_size: ::protobuf::CachedSize,
200}
201
202impl<'a> ::std::default::Default for &'a RoutingParameter {
203 fn default() -> &'a RoutingParameter {
204 <RoutingParameter as ::protobuf::Message>::default_instance()
205 }
206}
207
208impl RoutingParameter {
209 pub fn new() -> RoutingParameter {
210 ::std::default::Default::default()
211 }
212
213 pub fn get_field(&self) -> &str {
217 &self.field
218 }
219 pub fn clear_field(&mut self) {
220 self.field.clear();
221 }
222
223 pub fn set_field(&mut self, v: ::std::string::String) {
225 self.field = v;
226 }
227
228 pub fn mut_field(&mut self) -> &mut ::std::string::String {
231 &mut self.field
232 }
233
234 pub fn take_field(&mut self) -> ::std::string::String {
236 ::std::mem::replace(&mut self.field, ::std::string::String::new())
237 }
238
239 pub fn get_path_template(&self) -> &str {
243 &self.path_template
244 }
245 pub fn clear_path_template(&mut self) {
246 self.path_template.clear();
247 }
248
249 pub fn set_path_template(&mut self, v: ::std::string::String) {
251 self.path_template = v;
252 }
253
254 pub fn mut_path_template(&mut self) -> &mut ::std::string::String {
257 &mut self.path_template
258 }
259
260 pub fn take_path_template(&mut self) -> ::std::string::String {
262 ::std::mem::replace(&mut self.path_template, ::std::string::String::new())
263 }
264}
265
266impl ::protobuf::Message for RoutingParameter {
267 fn is_initialized(&self) -> bool {
268 true
269 }
270
271 fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
272 while !is.eof()? {
273 let (field_number, wire_type) = is.read_tag_unpack()?;
274 match field_number {
275 1 => {
276 ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.field)?;
277 },
278 2 => {
279 ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.path_template)?;
280 },
281 _ => {
282 ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
283 },
284 };
285 }
286 ::std::result::Result::Ok(())
287 }
288
289 #[allow(unused_variables)]
291 fn compute_size(&self) -> u32 {
292 let mut my_size = 0;
293 if !self.field.is_empty() {
294 my_size += ::protobuf::rt::string_size(1, &self.field);
295 }
296 if !self.path_template.is_empty() {
297 my_size += ::protobuf::rt::string_size(2, &self.path_template);
298 }
299 my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
300 self.cached_size.set(my_size);
301 my_size
302 }
303
304 fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
305 if !self.field.is_empty() {
306 os.write_string(1, &self.field)?;
307 }
308 if !self.path_template.is_empty() {
309 os.write_string(2, &self.path_template)?;
310 }
311 os.write_unknown_fields(self.get_unknown_fields())?;
312 ::std::result::Result::Ok(())
313 }
314
315 fn get_cached_size(&self) -> u32 {
316 self.cached_size.get()
317 }
318
319 fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
320 &self.unknown_fields
321 }
322
323 fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
324 &mut self.unknown_fields
325 }
326
327 fn as_any(&self) -> &dyn (::std::any::Any) {
328 self as &dyn (::std::any::Any)
329 }
330 fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
331 self as &mut dyn (::std::any::Any)
332 }
333 fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
334 self
335 }
336
337 fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
338 Self::descriptor_static()
339 }
340
341 fn new() -> RoutingParameter {
342 RoutingParameter::new()
343 }
344
345 fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
346 static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
347 descriptor.get(|| {
348 let mut fields = ::std::vec::Vec::new();
349 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
350 "field",
351 |m: &RoutingParameter| { &m.field },
352 |m: &mut RoutingParameter| { &mut m.field },
353 ));
354 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
355 "path_template",
356 |m: &RoutingParameter| { &m.path_template },
357 |m: &mut RoutingParameter| { &mut m.path_template },
358 ));
359 ::protobuf::reflect::MessageDescriptor::new_pb_name::<RoutingParameter>(
360 "RoutingParameter",
361 fields,
362 file_descriptor_proto()
363 )
364 })
365 }
366
367 fn default_instance() -> &'static RoutingParameter {
368 static instance: ::protobuf::rt::LazyV2<RoutingParameter> = ::protobuf::rt::LazyV2::INIT;
369 instance.get(RoutingParameter::new)
370 }
371}
372
373impl ::protobuf::Clear for RoutingParameter {
374 fn clear(&mut self) {
375 self.field.clear();
376 self.path_template.clear();
377 self.unknown_fields.clear();
378 }
379}
380
381impl ::std::fmt::Debug for RoutingParameter {
382 fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
383 ::protobuf::text_format::fmt(self, f)
384 }
385}
386
387impl ::protobuf::reflect::ProtobufValue for RoutingParameter {
388 fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
389 ::protobuf::reflect::ReflectValueRef::Message(self)
390 }
391}
392
393pub mod exts {
395
396 pub const routing: ::protobuf::ext::ExtFieldOptional<::protobuf::descriptor::MethodOptions, ::protobuf::types::ProtobufTypeMessage<super::RoutingRule>> = ::protobuf::ext::ExtFieldOptional { field_number: 72295729, phantom: ::std::marker::PhantomData };
397}
398
399static file_descriptor_proto_data: &'static [u8] = b"\
400 \n\x18google/api/routing.proto\x12\ngoogle.api\x1a\x20google/protobuf/de\
401 scriptor.proto\"Z\n\x0bRoutingRule\x12K\n\x12routing_parameters\x18\x02\
402 \x20\x03(\x0b2\x1c.google.api.RoutingParameterR\x11routingParameters\"M\
403 \n\x10RoutingParameter\x12\x14\n\x05field\x18\x01\x20\x01(\tR\x05field\
404 \x12#\n\rpath_template\x18\x02\x20\x01(\tR\x0cpathTemplate:T\n\x07routin\
405 g\x18\xb1\xca\xbc\"\x20\x01(\x0b2\x17.google.api.RoutingRule\x12\x1e.goo\
406 gle.protobuf.MethodOptionsR\x07routingBj\n\x0ecom.google.apiB\x0cRouting\
407 ProtoP\x01ZAgoogle.golang.org/genproto/googleapis/api/annotations;annota\
408 tions\xa2\x02\x04GAPIJ\x94l\n\x07\x12\x05\x0e\0\xcc\x03\x01\n\xbc\x04\n\
409 \x01\x0c\x12\x03\x0e\0\x122\xb1\x04\x20Copyright\x202023\x20Google\x20LL\
410 C\n\n\x20Licensed\x20under\x20the\x20Apache\x20License,\x20Version\x202.\
411 0\x20(the\x20\"License\");\n\x20you\x20may\x20not\x20use\x20this\x20file\
412 \x20except\x20in\x20compliance\x20with\x20the\x20License.\n\x20You\x20ma\
413 y\x20obtain\x20a\x20copy\x20of\x20the\x20License\x20at\n\n\x20\x20\x20\
414 \x20\x20http://www.apache.org/licenses/LICENSE-2.0\n\n\x20Unless\x20requ\
415 ired\x20by\x20applicable\x20law\x20or\x20agreed\x20to\x20in\x20writing,\
416 \x20software\n\x20distributed\x20under\x20the\x20License\x20is\x20distri\
417 buted\x20on\x20an\x20\"AS\x20IS\"\x20BASIS,\n\x20WITHOUT\x20WARRANTIES\
418 \x20OR\x20CONDITIONS\x20OF\x20ANY\x20KIND,\x20either\x20express\x20or\
419 \x20implied.\n\x20See\x20the\x20License\x20for\x20the\x20specific\x20lan\
420 guage\x20governing\x20permissions\x20and\n\x20limitations\x20under\x20th\
421 e\x20License.\n\n\x08\n\x01\x02\x12\x03\x10\0\x13\n\t\n\x02\x03\0\x12\
422 \x03\x12\0*\n\x08\n\x01\x08\x12\x03\x14\0X\n\t\n\x02\x08\x0b\x12\x03\x14\
423 \0X\n\x08\n\x01\x08\x12\x03\x15\0\"\n\t\n\x02\x08\n\x12\x03\x15\0\"\n\
424 \x08\n\x01\x08\x12\x03\x16\0-\n\t\n\x02\x08\x08\x12\x03\x16\0-\n\x08\n\
425 \x01\x08\x12\x03\x17\0'\n\t\n\x02\x08\x01\x12\x03\x17\0'\n\x08\n\x01\x08\
426 \x12\x03\x18\0\"\n\t\n\x02\x08$\x12\x03\x18\0\"\n\t\n\x01\x07\x12\x04\
427 \x1a\0\x1d\x01\n\x1d\n\x02\x07\0\x12\x03\x1c\x02,\x1a\x12\x20See\x20Rout\
428 ingRule.\n\n\n\n\x03\x07\0\x02\x12\x03\x1a\x07$\n\n\n\x03\x07\0\x06\x12\
429 \x03\x1c\x02\x18\n\n\n\x03\x07\0\x01\x12\x03\x1c\x19\x20\n\n\n\x03\x07\0\
430 \x03\x12\x03\x1c#+\n\xcbN\n\x02\x04\0\x12\x06\x86\x03\0\x8e\x03\x01\x1a\
431 \xbcN\x20Specifies\x20the\x20routing\x20information\x20that\x20should\
432 \x20be\x20sent\x20along\x20with\x20the\x20request\n\x20in\x20the\x20form\
433 \x20of\x20routing\x20header.\n\x20**NOTE:**\x20All\x20service\x20configu\
434 ration\x20rules\x20follow\x20the\x20\"last\x20one\x20wins\"\x20order.\n\
435 \n\x20The\x20examples\x20below\x20will\x20apply\x20to\x20an\x20RPC\x20wh\
436 ich\x20has\x20the\x20following\x20request\x20type:\n\n\x20Message\x20Def\
437 inition:\n\n\x20\x20\x20\x20\x20message\x20Request\x20{\n\x20\x20\x20\
438 \x20\x20\x20\x20//\x20The\x20name\x20of\x20the\x20Table\n\x20\x20\x20\
439 \x20\x20\x20\x20//\x20Values\x20can\x20be\x20of\x20the\x20following\x20f\
440 ormats:\n\x20\x20\x20\x20\x20\x20\x20//\x20-\x20`projects/<project>/tabl\
441 es/<table>`\n\x20\x20\x20\x20\x20\x20\x20//\x20-\x20`projects/<project>/\
442 instances/<instance>/tables/<table>`\n\x20\x20\x20\x20\x20\x20\x20//\x20\
443 -\x20`region/<region>/zones/<zone>/tables/<table>`\n\x20\x20\x20\x20\x20\
444 \x20\x20string\x20table_name\x20=\x201;\n\n\x20\x20\x20\x20\x20\x20\x20/\
445 /\x20This\x20value\x20specifies\x20routing\x20for\x20replication.\n\x20\
446 \x20\x20\x20\x20\x20\x20//\x20It\x20can\x20be\x20in\x20the\x20following\
447 \x20formats:\n\x20\x20\x20\x20\x20\x20\x20//\x20-\x20`profiles/<profile_\
448 id>`\n\x20\x20\x20\x20\x20\x20\x20//\x20-\x20a\x20legacy\x20`profile_id`\
449 \x20that\x20can\x20be\x20any\x20string\n\x20\x20\x20\x20\x20\x20\x20stri\
450 ng\x20app_profile_id\x20=\x202;\n\x20\x20\x20\x20\x20}\n\n\x20Example\
451 \x20message:\n\n\x20\x20\x20\x20\x20{\n\x20\x20\x20\x20\x20\x20\x20table\
452 _name:\x20projects/proj_foo/instances/instance_bar/table/table_baz,\n\
453 \x20\x20\x20\x20\x20\x20\x20app_profile_id:\x20profiles/prof_qux\n\x20\
454 \x20\x20\x20\x20}\n\n\x20The\x20routing\x20header\x20consists\x20of\x20o\
455 ne\x20or\x20multiple\x20key-value\x20pairs.\x20Every\x20key\n\x20and\x20\
456 value\x20must\x20be\x20percent-encoded,\x20and\x20joined\x20together\x20\
457 in\x20the\x20format\x20of\n\x20`key1=value1&key2=value2`.\n\x20In\x20the\
458 \x20examples\x20below\x20I\x20am\x20skipping\x20the\x20percent-encoding\
459 \x20for\x20readablity.\n\n\x20Example\x201\n\n\x20Extracting\x20a\x20fie\
460 ld\x20from\x20the\x20request\x20to\x20put\x20into\x20the\x20routing\x20h\
461 eader\n\x20unchanged,\x20with\x20the\x20key\x20equal\x20to\x20the\x20fie\
462 ld\x20name.\n\n\x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(google.\
463 api.routing)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20Take\x20the\
464 \x20`app_profile_id`.\n\x20\x20\x20\x20\x20\x20\x20routing_parameters\
465 \x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"app_profile_id\"\
466 \n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result:\n\
467 \n\x20\x20\x20\x20\x20x-goog-request-params:\x20app_profile_id=profiles/\
468 prof_qux\n\n\x20Example\x202\n\n\x20Extracting\x20a\x20field\x20from\x20\
469 the\x20request\x20to\x20put\x20into\x20the\x20routing\x20header\n\x20unc\
470 hanged,\x20with\x20the\x20key\x20different\x20from\x20the\x20field\x20na\
471 me.\n\n\x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(google.api.rout\
472 ing)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20Take\x20the\x20`app_pr\
473 ofile_id`,\x20but\x20name\x20it\x20`routing_id`\x20in\x20the\x20header.\
474 \n\x20\x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\
475 \x20\x20\x20\x20\x20field:\x20\"app_profile_id\"\n\x20\x20\x20\x20\x20\
476 \x20\x20\x20\x20path_template:\x20\"{routing_id=**}\"\n\x20\x20\x20\x20\
477 \x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result:\n\n\x20\x20\x20\x20\
478 \x20x-goog-request-params:\x20routing_id=profiles/prof_qux\n\n\x20Exampl\
479 e\x203\n\n\x20Extracting\x20a\x20field\x20from\x20the\x20request\x20to\
480 \x20put\x20into\x20the\x20routing\n\x20header,\x20while\x20matching\x20a\
481 \x20path\x20template\x20syntax\x20on\x20the\x20field's\x20value.\n\n\x20\
482 NB:\x20it\x20is\x20more\x20useful\x20to\x20send\x20nothing\x20than\x20to\
483 \x20send\x20garbage\x20for\x20the\x20purpose\n\x20of\x20dynamic\x20routi\
484 ng,\x20since\x20garbage\x20pollutes\x20cache.\x20Thus\x20the\x20matching\
485 .\n\n\x20Sub-example\x203a\n\n\x20The\x20field\x20matches\x20the\x20temp\
486 late.\n\n\x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(google.api.ro\
487 uting)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20Take\x20the\x20`tabl\
488 e_name`,\x20if\x20it's\x20well-formed\x20(with\x20project-based\n\x20\
489 \x20\x20\x20\x20\x20\x20//\x20syntax).\n\x20\x20\x20\x20\x20\x20\x20rout\
490 ing_parameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"tab\
491 le_name\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{tabl\
492 e_name=projects/*/instances/*/**}\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\
493 \x20\x20\x20\x20};\n\n\x20result:\n\n\x20\x20\x20\x20\x20x-goog-request-\
494 params:\n\x20\x20\x20\x20\x20table_name=projects/proj_foo/instances/inst\
495 ance_bar/table/table_baz\n\n\x20Sub-example\x203b\n\n\x20The\x20field\
496 \x20does\x20not\x20match\x20the\x20template.\n\n\x20annotation:\n\n\x20\
497 \x20\x20\x20\x20option\x20(google.api.routing)\x20=\x20{\n\x20\x20\x20\
498 \x20\x20\x20\x20//\x20Take\x20the\x20`table_name`,\x20if\x20it's\x20well\
499 -formed\x20(with\x20region-based\n\x20\x20\x20\x20\x20\x20\x20//\x20synt\
500 ax).\n\x20\x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\
501 \x20\x20\x20\x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\
502 \x20\x20\x20\x20path_template:\x20\"{table_name=regions/*/zones/*/**}\"\
503 \n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result:\n\
504 \n\x20\x20\x20\x20\x20<no\x20routing\x20header\x20will\x20be\x20sent>\n\
505 \n\x20Sub-example\x203c\n\n\x20Multiple\x20alternative\x20conflictingly\
506 \x20named\x20path\x20templates\x20are\n\x20specified.\x20The\x20one\x20t\
507 hat\x20matches\x20is\x20used\x20to\x20construct\x20the\x20header.\n\n\
508 \x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(google.api.routing)\
509 \x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20Take\x20the\x20`table_name\
510 `,\x20if\x20it's\x20well-formed,\x20whether\n\x20\x20\x20\x20\x20\x20\
511 \x20//\x20using\x20the\x20region-\x20or\x20projects-based\x20syntax.\n\n\
512 \x20\x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\
513 \x20\x20\x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\
514 \x20\x20\x20path_template:\x20\"{table_name=regions/*/zones/*/**}\"\n\
515 \x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20routing_param\
516 eters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"table_name\"\
517 \n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{table_name=pr\
518 ojects/*/instances/*/**}\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\
519 \x20\x20};\n\n\x20result:\n\n\x20\x20\x20\x20\x20x-goog-request-params:\
520 \n\x20\x20\x20\x20\x20table_name=projects/proj_foo/instances/instance_ba\
521 r/table/table_baz\n\n\x20Example\x204\n\n\x20Extracting\x20a\x20single\
522 \x20routing\x20header\x20key-value\x20pair\x20by\x20matching\x20a\n\x20t\
523 emplate\x20syntax\x20on\x20(a\x20part\x20of)\x20a\x20single\x20request\
524 \x20field.\n\n\x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(google.a\
525 pi.routing)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20Take\x20just\
526 \x20the\x20project\x20id\x20from\x20the\x20`table_name`\x20field.\n\x20\
527 \x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\x20\
528 \x20\x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\x20\
529 \x20\x20path_template:\x20\"{routing_id=projects/*}/**\"\n\x20\x20\x20\
530 \x20\x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result:\n\n\x20\x20\x20\
531 \x20\x20x-goog-request-params:\x20routing_id=projects/proj_foo\n\n\x20Ex\
532 ample\x205\n\n\x20Extracting\x20a\x20single\x20routing\x20header\x20key-\
533 value\x20pair\x20by\x20matching\n\x20several\x20conflictingly\x20named\
534 \x20path\x20templates\x20on\x20(parts\x20of)\x20a\x20single\x20request\n\
535 \x20field.\x20The\x20last\x20template\x20to\x20match\x20\"wins\"\x20the\
536 \x20conflict.\n\n\x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(googl\
537 e.api.routing)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20If\x20the\
538 \x20`table_name`\x20does\x20not\x20have\x20instances\x20information,\n\
539 \x20\x20\x20\x20\x20\x20\x20//\x20take\x20just\x20the\x20project\x20id\
540 \x20for\x20routing.\n\x20\x20\x20\x20\x20\x20\x20//\x20Otherwise\x20take\
541 \x20project\x20+\x20instance.\n\n\x20\x20\x20\x20\x20\x20\x20routing_par\
542 ameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"table_name\
543 \"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{routing_id=\
544 projects/*}/**\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\
545 \x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20fie\
546 ld:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template\
547 :\x20\"{routing_id=projects/*/instances/*}/**\"\n\x20\x20\x20\x20\x20\
548 \x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result:\n\n\x20\x20\x20\x20\x20\
549 x-goog-request-params:\n\x20\x20\x20\x20\x20routing_id=projects/proj_foo\
550 /instances/instance_bar\n\n\x20Example\x206\n\n\x20Extracting\x20multipl\
551 e\x20routing\x20header\x20key-value\x20pairs\x20by\x20matching\n\x20seve\
552 ral\x20non-conflicting\x20path\x20templates\x20on\x20(parts\x20of)\x20a\
553 \x20single\x20request\x20field.\n\n\x20Sub-example\x206a\n\n\x20Make\x20\
554 the\x20templates\x20strict,\x20so\x20that\x20if\x20the\x20`table_name`\
555 \x20does\x20not\n\x20have\x20an\x20instance\x20information,\x20nothing\
556 \x20is\x20sent.\n\n\x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(goo\
557 gle.api.routing)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20The\x20rou\
558 ting\x20code\x20needs\x20two\x20keys\x20instead\x20of\x20one\x20composit\
559 e\n\x20\x20\x20\x20\x20\x20\x20//\x20but\x20works\x20only\x20for\x20the\
560 \x20tables\x20with\x20the\x20\"project-instance\"\x20name\n\x20\x20\x20\
561 \x20\x20\x20\x20//\x20syntax.\n\n\x20\x20\x20\x20\x20\x20\x20routing_par\
562 ameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"table_name\
563 \"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{project_id=\
564 projects/*}/instances/*/**\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\
565 \x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\x20\x20\
566 \x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\x20\x20\
567 \x20path_template:\x20\"projects/*/{instance_id=instances/*}/**\"\n\x20\
568 \x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result:\n\n\x20\
569 \x20\x20\x20\x20x-goog-request-params:\n\x20\x20\x20\x20\x20project_id=p\
570 rojects/proj_foo&instance_id=instances/instance_bar\n\n\x20Sub-example\
571 \x206b\n\n\x20Make\x20the\x20templates\x20loose,\x20so\x20that\x20if\x20\
572 the\x20`table_name`\x20does\x20not\n\x20have\x20an\x20instance\x20inform\
573 ation,\x20just\x20the\x20project\x20id\x20part\x20is\x20sent.\n\n\x20ann\
574 otation:\n\n\x20\x20\x20\x20\x20option\x20(google.api.routing)\x20=\x20{\
575 \n\x20\x20\x20\x20\x20\x20\x20//\x20The\x20routing\x20code\x20wants\x20t\
576 wo\x20keys\x20instead\x20of\x20one\x20composite\n\x20\x20\x20\x20\x20\
577 \x20\x20//\x20but\x20will\x20work\x20with\x20just\x20the\x20`project_id`\
578 \x20for\x20tables\x20without\n\x20\x20\x20\x20\x20\x20\x20//\x20an\x20in\
579 stance\x20in\x20the\x20`table_name`.\n\n\x20\x20\x20\x20\x20\x20\x20rout\
580 ing_parameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"tab\
581 le_name\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{proj\
582 ect_id=projects/*}/**\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\
583 \x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\
584 \x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_t\
585 emplate:\x20\"projects/*/{instance_id=instances/*}/**\"\n\x20\x20\x20\
586 \x20\x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result\x20(is\x20the\
587 \x20same\x20as\x206a\x20for\x20our\x20example\x20message\x20because\x20i\
588 t\x20has\x20the\x20instance\n\x20information):\n\n\x20\x20\x20\x20\x20x-\
589 goog-request-params:\n\x20\x20\x20\x20\x20project_id=projects/proj_foo&i\
590 nstance_id=instances/instance_bar\n\n\x20Example\x207\n\n\x20Extracting\
591 \x20multiple\x20routing\x20header\x20key-value\x20pairs\x20by\x20matchin\
592 g\n\x20several\x20path\x20templates\x20on\x20multiple\x20request\x20fiel\
593 ds.\n\n\x20NB:\x20note\x20that\x20here\x20there\x20is\x20no\x20way\x20to\
594 \x20specify\x20sending\x20nothing\x20if\x20one\x20of\x20the\n\x20fields\
595 \x20does\x20not\x20match\x20its\x20template.\x20E.g.\x20if\x20the\x20`ta\
596 ble_name`\x20is\x20in\x20the\x20wrong\n\x20format,\x20the\x20`project_id\
597 `\x20will\x20not\x20be\x20sent,\x20but\x20the\x20`routing_id`\x20will\
598 \x20be.\n\x20The\x20backend\x20routing\x20code\x20has\x20to\x20be\x20awa\
599 re\x20of\x20that\x20and\x20be\x20prepared\x20to\x20not\n\x20receive\x20a\
600 \x20full\x20complement\x20of\x20keys\x20if\x20it\x20expects\x20multiple.\
601 \n\n\x20annotation:\n\n\x20\x20\x20\x20\x20option\x20(google.api.routing\
602 )\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20//\x20The\x20routing\x20needs\
603 \x20both\x20`project_id`\x20and\x20`routing_id`\n\x20\x20\x20\x20\x20\
604 \x20\x20//\x20(from\x20the\x20`app_profile_id`\x20field)\x20for\x20routi\
605 ng.\n\n\x20\x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\
606 \x20\x20\x20\x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\
607 \x20\x20\x20\x20path_template:\x20\"{project_id=projects/*}/**\"\n\x20\
608 \x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20routing_parameter\
609 s\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"app_profile_id\"\
610 \n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{routing_id=**\
611 }\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result\
612 :\n\n\x20\x20\x20\x20\x20x-goog-request-params:\n\x20\x20\x20\x20\x20pro\
613 ject_id=projects/proj_foo&routing_id=profiles/prof_qux\n\n\x20Example\
614 \x208\n\n\x20Extracting\x20a\x20single\x20routing\x20header\x20key-value\
615 \x20pair\x20by\x20matching\n\x20several\x20conflictingly\x20named\x20pat\
616 h\x20templates\x20on\x20several\x20request\x20fields.\x20The\n\x20last\
617 \x20template\x20to\x20match\x20\"wins\"\x20the\x20conflict.\n\n\x20annot\
618 ation:\n\n\x20\x20\x20\x20\x20option\x20(google.api.routing)\x20=\x20{\n\
619 \x20\x20\x20\x20\x20\x20\x20//\x20The\x20`routing_id`\x20can\x20be\x20a\
620 \x20project\x20id\x20or\x20a\x20region\x20id\x20depending\x20on\n\x20\
621 \x20\x20\x20\x20\x20\x20//\x20the\x20table\x20name\x20format,\x20but\x20\
622 only\x20if\x20the\x20`app_profile_id`\x20is\x20not\x20set.\n\x20\x20\x20\
623 \x20\x20\x20\x20//\x20If\x20`app_profile_id`\x20is\x20set\x20it\x20shoul\
624 d\x20be\x20used\x20instead.\n\n\x20\x20\x20\x20\x20\x20\x20routing_param\
625 eters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"table_name\"\
626 \n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{routing_id=pr\
627 ojects/*}/**\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\
628 \x20routing_parameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fie\
629 ld:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20path_temp\
630 late:\x20\"{routing_id=regions/*}/**\"\n\x20\x20\x20\x20\x20\x20\x20}\n\
631 \x20\x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\
632 \x20\x20\x20\x20\x20field:\x20\"app_profile_id\"\n\x20\x20\x20\x20\x20\
633 \x20\x20\x20\x20path_template:\x20\"{routing_id=**}\"\n\x20\x20\x20\x20\
634 \x20\x20\x20}\n\x20\x20\x20\x20\x20};\n\n\x20result:\n\n\x20\x20\x20\x20\
635 \x20x-goog-request-params:\x20routing_id=profiles/prof_qux\n\n\x20Exampl\
636 e\x209\n\n\x20Bringing\x20it\x20all\x20together.\n\n\x20annotation:\n\n\
637 \x20\x20\x20\x20\x20option\x20(google.api.routing)\x20=\x20{\n\x20\x20\
638 \x20\x20\x20\x20\x20//\x20For\x20routing\x20both\x20`table_location`\x20\
639 and\x20a\x20`routing_id`\x20are\x20needed.\n\x20\x20\x20\x20\x20\x20\x20\
640 //\n\x20\x20\x20\x20\x20\x20\x20//\x20table_location\x20can\x20be\x20eit\
641 her\x20an\x20instance\x20id\x20or\x20a\x20region+zone\x20id.\n\x20\x20\
642 \x20\x20\x20\x20\x20//\n\x20\x20\x20\x20\x20\x20\x20//\x20For\x20`routin\
643 g_id`,\x20take\x20the\x20value\x20of\x20`app_profile_id`\n\x20\x20\x20\
644 \x20\x20\x20\x20//\x20-\x20If\x20it's\x20in\x20the\x20format\x20`profile\
645 s/<profile_id>`,\x20send\n\x20\x20\x20\x20\x20\x20\x20//\x20just\x20the\
646 \x20`<profile_id>`\x20part.\n\x20\x20\x20\x20\x20\x20\x20//\x20-\x20If\
647 \x20it's\x20any\x20other\x20literal,\x20send\x20it\x20as\x20is.\n\x20\
648 \x20\x20\x20\x20\x20\x20//\x20If\x20the\x20`app_profile_id`\x20is\x20emp\
649 ty,\x20and\x20the\x20`table_name`\x20starts\x20with\n\x20\x20\x20\x20\
650 \x20\x20\x20//\x20the\x20project_id,\x20send\x20that\x20instead.\n\n\x20\
651 \x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\x20\
652 \x20\x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\x20\
653 \x20\x20path_template:\x20\"projects/*/{table_location=instances/*}/tabl\
654 es/*\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20routi\
655 ng_parameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"tabl\
656 e_name\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{table\
657 _location=regions/*/zones/*}/tables/*\"\n\x20\x20\x20\x20\x20\x20\x20}\n\
658 \x20\x20\x20\x20\x20\x20\x20routing_parameters\x20{\n\x20\x20\x20\x20\
659 \x20\x20\x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20\x20\
660 \x20\x20\x20path_template:\x20\"{routing_id=projects/*}/**\"\n\x20\x20\
661 \x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20routing_parameters\
662 \x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"app_profile_id\"\
663 \n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{routing_id=**\
664 }\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20routing_\
665 parameters\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20field:\x20\"app_pro\
666 file_id\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"profi\
667 les/{routing_id=*}\"\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\
668 \x20};\n\n\x20result:\n\n\x20\x20\x20\x20\x20x-goog-request-params:\n\
669 \x20\x20\x20\x20\x20table_location=instances/instance_bar&routing_id=pro\
670 f_qux\n\n\x0b\n\x03\x04\0\x01\x12\x04\x86\x03\x08\x13\n\xc3\x02\n\x04\
671 \x04\0\x02\0\x12\x04\x8d\x03\x023\x1a\xb4\x02\x20A\x20collection\x20of\
672 \x20Routing\x20Parameter\x20specifications.\n\x20**NOTE:**\x20If\x20mult\
673 iple\x20Routing\x20Parameters\x20describe\x20the\x20same\x20key\n\x20(vi\
674 a\x20the\x20`path_template`\x20field\x20or\x20via\x20the\x20`field`\x20f\
675 ield\x20when\n\x20`path_template`\x20is\x20not\x20provided),\x20\"last\
676 \x20one\x20wins\"\x20rule\n\x20determines\x20which\x20Parameter\x20gets\
677 \x20used.\n\x20See\x20the\x20examples\x20for\x20more\x20details.\n\n\r\n\
678 \x05\x04\0\x02\0\x04\x12\x04\x8d\x03\x02\n\n\r\n\x05\x04\0\x02\0\x06\x12\
679 \x04\x8d\x03\x0b\x1b\n\r\n\x05\x04\0\x02\0\x01\x12\x04\x8d\x03\x1c.\n\r\
680 \n\x05\x04\0\x02\0\x03\x12\x04\x8d\x0312\nN\n\x02\x04\x01\x12\x06\x91\
681 \x03\0\xcc\x03\x01\x1a@\x20A\x20projection\x20from\x20an\x20input\x20mes\
682 sage\x20to\x20the\x20GRPC\x20or\x20REST\x20header.\n\n\x0b\n\x03\x04\x01\
683 \x01\x12\x04\x91\x03\x08\x18\nJ\n\x04\x04\x01\x02\0\x12\x04\x93\x03\x02\
684 \x13\x1a<\x20A\x20request\x20field\x20to\x20extract\x20the\x20header\x20\
685 key-value\x20pair\x20from.\n\n\r\n\x05\x04\x01\x02\0\x05\x12\x04\x93\x03\
686 \x02\x08\n\r\n\x05\x04\x01\x02\0\x01\x12\x04\x93\x03\t\x0e\n\r\n\x05\x04\
687 \x01\x02\0\x03\x12\x04\x93\x03\x11\x12\n\x91\x12\n\x04\x04\x01\x02\x01\
688 \x12\x04\xcb\x03\x02\x1b\x1a\x82\x12\x20A\x20pattern\x20matching\x20the\
689 \x20key-value\x20field.\x20Optional.\n\x20If\x20not\x20specified,\x20the\
690 \x20whole\x20field\x20specified\x20in\x20the\x20`field`\x20field\x20will\
691 \x20be\n\x20taken\x20as\x20value,\x20and\x20its\x20name\x20used\x20as\
692 \x20key.\x20If\x20specified,\x20it\x20MUST\x20contain\n\x20exactly\x20on\
693 e\x20named\x20segment\x20(along\x20with\x20any\x20number\x20of\x20unname\
694 d\x20segments)\x20The\n\x20pattern\x20will\x20be\x20matched\x20over\x20t\
695 he\x20field\x20specified\x20in\x20the\x20`field`\x20field,\x20then\n\x20\
696 if\x20the\x20match\x20is\x20successful:\n\x20-\x20the\x20name\x20of\x20t\
697 he\x20single\x20named\x20segment\x20will\x20be\x20used\x20as\x20a\x20hea\
698 der\x20name,\n\x20-\x20the\x20match\x20value\x20of\x20the\x20segment\x20\
699 will\x20be\x20used\x20as\x20a\x20header\x20value;\n\x20if\x20the\x20matc\
700 h\x20is\x20NOT\x20successful,\x20nothing\x20will\x20be\x20sent.\n\n\x20E\
701 xample:\n\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\
702 -\x20This\x20is\x20a\x20field\x20in\x20the\x20request\x20message\n\x20\
703 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\x20\x20\x20that\
704 \x20the\x20header\x20value\x20will\x20be\x20extracted\x20from.\n\x20\x20\
705 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20\
706 \x20\x20\x20\x20\x20\x20\x20\x20\x20|\x20\x20\x20\x20\x20\x20\x20\x20\
707 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20--\x20This\x20is\x20\
708 the\x20key\x20name\x20in\x20the\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\
709 \x20\x20\x20\x20\x20|\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
710 \x20\x20\x20\x20\x20\x20\x20\x20|\x20\x20\x20routing\x20header.\n\x20\
711 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20V\x20\x20\x20\x20\
712 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20\
713 \x20\x20\x20\x20field:\x20\"table_name\"\x20\x20\x20\x20\x20\x20\x20\x20\
714 \x20\x20\x20v\n\x20\x20\x20\x20\x20path_template:\x20\"projects/*/{table\
715 _location=instances/*}/tables/*\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\
716 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
717 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
718 \x20\x20\x20^\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20^\n\x20\x20\
719 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
720 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
721 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\x20\x20\x20\x20\x20\x20\x20\
722 \x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20\x20\x20In\x20the\x20{}\x20br\
723 ackets\x20is\x20the\x20pattern\x20that\x20--\x20\x20\x20\x20\x20\x20\x20\
724 \x20\x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20\x20\x20specifies\x20what\
725 \x20to\x20extract\x20from\x20the\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
726 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20\x20\x20f\
727 ield\x20as\x20a\x20value\x20to\x20be\x20sent.\x20\x20\x20\x20\x20\x20\
728 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
729 \x20\x20|\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
730 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
731 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
732 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20|\n\x20\x20\x20\x20\x20\x20The\
733 \x20string\x20in\x20the\x20field\x20must\x20match\x20the\x20whole\x20pat\
734 tern\x20--\n\x20\x20\x20\x20\x20\x20before\x20brackets,\x20inside\x20bra\
735 ckets,\x20after\x20brackets.\n\n\x20When\x20looking\x20at\x20this\x20spe\
736 cific\x20example,\x20we\x20can\x20see\x20that:\n\x20-\x20A\x20key-value\
737 \x20pair\x20with\x20the\x20key\x20`table_location`\n\x20\x20\x20and\x20t\
738 he\x20value\x20matching\x20`instances/*`\x20should\x20be\x20added\n\x20\
739 \x20\x20to\x20the\x20x-goog-request-params\x20routing\x20header.\n\x20-\
740 \x20The\x20value\x20is\x20extracted\x20from\x20the\x20request\x20message\
741 's\x20`table_name`\x20field\n\x20\x20\x20if\x20it\x20matches\x20the\x20f\
742 ull\x20pattern\x20specified:\n\x20\x20\x20`projects/*/instances/*/tables\
743 /*`.\n\n\x20**NB:**\x20If\x20the\x20`path_template`\x20field\x20is\x20no\
744 t\x20provided,\x20the\x20key\x20name\x20is\n\x20equal\x20to\x20the\x20fi\
745 eld\x20name,\x20and\x20the\x20whole\x20field\x20should\x20be\x20sent\x20\
746 as\x20a\x20value.\n\x20This\x20makes\x20the\x20pattern\x20for\x20the\x20\
747 field\x20and\x20the\x20value\x20functionally\x20equivalent\n\x20to\x20`*\
748 *`,\x20and\x20the\x20configuration\n\n\x20\x20\x20\x20\x20{\n\x20\x20\
749 \x20\x20\x20\x20\x20field:\x20\"table_name\"\n\x20\x20\x20\x20\x20}\n\n\
750 \x20is\x20a\x20functionally\x20equivalent\x20shorthand\x20to:\n\n\x20\
751 \x20\x20\x20\x20{\n\x20\x20\x20\x20\x20\x20\x20field:\x20\"table_name\"\
752 \n\x20\x20\x20\x20\x20\x20\x20path_template:\x20\"{table_name=**}\"\n\
753 \x20\x20\x20\x20\x20}\n\n\x20See\x20Example\x201\x20for\x20more\x20detai\
754 ls.\n\n\r\n\x05\x04\x01\x02\x01\x05\x12\x04\xcb\x03\x02\x08\n\r\n\x05\
755 \x04\x01\x02\x01\x01\x12\x04\xcb\x03\t\x16\n\r\n\x05\x04\x01\x02\x01\x03\
756 \x12\x04\xcb\x03\x19\x1ab\x06proto3\
757";
758
759static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
760
761fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
762 ::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
763}
764
765pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
766 file_descriptor_proto_lazy.get(|| {
767 parse_descriptor_proto()
768 })
769}