1#![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 Http {
28 pub rules: ::protobuf::RepeatedField<HttpRule>,
30 pub fully_decode_reserved_expansion: bool,
31 pub unknown_fields: ::protobuf::UnknownFields,
33 pub cached_size: ::protobuf::CachedSize,
34}
35
36impl<'a> ::std::default::Default for &'a Http {
37 fn default() -> &'a Http {
38 <Http as ::protobuf::Message>::default_instance()
39 }
40}
41
42impl Http {
43 pub fn new() -> Http {
44 ::std::default::Default::default()
45 }
46
47 pub fn get_rules(&self) -> &[HttpRule] {
51 &self.rules
52 }
53 pub fn clear_rules(&mut self) {
54 self.rules.clear();
55 }
56
57 pub fn set_rules(&mut self, v: ::protobuf::RepeatedField<HttpRule>) {
59 self.rules = v;
60 }
61
62 pub fn mut_rules(&mut self) -> &mut ::protobuf::RepeatedField<HttpRule> {
64 &mut self.rules
65 }
66
67 pub fn take_rules(&mut self) -> ::protobuf::RepeatedField<HttpRule> {
69 ::std::mem::replace(&mut self.rules, ::protobuf::RepeatedField::new())
70 }
71
72 pub fn get_fully_decode_reserved_expansion(&self) -> bool {
76 self.fully_decode_reserved_expansion
77 }
78 pub fn clear_fully_decode_reserved_expansion(&mut self) {
79 self.fully_decode_reserved_expansion = false;
80 }
81
82 pub fn set_fully_decode_reserved_expansion(&mut self, v: bool) {
84 self.fully_decode_reserved_expansion = v;
85 }
86}
87
88impl ::protobuf::Message for Http {
89 fn is_initialized(&self) -> bool {
90 for v in &self.rules {
91 if !v.is_initialized() {
92 return false;
93 }
94 };
95 true
96 }
97
98 fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
99 while !is.eof()? {
100 let (field_number, wire_type) = is.read_tag_unpack()?;
101 match field_number {
102 1 => {
103 ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.rules)?;
104 },
105 2 => {
106 if wire_type != ::protobuf::wire_format::WireTypeVarint {
107 return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
108 }
109 let tmp = is.read_bool()?;
110 self.fully_decode_reserved_expansion = tmp;
111 },
112 _ => {
113 ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
114 },
115 };
116 }
117 ::std::result::Result::Ok(())
118 }
119
120 #[allow(unused_variables)]
122 fn compute_size(&self) -> u32 {
123 let mut my_size = 0;
124 for value in &self.rules {
125 let len = value.compute_size();
126 my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
127 };
128 if self.fully_decode_reserved_expansion != false {
129 my_size += 2;
130 }
131 my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
132 self.cached_size.set(my_size);
133 my_size
134 }
135
136 fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
137 for v in &self.rules {
138 os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
139 os.write_raw_varint32(v.get_cached_size())?;
140 v.write_to_with_cached_sizes(os)?;
141 };
142 if self.fully_decode_reserved_expansion != false {
143 os.write_bool(2, self.fully_decode_reserved_expansion)?;
144 }
145 os.write_unknown_fields(self.get_unknown_fields())?;
146 ::std::result::Result::Ok(())
147 }
148
149 fn get_cached_size(&self) -> u32 {
150 self.cached_size.get()
151 }
152
153 fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
154 &self.unknown_fields
155 }
156
157 fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
158 &mut self.unknown_fields
159 }
160
161 fn as_any(&self) -> &dyn (::std::any::Any) {
162 self as &dyn (::std::any::Any)
163 }
164 fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
165 self as &mut dyn (::std::any::Any)
166 }
167 fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
168 self
169 }
170
171 fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
172 Self::descriptor_static()
173 }
174
175 fn new() -> Http {
176 Http::new()
177 }
178
179 fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
180 static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
181 descriptor.get(|| {
182 let mut fields = ::std::vec::Vec::new();
183 fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<HttpRule>>(
184 "rules",
185 |m: &Http| { &m.rules },
186 |m: &mut Http| { &mut m.rules },
187 ));
188 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeBool>(
189 "fully_decode_reserved_expansion",
190 |m: &Http| { &m.fully_decode_reserved_expansion },
191 |m: &mut Http| { &mut m.fully_decode_reserved_expansion },
192 ));
193 ::protobuf::reflect::MessageDescriptor::new_pb_name::<Http>(
194 "Http",
195 fields,
196 file_descriptor_proto()
197 )
198 })
199 }
200
201 fn default_instance() -> &'static Http {
202 static instance: ::protobuf::rt::LazyV2<Http> = ::protobuf::rt::LazyV2::INIT;
203 instance.get(Http::new)
204 }
205}
206
207impl ::protobuf::Clear for Http {
208 fn clear(&mut self) {
209 self.rules.clear();
210 self.fully_decode_reserved_expansion = false;
211 self.unknown_fields.clear();
212 }
213}
214
215impl ::std::fmt::Debug for Http {
216 fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
217 ::protobuf::text_format::fmt(self, f)
218 }
219}
220
221impl ::protobuf::reflect::ProtobufValue for Http {
222 fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
223 ::protobuf::reflect::ReflectValueRef::Message(self)
224 }
225}
226
227#[derive(PartialEq,Clone,Default)]
228pub struct HttpRule {
229 pub selector: ::std::string::String,
231 pub body: ::std::string::String,
232 pub response_body: ::std::string::String,
233 pub additional_bindings: ::protobuf::RepeatedField<HttpRule>,
234 pub pattern: ::std::option::Option<HttpRule_oneof_pattern>,
236 pub unknown_fields: ::protobuf::UnknownFields,
238 pub cached_size: ::protobuf::CachedSize,
239}
240
241impl<'a> ::std::default::Default for &'a HttpRule {
242 fn default() -> &'a HttpRule {
243 <HttpRule as ::protobuf::Message>::default_instance()
244 }
245}
246
247#[derive(Clone,PartialEq,Debug)]
248pub enum HttpRule_oneof_pattern {
249 get(::std::string::String),
250 put(::std::string::String),
251 post(::std::string::String),
252 delete(::std::string::String),
253 patch(::std::string::String),
254 custom(CustomHttpPattern),
255}
256
257impl HttpRule {
258 pub fn new() -> HttpRule {
259 ::std::default::Default::default()
260 }
261
262 pub fn get_selector(&self) -> &str {
266 &self.selector
267 }
268 pub fn clear_selector(&mut self) {
269 self.selector.clear();
270 }
271
272 pub fn set_selector(&mut self, v: ::std::string::String) {
274 self.selector = v;
275 }
276
277 pub fn mut_selector(&mut self) -> &mut ::std::string::String {
280 &mut self.selector
281 }
282
283 pub fn take_selector(&mut self) -> ::std::string::String {
285 ::std::mem::replace(&mut self.selector, ::std::string::String::new())
286 }
287
288 pub fn get_get(&self) -> &str {
292 match self.pattern {
293 ::std::option::Option::Some(HttpRule_oneof_pattern::get(ref v)) => v,
294 _ => "",
295 }
296 }
297 pub fn clear_get(&mut self) {
298 self.pattern = ::std::option::Option::None;
299 }
300
301 pub fn has_get(&self) -> bool {
302 match self.pattern {
303 ::std::option::Option::Some(HttpRule_oneof_pattern::get(..)) => true,
304 _ => false,
305 }
306 }
307
308 pub fn set_get(&mut self, v: ::std::string::String) {
310 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::get(v))
311 }
312
313 pub fn mut_get(&mut self) -> &mut ::std::string::String {
315 if let ::std::option::Option::Some(HttpRule_oneof_pattern::get(_)) = self.pattern {
316 } else {
317 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::get(::std::string::String::new()));
318 }
319 match self.pattern {
320 ::std::option::Option::Some(HttpRule_oneof_pattern::get(ref mut v)) => v,
321 _ => panic!(),
322 }
323 }
324
325 pub fn take_get(&mut self) -> ::std::string::String {
327 if self.has_get() {
328 match self.pattern.take() {
329 ::std::option::Option::Some(HttpRule_oneof_pattern::get(v)) => v,
330 _ => panic!(),
331 }
332 } else {
333 ::std::string::String::new()
334 }
335 }
336
337 pub fn get_put(&self) -> &str {
341 match self.pattern {
342 ::std::option::Option::Some(HttpRule_oneof_pattern::put(ref v)) => v,
343 _ => "",
344 }
345 }
346 pub fn clear_put(&mut self) {
347 self.pattern = ::std::option::Option::None;
348 }
349
350 pub fn has_put(&self) -> bool {
351 match self.pattern {
352 ::std::option::Option::Some(HttpRule_oneof_pattern::put(..)) => true,
353 _ => false,
354 }
355 }
356
357 pub fn set_put(&mut self, v: ::std::string::String) {
359 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::put(v))
360 }
361
362 pub fn mut_put(&mut self) -> &mut ::std::string::String {
364 if let ::std::option::Option::Some(HttpRule_oneof_pattern::put(_)) = self.pattern {
365 } else {
366 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::put(::std::string::String::new()));
367 }
368 match self.pattern {
369 ::std::option::Option::Some(HttpRule_oneof_pattern::put(ref mut v)) => v,
370 _ => panic!(),
371 }
372 }
373
374 pub fn take_put(&mut self) -> ::std::string::String {
376 if self.has_put() {
377 match self.pattern.take() {
378 ::std::option::Option::Some(HttpRule_oneof_pattern::put(v)) => v,
379 _ => panic!(),
380 }
381 } else {
382 ::std::string::String::new()
383 }
384 }
385
386 pub fn get_post(&self) -> &str {
390 match self.pattern {
391 ::std::option::Option::Some(HttpRule_oneof_pattern::post(ref v)) => v,
392 _ => "",
393 }
394 }
395 pub fn clear_post(&mut self) {
396 self.pattern = ::std::option::Option::None;
397 }
398
399 pub fn has_post(&self) -> bool {
400 match self.pattern {
401 ::std::option::Option::Some(HttpRule_oneof_pattern::post(..)) => true,
402 _ => false,
403 }
404 }
405
406 pub fn set_post(&mut self, v: ::std::string::String) {
408 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::post(v))
409 }
410
411 pub fn mut_post(&mut self) -> &mut ::std::string::String {
413 if let ::std::option::Option::Some(HttpRule_oneof_pattern::post(_)) = self.pattern {
414 } else {
415 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::post(::std::string::String::new()));
416 }
417 match self.pattern {
418 ::std::option::Option::Some(HttpRule_oneof_pattern::post(ref mut v)) => v,
419 _ => panic!(),
420 }
421 }
422
423 pub fn take_post(&mut self) -> ::std::string::String {
425 if self.has_post() {
426 match self.pattern.take() {
427 ::std::option::Option::Some(HttpRule_oneof_pattern::post(v)) => v,
428 _ => panic!(),
429 }
430 } else {
431 ::std::string::String::new()
432 }
433 }
434
435 pub fn get_delete(&self) -> &str {
439 match self.pattern {
440 ::std::option::Option::Some(HttpRule_oneof_pattern::delete(ref v)) => v,
441 _ => "",
442 }
443 }
444 pub fn clear_delete(&mut self) {
445 self.pattern = ::std::option::Option::None;
446 }
447
448 pub fn has_delete(&self) -> bool {
449 match self.pattern {
450 ::std::option::Option::Some(HttpRule_oneof_pattern::delete(..)) => true,
451 _ => false,
452 }
453 }
454
455 pub fn set_delete(&mut self, v: ::std::string::String) {
457 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::delete(v))
458 }
459
460 pub fn mut_delete(&mut self) -> &mut ::std::string::String {
462 if let ::std::option::Option::Some(HttpRule_oneof_pattern::delete(_)) = self.pattern {
463 } else {
464 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::delete(::std::string::String::new()));
465 }
466 match self.pattern {
467 ::std::option::Option::Some(HttpRule_oneof_pattern::delete(ref mut v)) => v,
468 _ => panic!(),
469 }
470 }
471
472 pub fn take_delete(&mut self) -> ::std::string::String {
474 if self.has_delete() {
475 match self.pattern.take() {
476 ::std::option::Option::Some(HttpRule_oneof_pattern::delete(v)) => v,
477 _ => panic!(),
478 }
479 } else {
480 ::std::string::String::new()
481 }
482 }
483
484 pub fn get_patch(&self) -> &str {
488 match self.pattern {
489 ::std::option::Option::Some(HttpRule_oneof_pattern::patch(ref v)) => v,
490 _ => "",
491 }
492 }
493 pub fn clear_patch(&mut self) {
494 self.pattern = ::std::option::Option::None;
495 }
496
497 pub fn has_patch(&self) -> bool {
498 match self.pattern {
499 ::std::option::Option::Some(HttpRule_oneof_pattern::patch(..)) => true,
500 _ => false,
501 }
502 }
503
504 pub fn set_patch(&mut self, v: ::std::string::String) {
506 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::patch(v))
507 }
508
509 pub fn mut_patch(&mut self) -> &mut ::std::string::String {
511 if let ::std::option::Option::Some(HttpRule_oneof_pattern::patch(_)) = self.pattern {
512 } else {
513 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::patch(::std::string::String::new()));
514 }
515 match self.pattern {
516 ::std::option::Option::Some(HttpRule_oneof_pattern::patch(ref mut v)) => v,
517 _ => panic!(),
518 }
519 }
520
521 pub fn take_patch(&mut self) -> ::std::string::String {
523 if self.has_patch() {
524 match self.pattern.take() {
525 ::std::option::Option::Some(HttpRule_oneof_pattern::patch(v)) => v,
526 _ => panic!(),
527 }
528 } else {
529 ::std::string::String::new()
530 }
531 }
532
533 pub fn get_custom(&self) -> &CustomHttpPattern {
537 match self.pattern {
538 ::std::option::Option::Some(HttpRule_oneof_pattern::custom(ref v)) => v,
539 _ => <CustomHttpPattern as ::protobuf::Message>::default_instance(),
540 }
541 }
542 pub fn clear_custom(&mut self) {
543 self.pattern = ::std::option::Option::None;
544 }
545
546 pub fn has_custom(&self) -> bool {
547 match self.pattern {
548 ::std::option::Option::Some(HttpRule_oneof_pattern::custom(..)) => true,
549 _ => false,
550 }
551 }
552
553 pub fn set_custom(&mut self, v: CustomHttpPattern) {
555 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::custom(v))
556 }
557
558 pub fn mut_custom(&mut self) -> &mut CustomHttpPattern {
560 if let ::std::option::Option::Some(HttpRule_oneof_pattern::custom(_)) = self.pattern {
561 } else {
562 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::custom(CustomHttpPattern::new()));
563 }
564 match self.pattern {
565 ::std::option::Option::Some(HttpRule_oneof_pattern::custom(ref mut v)) => v,
566 _ => panic!(),
567 }
568 }
569
570 pub fn take_custom(&mut self) -> CustomHttpPattern {
572 if self.has_custom() {
573 match self.pattern.take() {
574 ::std::option::Option::Some(HttpRule_oneof_pattern::custom(v)) => v,
575 _ => panic!(),
576 }
577 } else {
578 CustomHttpPattern::new()
579 }
580 }
581
582 pub fn get_body(&self) -> &str {
586 &self.body
587 }
588 pub fn clear_body(&mut self) {
589 self.body.clear();
590 }
591
592 pub fn set_body(&mut self, v: ::std::string::String) {
594 self.body = v;
595 }
596
597 pub fn mut_body(&mut self) -> &mut ::std::string::String {
600 &mut self.body
601 }
602
603 pub fn take_body(&mut self) -> ::std::string::String {
605 ::std::mem::replace(&mut self.body, ::std::string::String::new())
606 }
607
608 pub fn get_response_body(&self) -> &str {
612 &self.response_body
613 }
614 pub fn clear_response_body(&mut self) {
615 self.response_body.clear();
616 }
617
618 pub fn set_response_body(&mut self, v: ::std::string::String) {
620 self.response_body = v;
621 }
622
623 pub fn mut_response_body(&mut self) -> &mut ::std::string::String {
626 &mut self.response_body
627 }
628
629 pub fn take_response_body(&mut self) -> ::std::string::String {
631 ::std::mem::replace(&mut self.response_body, ::std::string::String::new())
632 }
633
634 pub fn get_additional_bindings(&self) -> &[HttpRule] {
638 &self.additional_bindings
639 }
640 pub fn clear_additional_bindings(&mut self) {
641 self.additional_bindings.clear();
642 }
643
644 pub fn set_additional_bindings(&mut self, v: ::protobuf::RepeatedField<HttpRule>) {
646 self.additional_bindings = v;
647 }
648
649 pub fn mut_additional_bindings(&mut self) -> &mut ::protobuf::RepeatedField<HttpRule> {
651 &mut self.additional_bindings
652 }
653
654 pub fn take_additional_bindings(&mut self) -> ::protobuf::RepeatedField<HttpRule> {
656 ::std::mem::replace(&mut self.additional_bindings, ::protobuf::RepeatedField::new())
657 }
658}
659
660impl ::protobuf::Message for HttpRule {
661 fn is_initialized(&self) -> bool {
662 if let Some(HttpRule_oneof_pattern::custom(ref v)) = self.pattern {
663 if !v.is_initialized() {
664 return false;
665 }
666 }
667 for v in &self.additional_bindings {
668 if !v.is_initialized() {
669 return false;
670 }
671 };
672 true
673 }
674
675 fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
676 while !is.eof()? {
677 let (field_number, wire_type) = is.read_tag_unpack()?;
678 match field_number {
679 1 => {
680 ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.selector)?;
681 },
682 2 => {
683 if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
684 return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
685 }
686 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::get(is.read_string()?));
687 },
688 3 => {
689 if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
690 return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
691 }
692 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::put(is.read_string()?));
693 },
694 4 => {
695 if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
696 return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
697 }
698 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::post(is.read_string()?));
699 },
700 5 => {
701 if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
702 return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
703 }
704 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::delete(is.read_string()?));
705 },
706 6 => {
707 if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
708 return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
709 }
710 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::patch(is.read_string()?));
711 },
712 8 => {
713 if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
714 return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
715 }
716 self.pattern = ::std::option::Option::Some(HttpRule_oneof_pattern::custom(is.read_message()?));
717 },
718 7 => {
719 ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.body)?;
720 },
721 12 => {
722 ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.response_body)?;
723 },
724 11 => {
725 ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.additional_bindings)?;
726 },
727 _ => {
728 ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
729 },
730 };
731 }
732 ::std::result::Result::Ok(())
733 }
734
735 #[allow(unused_variables)]
737 fn compute_size(&self) -> u32 {
738 let mut my_size = 0;
739 if !self.selector.is_empty() {
740 my_size += ::protobuf::rt::string_size(1, &self.selector);
741 }
742 if !self.body.is_empty() {
743 my_size += ::protobuf::rt::string_size(7, &self.body);
744 }
745 if !self.response_body.is_empty() {
746 my_size += ::protobuf::rt::string_size(12, &self.response_body);
747 }
748 for value in &self.additional_bindings {
749 let len = value.compute_size();
750 my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
751 };
752 if let ::std::option::Option::Some(ref v) = self.pattern {
753 match v {
754 &HttpRule_oneof_pattern::get(ref v) => {
755 my_size += ::protobuf::rt::string_size(2, &v);
756 },
757 &HttpRule_oneof_pattern::put(ref v) => {
758 my_size += ::protobuf::rt::string_size(3, &v);
759 },
760 &HttpRule_oneof_pattern::post(ref v) => {
761 my_size += ::protobuf::rt::string_size(4, &v);
762 },
763 &HttpRule_oneof_pattern::delete(ref v) => {
764 my_size += ::protobuf::rt::string_size(5, &v);
765 },
766 &HttpRule_oneof_pattern::patch(ref v) => {
767 my_size += ::protobuf::rt::string_size(6, &v);
768 },
769 &HttpRule_oneof_pattern::custom(ref v) => {
770 let len = v.compute_size();
771 my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
772 },
773 };
774 }
775 my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
776 self.cached_size.set(my_size);
777 my_size
778 }
779
780 fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
781 if !self.selector.is_empty() {
782 os.write_string(1, &self.selector)?;
783 }
784 if !self.body.is_empty() {
785 os.write_string(7, &self.body)?;
786 }
787 if !self.response_body.is_empty() {
788 os.write_string(12, &self.response_body)?;
789 }
790 for v in &self.additional_bindings {
791 os.write_tag(11, ::protobuf::wire_format::WireTypeLengthDelimited)?;
792 os.write_raw_varint32(v.get_cached_size())?;
793 v.write_to_with_cached_sizes(os)?;
794 };
795 if let ::std::option::Option::Some(ref v) = self.pattern {
796 match v {
797 &HttpRule_oneof_pattern::get(ref v) => {
798 os.write_string(2, v)?;
799 },
800 &HttpRule_oneof_pattern::put(ref v) => {
801 os.write_string(3, v)?;
802 },
803 &HttpRule_oneof_pattern::post(ref v) => {
804 os.write_string(4, v)?;
805 },
806 &HttpRule_oneof_pattern::delete(ref v) => {
807 os.write_string(5, v)?;
808 },
809 &HttpRule_oneof_pattern::patch(ref v) => {
810 os.write_string(6, v)?;
811 },
812 &HttpRule_oneof_pattern::custom(ref v) => {
813 os.write_tag(8, ::protobuf::wire_format::WireTypeLengthDelimited)?;
814 os.write_raw_varint32(v.get_cached_size())?;
815 v.write_to_with_cached_sizes(os)?;
816 },
817 };
818 }
819 os.write_unknown_fields(self.get_unknown_fields())?;
820 ::std::result::Result::Ok(())
821 }
822
823 fn get_cached_size(&self) -> u32 {
824 self.cached_size.get()
825 }
826
827 fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
828 &self.unknown_fields
829 }
830
831 fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
832 &mut self.unknown_fields
833 }
834
835 fn as_any(&self) -> &dyn (::std::any::Any) {
836 self as &dyn (::std::any::Any)
837 }
838 fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
839 self as &mut dyn (::std::any::Any)
840 }
841 fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
842 self
843 }
844
845 fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
846 Self::descriptor_static()
847 }
848
849 fn new() -> HttpRule {
850 HttpRule::new()
851 }
852
853 fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
854 static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
855 descriptor.get(|| {
856 let mut fields = ::std::vec::Vec::new();
857 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
858 "selector",
859 |m: &HttpRule| { &m.selector },
860 |m: &mut HttpRule| { &mut m.selector },
861 ));
862 fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
863 "get",
864 HttpRule::has_get,
865 HttpRule::get_get,
866 ));
867 fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
868 "put",
869 HttpRule::has_put,
870 HttpRule::get_put,
871 ));
872 fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
873 "post",
874 HttpRule::has_post,
875 HttpRule::get_post,
876 ));
877 fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
878 "delete",
879 HttpRule::has_delete,
880 HttpRule::get_delete,
881 ));
882 fields.push(::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
883 "patch",
884 HttpRule::has_patch,
885 HttpRule::get_patch,
886 ));
887 fields.push(::protobuf::reflect::accessor::make_singular_message_accessor::<_, CustomHttpPattern>(
888 "custom",
889 HttpRule::has_custom,
890 HttpRule::get_custom,
891 ));
892 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
893 "body",
894 |m: &HttpRule| { &m.body },
895 |m: &mut HttpRule| { &mut m.body },
896 ));
897 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
898 "response_body",
899 |m: &HttpRule| { &m.response_body },
900 |m: &mut HttpRule| { &mut m.response_body },
901 ));
902 fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<HttpRule>>(
903 "additional_bindings",
904 |m: &HttpRule| { &m.additional_bindings },
905 |m: &mut HttpRule| { &mut m.additional_bindings },
906 ));
907 ::protobuf::reflect::MessageDescriptor::new_pb_name::<HttpRule>(
908 "HttpRule",
909 fields,
910 file_descriptor_proto()
911 )
912 })
913 }
914
915 fn default_instance() -> &'static HttpRule {
916 static instance: ::protobuf::rt::LazyV2<HttpRule> = ::protobuf::rt::LazyV2::INIT;
917 instance.get(HttpRule::new)
918 }
919}
920
921impl ::protobuf::Clear for HttpRule {
922 fn clear(&mut self) {
923 self.selector.clear();
924 self.pattern = ::std::option::Option::None;
925 self.pattern = ::std::option::Option::None;
926 self.pattern = ::std::option::Option::None;
927 self.pattern = ::std::option::Option::None;
928 self.pattern = ::std::option::Option::None;
929 self.pattern = ::std::option::Option::None;
930 self.body.clear();
931 self.response_body.clear();
932 self.additional_bindings.clear();
933 self.unknown_fields.clear();
934 }
935}
936
937impl ::std::fmt::Debug for HttpRule {
938 fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
939 ::protobuf::text_format::fmt(self, f)
940 }
941}
942
943impl ::protobuf::reflect::ProtobufValue for HttpRule {
944 fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
945 ::protobuf::reflect::ReflectValueRef::Message(self)
946 }
947}
948
949#[derive(PartialEq,Clone,Default)]
950pub struct CustomHttpPattern {
951 pub kind: ::std::string::String,
953 pub path: ::std::string::String,
954 pub unknown_fields: ::protobuf::UnknownFields,
956 pub cached_size: ::protobuf::CachedSize,
957}
958
959impl<'a> ::std::default::Default for &'a CustomHttpPattern {
960 fn default() -> &'a CustomHttpPattern {
961 <CustomHttpPattern as ::protobuf::Message>::default_instance()
962 }
963}
964
965impl CustomHttpPattern {
966 pub fn new() -> CustomHttpPattern {
967 ::std::default::Default::default()
968 }
969
970 pub fn get_kind(&self) -> &str {
974 &self.kind
975 }
976 pub fn clear_kind(&mut self) {
977 self.kind.clear();
978 }
979
980 pub fn set_kind(&mut self, v: ::std::string::String) {
982 self.kind = v;
983 }
984
985 pub fn mut_kind(&mut self) -> &mut ::std::string::String {
988 &mut self.kind
989 }
990
991 pub fn take_kind(&mut self) -> ::std::string::String {
993 ::std::mem::replace(&mut self.kind, ::std::string::String::new())
994 }
995
996 pub fn get_path(&self) -> &str {
1000 &self.path
1001 }
1002 pub fn clear_path(&mut self) {
1003 self.path.clear();
1004 }
1005
1006 pub fn set_path(&mut self, v: ::std::string::String) {
1008 self.path = v;
1009 }
1010
1011 pub fn mut_path(&mut self) -> &mut ::std::string::String {
1014 &mut self.path
1015 }
1016
1017 pub fn take_path(&mut self) -> ::std::string::String {
1019 ::std::mem::replace(&mut self.path, ::std::string::String::new())
1020 }
1021}
1022
1023impl ::protobuf::Message for CustomHttpPattern {
1024 fn is_initialized(&self) -> bool {
1025 true
1026 }
1027
1028 fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> {
1029 while !is.eof()? {
1030 let (field_number, wire_type) = is.read_tag_unpack()?;
1031 match field_number {
1032 1 => {
1033 ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.kind)?;
1034 },
1035 2 => {
1036 ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.path)?;
1037 },
1038 _ => {
1039 ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?;
1040 },
1041 };
1042 }
1043 ::std::result::Result::Ok(())
1044 }
1045
1046 #[allow(unused_variables)]
1048 fn compute_size(&self) -> u32 {
1049 let mut my_size = 0;
1050 if !self.kind.is_empty() {
1051 my_size += ::protobuf::rt::string_size(1, &self.kind);
1052 }
1053 if !self.path.is_empty() {
1054 my_size += ::protobuf::rt::string_size(2, &self.path);
1055 }
1056 my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
1057 self.cached_size.set(my_size);
1058 my_size
1059 }
1060
1061 fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> {
1062 if !self.kind.is_empty() {
1063 os.write_string(1, &self.kind)?;
1064 }
1065 if !self.path.is_empty() {
1066 os.write_string(2, &self.path)?;
1067 }
1068 os.write_unknown_fields(self.get_unknown_fields())?;
1069 ::std::result::Result::Ok(())
1070 }
1071
1072 fn get_cached_size(&self) -> u32 {
1073 self.cached_size.get()
1074 }
1075
1076 fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
1077 &self.unknown_fields
1078 }
1079
1080 fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
1081 &mut self.unknown_fields
1082 }
1083
1084 fn as_any(&self) -> &dyn (::std::any::Any) {
1085 self as &dyn (::std::any::Any)
1086 }
1087 fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
1088 self as &mut dyn (::std::any::Any)
1089 }
1090 fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
1091 self
1092 }
1093
1094 fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
1095 Self::descriptor_static()
1096 }
1097
1098 fn new() -> CustomHttpPattern {
1099 CustomHttpPattern::new()
1100 }
1101
1102 fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
1103 static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT;
1104 descriptor.get(|| {
1105 let mut fields = ::std::vec::Vec::new();
1106 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
1107 "kind",
1108 |m: &CustomHttpPattern| { &m.kind },
1109 |m: &mut CustomHttpPattern| { &mut m.kind },
1110 ));
1111 fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
1112 "path",
1113 |m: &CustomHttpPattern| { &m.path },
1114 |m: &mut CustomHttpPattern| { &mut m.path },
1115 ));
1116 ::protobuf::reflect::MessageDescriptor::new_pb_name::<CustomHttpPattern>(
1117 "CustomHttpPattern",
1118 fields,
1119 file_descriptor_proto()
1120 )
1121 })
1122 }
1123
1124 fn default_instance() -> &'static CustomHttpPattern {
1125 static instance: ::protobuf::rt::LazyV2<CustomHttpPattern> = ::protobuf::rt::LazyV2::INIT;
1126 instance.get(CustomHttpPattern::new)
1127 }
1128}
1129
1130impl ::protobuf::Clear for CustomHttpPattern {
1131 fn clear(&mut self) {
1132 self.kind.clear();
1133 self.path.clear();
1134 self.unknown_fields.clear();
1135 }
1136}
1137
1138impl ::std::fmt::Debug for CustomHttpPattern {
1139 fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1140 ::protobuf::text_format::fmt(self, f)
1141 }
1142}
1143
1144impl ::protobuf::reflect::ProtobufValue for CustomHttpPattern {
1145 fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
1146 ::protobuf::reflect::ReflectValueRef::Message(self)
1147 }
1148}
1149
1150static file_descriptor_proto_data: &'static [u8] = b"\
1151 \n\x15google/api/http.proto\x12\ngoogle.api\"y\n\x04Http\x12*\n\x05rules\
1152 \x18\x01\x20\x03(\x0b2\x14.google.api.HttpRuleR\x05rules\x12E\n\x1ffully\
1153 _decode_reserved_expansion\x18\x02\x20\x01(\x08R\x1cfullyDecodeReservedE\
1154 xpansion\"\xda\x02\n\x08HttpRule\x12\x1a\n\x08selector\x18\x01\x20\x01(\
1155 \tR\x08selector\x12\x12\n\x03get\x18\x02\x20\x01(\tH\0R\x03get\x12\x12\n\
1156 \x03put\x18\x03\x20\x01(\tH\0R\x03put\x12\x14\n\x04post\x18\x04\x20\x01(\
1157 \tH\0R\x04post\x12\x18\n\x06delete\x18\x05\x20\x01(\tH\0R\x06delete\x12\
1158 \x16\n\x05patch\x18\x06\x20\x01(\tH\0R\x05patch\x127\n\x06custom\x18\x08\
1159 \x20\x01(\x0b2\x1d.google.api.CustomHttpPatternH\0R\x06custom\x12\x12\n\
1160 \x04body\x18\x07\x20\x01(\tR\x04body\x12#\n\rresponse_body\x18\x0c\x20\
1161 \x01(\tR\x0cresponseBody\x12E\n\x13additional_bindings\x18\x0b\x20\x03(\
1162 \x0b2\x14.google.api.HttpRuleR\x12additionalBindingsB\t\n\x07pattern\";\
1163 \n\x11CustomHttpPattern\x12\x12\n\x04kind\x18\x01\x20\x01(\tR\x04kind\
1164 \x12\x12\n\x04path\x18\x02\x20\x01(\tR\x04pathBj\n\x0ecom.google.apiB\tH\
1165 ttpProtoP\x01ZAgoogle.golang.org/genproto/googleapis/api/annotations;ann\
1166 otations\xf8\x01\x01\xa2\x02\x04GAPIJ\xb2s\n\x07\x12\x05\x0e\0\xfa\x02\
1167 \x01\n\xbc\x04\n\x01\x0c\x12\x03\x0e\0\x122\xb1\x04\x20Copyright\x202023\
1168 \x20Google\x20LLC\n\n\x20Licensed\x20under\x20the\x20Apache\x20License,\
1169 \x20Version\x202.0\x20(the\x20\"License\");\n\x20you\x20may\x20not\x20us\
1170 e\x20this\x20file\x20except\x20in\x20compliance\x20with\x20the\x20Licens\
1171 e.\n\x20You\x20may\x20obtain\x20a\x20copy\x20of\x20the\x20License\x20at\
1172 \n\n\x20\x20\x20\x20\x20http://www.apache.org/licenses/LICENSE-2.0\n\n\
1173 \x20Unless\x20required\x20by\x20applicable\x20law\x20or\x20agreed\x20to\
1174 \x20in\x20writing,\x20software\n\x20distributed\x20under\x20the\x20Licen\
1175 se\x20is\x20distributed\x20on\x20an\x20\"AS\x20IS\"\x20BASIS,\n\x20WITHO\
1176 UT\x20WARRANTIES\x20OR\x20CONDITIONS\x20OF\x20ANY\x20KIND,\x20either\x20\
1177 express\x20or\x20implied.\n\x20See\x20the\x20License\x20for\x20the\x20sp\
1178 ecific\x20language\x20governing\x20permissions\x20and\n\x20limitations\
1179 \x20under\x20the\x20License.\n\n\x08\n\x01\x02\x12\x03\x10\0\x13\n\x08\n\
1180 \x01\x08\x12\x03\x12\0\x1f\n\t\n\x02\x08\x1f\x12\x03\x12\0\x1f\n\x08\n\
1181 \x01\x08\x12\x03\x13\0X\n\t\n\x02\x08\x0b\x12\x03\x13\0X\n\x08\n\x01\x08\
1182 \x12\x03\x14\0\"\n\t\n\x02\x08\n\x12\x03\x14\0\"\n\x08\n\x01\x08\x12\x03\
1183 \x15\0*\n\t\n\x02\x08\x08\x12\x03\x15\0*\n\x08\n\x01\x08\x12\x03\x16\0'\
1184 \n\t\n\x02\x08\x01\x12\x03\x16\0'\n\x08\n\x01\x08\x12\x03\x17\0\"\n\t\n\
1185 \x02\x08$\x12\x03\x17\0\"\n\xcd\x01\n\x02\x04\0\x12\x04\x1c\0)\x01\x1a\
1186 \xc0\x01\x20Defines\x20the\x20HTTP\x20configuration\x20for\x20an\x20API\
1187 \x20service.\x20It\x20contains\x20a\x20list\x20of\n\x20[HttpRule][google\
1188 .api.HttpRule],\x20each\x20specifying\x20the\x20mapping\x20of\x20an\x20R\
1189 PC\x20method\n\x20to\x20one\x20or\x20more\x20HTTP\x20REST\x20API\x20meth\
1190 ods.\n\n\n\n\x03\x04\0\x01\x12\x03\x1c\x08\x0c\n\xa2\x01\n\x04\x04\0\x02\
1191 \0\x12\x03\x20\x02\x1e\x1a\x94\x01\x20A\x20list\x20of\x20HTTP\x20configu\
1192 ration\x20rules\x20that\x20apply\x20to\x20individual\x20API\x20methods.\
1193 \n\n\x20**NOTE:**\x20All\x20service\x20configuration\x20rules\x20follow\
1194 \x20\"last\x20one\x20wins\"\x20order.\n\n\x0c\n\x05\x04\0\x02\0\x04\x12\
1195 \x03\x20\x02\n\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x20\x0b\x13\n\x0c\n\
1196 \x05\x04\0\x02\0\x01\x12\x03\x20\x14\x19\n\x0c\n\x05\x04\0\x02\0\x03\x12\
1197 \x03\x20\x1c\x1d\n\x94\x02\n\x04\x04\0\x02\x01\x12\x03(\x02+\x1a\x86\x02\
1198 \x20When\x20set\x20to\x20true,\x20URL\x20path\x20parameters\x20will\x20b\
1199 e\x20fully\x20URI-decoded\x20except\x20in\n\x20cases\x20of\x20single\x20\
1200 segment\x20matches\x20in\x20reserved\x20expansion,\x20where\x20\"%2F\"\
1201 \x20will\x20be\n\x20left\x20encoded.\n\n\x20The\x20default\x20behavior\
1202 \x20is\x20to\x20not\x20decode\x20RFC\x206570\x20reserved\x20characters\
1203 \x20in\x20multi\n\x20segment\x20matches.\n\n\x0c\n\x05\x04\0\x02\x01\x05\
1204 \x12\x03(\x02\x06\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03(\x07&\n\x0c\n\
1205 \x05\x04\0\x02\x01\x03\x12\x03()*\n\xbbS\n\x02\x04\x01\x12\x06\xbb\x02\0\
1206 \xf1\x02\x01\x1a\xacS\x20#\x20gRPC\x20Transcoding\n\n\x20gRPC\x20Transco\
1207 ding\x20is\x20a\x20feature\x20for\x20mapping\x20between\x20a\x20gRPC\x20\
1208 method\x20and\x20one\x20or\n\x20more\x20HTTP\x20REST\x20endpoints.\x20It\
1209 \x20allows\x20developers\x20to\x20build\x20a\x20single\x20API\x20service\
1210 \n\x20that\x20supports\x20both\x20gRPC\x20APIs\x20and\x20REST\x20APIs.\
1211 \x20Many\x20systems,\x20including\x20[Google\n\x20APIs](https://github.c\
1212 om/googleapis/googleapis),\n\x20[Cloud\x20Endpoints](https://cloud.googl\
1213 e.com/endpoints),\x20[gRPC\n\x20Gateway](https://github.com/grpc-ecosyst\
1214 em/grpc-gateway),\n\x20and\x20[Envoy](https://github.com/envoyproxy/envo\
1215 y)\x20proxy\x20support\x20this\x20feature\n\x20and\x20use\x20it\x20for\
1216 \x20large\x20scale\x20production\x20services.\n\n\x20`HttpRule`\x20defin\
1217 es\x20the\x20schema\x20of\x20the\x20gRPC/REST\x20mapping.\x20The\x20mapp\
1218 ing\x20specifies\n\x20how\x20different\x20portions\x20of\x20the\x20gRPC\
1219 \x20request\x20message\x20are\x20mapped\x20to\x20the\x20URL\n\x20path,\
1220 \x20URL\x20query\x20parameters,\x20and\x20HTTP\x20request\x20body.\x20It\
1221 \x20also\x20controls\x20how\x20the\n\x20gRPC\x20response\x20message\x20i\
1222 s\x20mapped\x20to\x20the\x20HTTP\x20response\x20body.\x20`HttpRule`\x20i\
1223 s\n\x20typically\x20specified\x20as\x20an\x20`google.api.http`\x20annota\
1224 tion\x20on\x20the\x20gRPC\x20method.\n\n\x20Each\x20mapping\x20specifies\
1225 \x20a\x20URL\x20path\x20template\x20and\x20an\x20HTTP\x20method.\x20The\
1226 \x20path\n\x20template\x20may\x20refer\x20to\x20one\x20or\x20more\x20fie\
1227 lds\x20in\x20the\x20gRPC\x20request\x20message,\x20as\x20long\n\x20as\
1228 \x20each\x20field\x20is\x20a\x20non-repeated\x20field\x20with\x20a\x20pr\
1229 imitive\x20(non-message)\x20type.\n\x20The\x20path\x20template\x20contro\
1230 ls\x20how\x20fields\x20of\x20the\x20request\x20message\x20are\x20mapped\
1231 \x20to\n\x20the\x20URL\x20path.\n\n\x20Example:\n\n\x20\x20\x20\x20\x20s\
1232 ervice\x20Messaging\x20{\n\x20\x20\x20\x20\x20\x20\x20rpc\x20GetMessage(\
1233 GetMessageRequest)\x20returns\x20(Message)\x20{\n\x20\x20\x20\x20\x20\
1234 \x20\x20\x20\x20option\x20(google.api.http)\x20=\x20{\n\x20\x20\x20\x20\
1235 \x20\x20\x20\x20\x20\x20\x20\x20\x20get:\x20\"/v1/{name=messages/*}\"\n\
1236 \x20\x20\x20\x20\x20\x20\x20\x20\x20};\n\x20\x20\x20\x20\x20\x20\x20}\n\
1237 \x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20message\x20GetMessageRequest\
1238 \x20{\n\x20\x20\x20\x20\x20\x20\x20string\x20name\x20=\x201;\x20//\x20Ma\
1239 pped\x20to\x20URL\x20path.\n\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20m\
1240 essage\x20Message\x20{\n\x20\x20\x20\x20\x20\x20\x20string\x20text\x20=\
1241 \x201;\x20//\x20The\x20resource\x20content.\n\x20\x20\x20\x20\x20}\n\n\
1242 \x20This\x20enables\x20an\x20HTTP\x20REST\x20to\x20gRPC\x20mapping\x20as\
1243 \x20below:\n\n\x20HTTP\x20|\x20gRPC\n\x20-----|-----\n\x20`GET\x20/v1/me\
1244 ssages/123456`\x20\x20|\x20`GetMessage(name:\x20\"messages/123456\")`\n\
1245 \n\x20Any\x20fields\x20in\x20the\x20request\x20message\x20which\x20are\
1246 \x20not\x20bound\x20by\x20the\x20path\x20template\n\x20automatically\x20\
1247 become\x20HTTP\x20query\x20parameters\x20if\x20there\x20is\x20no\x20HTTP\
1248 \x20request\x20body.\n\x20For\x20example:\n\n\x20\x20\x20\x20\x20service\
1249 \x20Messaging\x20{\n\x20\x20\x20\x20\x20\x20\x20rpc\x20GetMessage(GetMes\
1250 sageRequest)\x20returns\x20(Message)\x20{\n\x20\x20\x20\x20\x20\x20\x20\
1251 \x20\x20option\x20(google.api.http)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\
1252 \x20\x20\x20\x20\x20\x20\x20get:\"/v1/messages/{message_id}\"\n\x20\x20\
1253 \x20\x20\x20\x20\x20\x20\x20};\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\
1254 \x20\x20\x20}\n\x20\x20\x20\x20\x20message\x20GetMessageRequest\x20{\n\
1255 \x20\x20\x20\x20\x20\x20\x20message\x20SubMessage\x20{\n\x20\x20\x20\x20\
1256 \x20\x20\x20\x20\x20string\x20subfield\x20=\x201;\n\x20\x20\x20\x20\x20\
1257 \x20\x20}\n\x20\x20\x20\x20\x20\x20\x20string\x20message_id\x20=\x201;\
1258 \x20//\x20Mapped\x20to\x20URL\x20path.\n\x20\x20\x20\x20\x20\x20\x20int6\
1259 4\x20revision\x20=\x202;\x20\x20\x20\x20//\x20Mapped\x20to\x20URL\x20que\
1260 ry\x20parameter\x20`revision`.\n\x20\x20\x20\x20\x20\x20\x20SubMessage\
1261 \x20sub\x20=\x203;\x20\x20\x20\x20//\x20Mapped\x20to\x20URL\x20query\x20\
1262 parameter\x20`sub.subfield`.\n\x20\x20\x20\x20\x20}\n\n\x20This\x20enabl\
1263 es\x20a\x20HTTP\x20JSON\x20to\x20RPC\x20mapping\x20as\x20below:\n\n\x20H\
1264 TTP\x20|\x20gRPC\n\x20-----|-----\n\x20`GET\x20/v1/messages/123456?revis\
1265 ion=2&sub.subfield=foo`\x20|\n\x20`GetMessage(message_id:\x20\"123456\"\
1266 \x20revision:\x202\x20sub:\x20SubMessage(subfield:\n\x20\"foo\"))`\n\n\
1267 \x20Note\x20that\x20fields\x20which\x20are\x20mapped\x20to\x20URL\x20que\
1268 ry\x20parameters\x20must\x20have\x20a\n\x20primitive\x20type\x20or\x20a\
1269 \x20repeated\x20primitive\x20type\x20or\x20a\x20non-repeated\x20message\
1270 \x20type.\n\x20In\x20the\x20case\x20of\x20a\x20repeated\x20type,\x20the\
1271 \x20parameter\x20can\x20be\x20repeated\x20in\x20the\x20URL\n\x20as\x20`.\
1272 ..?param=A¶m=B`.\x20In\x20the\x20case\x20of\x20a\x20message\x20type,\
1273 \x20each\x20field\x20of\x20the\n\x20message\x20is\x20mapped\x20to\x20a\
1274 \x20separate\x20parameter,\x20such\x20as\n\x20`...?foo.a=A&foo.b=B&foo.c\
1275 =C`.\n\n\x20For\x20HTTP\x20methods\x20that\x20allow\x20a\x20request\x20b\
1276 ody,\x20the\x20`body`\x20field\n\x20specifies\x20the\x20mapping.\x20Cons\
1277 ider\x20a\x20REST\x20update\x20method\x20on\x20the\n\x20message\x20resou\
1278 rce\x20collection:\n\n\x20\x20\x20\x20\x20service\x20Messaging\x20{\n\
1279 \x20\x20\x20\x20\x20\x20\x20rpc\x20UpdateMessage(UpdateMessageRequest)\
1280 \x20returns\x20(Message)\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20optio\
1281 n\x20(google.api.http)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\
1282 \x20\x20patch:\x20\"/v1/messages/{message_id}\"\n\x20\x20\x20\x20\x20\
1283 \x20\x20\x20\x20\x20\x20body:\x20\"message\"\n\x20\x20\x20\x20\x20\x20\
1284 \x20\x20\x20};\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20}\n\
1285 \x20\x20\x20\x20\x20message\x20UpdateMessageRequest\x20{\n\x20\x20\x20\
1286 \x20\x20\x20\x20string\x20message_id\x20=\x201;\x20//\x20mapped\x20to\
1287 \x20the\x20URL\n\x20\x20\x20\x20\x20\x20\x20Message\x20message\x20=\x202\
1288 ;\x20\x20\x20//\x20mapped\x20to\x20the\x20body\n\x20\x20\x20\x20\x20}\n\
1289 \n\x20The\x20following\x20HTTP\x20JSON\x20to\x20RPC\x20mapping\x20is\x20\
1290 enabled,\x20where\x20the\n\x20representation\x20of\x20the\x20JSON\x20in\
1291 \x20the\x20request\x20body\x20is\x20determined\x20by\n\x20protos\x20JSON\
1292 \x20encoding:\n\n\x20HTTP\x20|\x20gRPC\n\x20-----|-----\n\x20`PATCH\x20/\
1293 v1/messages/123456\x20{\x20\"text\":\x20\"Hi!\"\x20}`\x20|\x20`UpdateMes\
1294 sage(message_id:\n\x20\"123456\"\x20message\x20{\x20text:\x20\"Hi!\"\x20\
1295 })`\n\n\x20The\x20special\x20name\x20`*`\x20can\x20be\x20used\x20in\x20t\
1296 he\x20body\x20mapping\x20to\x20define\x20that\n\x20every\x20field\x20not\
1297 \x20bound\x20by\x20the\x20path\x20template\x20should\x20be\x20mapped\x20\
1298 to\x20the\n\x20request\x20body.\x20\x20This\x20enables\x20the\x20followi\
1299 ng\x20alternative\x20definition\x20of\n\x20the\x20update\x20method:\n\n\
1300 \x20\x20\x20\x20\x20service\x20Messaging\x20{\n\x20\x20\x20\x20\x20\x20\
1301 \x20rpc\x20UpdateMessage(Message)\x20returns\x20(Message)\x20{\n\x20\x20\
1302 \x20\x20\x20\x20\x20\x20\x20option\x20(google.api.http)\x20=\x20{\n\x20\
1303 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20patch:\x20\"/v1/messages/{messag\
1304 e_id}\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20body:\x20\"*\"\n\
1305 \x20\x20\x20\x20\x20\x20\x20\x20\x20};\n\x20\x20\x20\x20\x20\x20\x20}\n\
1306 \x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20message\x20Message\x20{\n\x20\
1307 \x20\x20\x20\x20\x20\x20string\x20message_id\x20=\x201;\n\x20\x20\x20\
1308 \x20\x20\x20\x20string\x20text\x20=\x202;\n\x20\x20\x20\x20\x20}\n\n\n\
1309 \x20The\x20following\x20HTTP\x20JSON\x20to\x20RPC\x20mapping\x20is\x20en\
1310 abled:\n\n\x20HTTP\x20|\x20gRPC\n\x20-----|-----\n\x20`PATCH\x20/v1/mess\
1311 ages/123456\x20{\x20\"text\":\x20\"Hi!\"\x20}`\x20|\x20`UpdateMessage(me\
1312 ssage_id:\n\x20\"123456\"\x20text:\x20\"Hi!\")`\n\n\x20Note\x20that\x20w\
1313 hen\x20using\x20`*`\x20in\x20the\x20body\x20mapping,\x20it\x20is\x20not\
1314 \x20possible\x20to\n\x20have\x20HTTP\x20parameters,\x20as\x20all\x20fiel\
1315 ds\x20not\x20bound\x20by\x20the\x20path\x20end\x20in\n\x20the\x20body.\
1316 \x20This\x20makes\x20this\x20option\x20more\x20rarely\x20used\x20in\x20p\
1317 ractice\x20when\n\x20defining\x20REST\x20APIs.\x20The\x20common\x20usage\
1318 \x20of\x20`*`\x20is\x20in\x20custom\x20methods\n\x20which\x20don't\x20us\
1319 e\x20the\x20URL\x20at\x20all\x20for\x20transferring\x20data.\n\n\x20It\
1320 \x20is\x20possible\x20to\x20define\x20multiple\x20HTTP\x20methods\x20for\
1321 \x20one\x20RPC\x20by\x20using\n\x20the\x20`additional_bindings`\x20optio\
1322 n.\x20Example:\n\n\x20\x20\x20\x20\x20service\x20Messaging\x20{\n\x20\
1323 \x20\x20\x20\x20\x20\x20rpc\x20GetMessage(GetMessageRequest)\x20returns\
1324 \x20(Message)\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20option\x20(googl\
1325 e.api.http)\x20=\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20get:\
1326 \x20\"/v1/messages/{message_id}\"\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\
1327 \x20\x20additional_bindings\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\
1328 \x20\x20\x20\x20get:\x20\"/v1/users/{user_id}/messages/{message_id}\"\n\
1329 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\
1330 \x20\x20\x20};\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20}\n\
1331 \x20\x20\x20\x20\x20message\x20GetMessageRequest\x20{\n\x20\x20\x20\x20\
1332 \x20\x20\x20string\x20message_id\x20=\x201;\n\x20\x20\x20\x20\x20\x20\
1333 \x20string\x20user_id\x20=\x202;\n\x20\x20\x20\x20\x20}\n\n\x20This\x20e\
1334 nables\x20the\x20following\x20two\x20alternative\x20HTTP\x20JSON\x20to\
1335 \x20RPC\x20mappings:\n\n\x20HTTP\x20|\x20gRPC\n\x20-----|-----\n\x20`GET\
1336 \x20/v1/messages/123456`\x20|\x20`GetMessage(message_id:\x20\"123456\")`\
1337 \n\x20`GET\x20/v1/users/me/messages/123456`\x20|\x20`GetMessage(user_id:\
1338 \x20\"me\"\x20message_id:\n\x20\"123456\")`\n\n\x20##\x20Rules\x20for\
1339 \x20HTTP\x20mapping\n\n\x201.\x20Leaf\x20request\x20fields\x20(recursive\
1340 \x20expansion\x20nested\x20messages\x20in\x20the\x20request\n\x20\x20\
1341 \x20\x20message)\x20are\x20classified\x20into\x20three\x20categories:\n\
1342 \x20\x20\x20\x20-\x20Fields\x20referred\x20by\x20the\x20path\x20template\
1343 .\x20They\x20are\x20passed\x20via\x20the\x20URL\x20path.\n\x20\x20\x20\
1344 \x20-\x20Fields\x20referred\x20by\x20the\x20[HttpRule.body][google.api.H\
1345 ttpRule.body].\x20They\n\x20\x20\x20\x20are\x20passed\x20via\x20the\x20H\
1346 TTP\n\x20\x20\x20\x20\x20\x20request\x20body.\n\x20\x20\x20\x20-\x20All\
1347 \x20other\x20fields\x20are\x20passed\x20via\x20the\x20URL\x20query\x20pa\
1348 rameters,\x20and\x20the\n\x20\x20\x20\x20\x20\x20parameter\x20name\x20is\
1349 \x20the\x20field\x20path\x20in\x20the\x20request\x20message.\x20A\x20rep\
1350 eated\n\x20\x20\x20\x20\x20\x20field\x20can\x20be\x20represented\x20as\
1351 \x20multiple\x20query\x20parameters\x20under\x20the\x20same\n\x20\x20\
1352 \x20\x20\x20\x20name.\n\x20\x202.\x20If\x20[HttpRule.body][google.api.Ht\
1353 tpRule.body]\x20is\x20\"*\",\x20there\x20is\x20no\x20URL\n\x20\x20query\
1354 \x20parameter,\x20all\x20fields\n\x20\x20\x20\x20\x20are\x20passed\x20vi\
1355 a\x20URL\x20path\x20and\x20HTTP\x20request\x20body.\n\x20\x203.\x20If\
1356 \x20[HttpRule.body][google.api.HttpRule.body]\x20is\x20omitted,\x20there\
1357 \x20is\x20no\x20HTTP\n\x20\x20request\x20body,\x20all\n\x20\x20\x20\x20\
1358 \x20fields\x20are\x20passed\x20via\x20URL\x20path\x20and\x20URL\x20query\
1359 \x20parameters.\n\n\x20###\x20Path\x20template\x20syntax\n\n\x20\x20\x20\
1360 \x20\x20Template\x20=\x20\"/\"\x20Segments\x20[\x20Verb\x20]\x20;\n\x20\
1361 \x20\x20\x20\x20Segments\x20=\x20Segment\x20{\x20\"/\"\x20Segment\x20}\
1362 \x20;\n\x20\x20\x20\x20\x20Segment\x20\x20=\x20\"*\"\x20|\x20\"**\"\x20|\
1363 \x20LITERAL\x20|\x20Variable\x20;\n\x20\x20\x20\x20\x20Variable\x20=\x20\
1364 \"{\"\x20FieldPath\x20[\x20\"=\"\x20Segments\x20]\x20\"}\"\x20;\n\x20\
1365 \x20\x20\x20\x20FieldPath\x20=\x20IDENT\x20{\x20\".\"\x20IDENT\x20}\x20;\
1366 \n\x20\x20\x20\x20\x20Verb\x20\x20\x20\x20\x20=\x20\":\"\x20LITERAL\x20;\
1367 \n\n\x20The\x20syntax\x20`*`\x20matches\x20a\x20single\x20URL\x20path\
1368 \x20segment.\x20The\x20syntax\x20`**`\x20matches\n\x20zero\x20or\x20more\
1369 \x20URL\x20path\x20segments,\x20which\x20must\x20be\x20the\x20last\x20pa\
1370 rt\x20of\x20the\x20URL\x20path\n\x20except\x20the\x20`Verb`.\n\n\x20The\
1371 \x20syntax\x20`Variable`\x20matches\x20part\x20of\x20the\x20URL\x20path\
1372 \x20as\x20specified\x20by\x20its\n\x20template.\x20A\x20variable\x20temp\
1373 late\x20must\x20not\x20contain\x20other\x20variables.\x20If\x20a\x20vari\
1374 able\n\x20matches\x20a\x20single\x20path\x20segment,\x20its\x20template\
1375 \x20may\x20be\x20omitted,\x20e.g.\x20`{var}`\n\x20is\x20equivalent\x20to\
1376 \x20`{var=*}`.\n\n\x20The\x20syntax\x20`LITERAL`\x20matches\x20literal\
1377 \x20text\x20in\x20the\x20URL\x20path.\x20If\x20the\x20`LITERAL`\n\x20con\
1378 tains\x20any\x20reserved\x20character,\x20such\x20characters\x20should\
1379 \x20be\x20percent-encoded\n\x20before\x20the\x20matching.\n\n\x20If\x20a\
1380 \x20variable\x20contains\x20exactly\x20one\x20path\x20segment,\x20such\
1381 \x20as\x20`\"{var}\"`\x20or\n\x20`\"{var=*}\"`,\x20when\x20such\x20a\x20\
1382 variable\x20is\x20expanded\x20into\x20a\x20URL\x20path\x20on\x20the\x20c\
1383 lient\n\x20side,\x20all\x20characters\x20except\x20`[-_.~0-9a-zA-Z]`\x20\
1384 are\x20percent-encoded.\x20The\n\x20server\x20side\x20does\x20the\x20rev\
1385 erse\x20decoding.\x20Such\x20variables\x20show\x20up\x20in\x20the\n\x20[\
1386 Discovery\n\x20Document](https://developers.google.com/discovery/v1/refe\
1387 rence/apis)\x20as\n\x20`{var}`.\n\n\x20If\x20a\x20variable\x20contains\
1388 \x20multiple\x20path\x20segments,\x20such\x20as\x20`\"{var=foo/*}\"`\n\
1389 \x20or\x20`\"{var=**}\"`,\x20when\x20such\x20a\x20variable\x20is\x20expa\
1390 nded\x20into\x20a\x20URL\x20path\x20on\x20the\n\x20client\x20side,\x20al\
1391 l\x20characters\x20except\x20`[-_.~/0-9a-zA-Z]`\x20are\x20percent-encode\
1392 d.\n\x20The\x20server\x20side\x20does\x20the\x20reverse\x20decoding,\x20\
1393 except\x20\"%2F\"\x20and\x20\"%2f\"\x20are\x20left\n\x20unchanged.\x20Su\
1394 ch\x20variables\x20show\x20up\x20in\x20the\n\x20[Discovery\n\x20Document\
1395 ](https://developers.google.com/discovery/v1/reference/apis)\x20as\n\x20\
1396 `{+var}`.\n\n\x20##\x20Using\x20gRPC\x20API\x20Service\x20Configuration\
1397 \n\n\x20gRPC\x20API\x20Service\x20Configuration\x20(service\x20config)\
1398 \x20is\x20a\x20configuration\x20language\n\x20for\x20configuring\x20a\
1399 \x20gRPC\x20service\x20to\x20become\x20a\x20user-facing\x20product.\x20T\
1400 he\n\x20service\x20config\x20is\x20simply\x20the\x20YAML\x20representati\
1401 on\x20of\x20the\x20`google.api.Service`\n\x20proto\x20message.\n\n\x20As\
1402 \x20an\x20alternative\x20to\x20annotating\x20your\x20proto\x20file,\x20y\
1403 ou\x20can\x20configure\x20gRPC\n\x20transcoding\x20in\x20your\x20service\
1404 \x20config\x20YAML\x20files.\x20You\x20do\x20this\x20by\x20specifying\
1405 \x20a\n\x20`HttpRule`\x20that\x20maps\x20the\x20gRPC\x20method\x20to\x20\
1406 a\x20REST\x20endpoint,\x20achieving\x20the\x20same\n\x20effect\x20as\x20\
1407 the\x20proto\x20annotation.\x20This\x20can\x20be\x20particularly\x20usef\
1408 ul\x20if\x20you\n\x20have\x20a\x20proto\x20that\x20is\x20reused\x20in\
1409 \x20multiple\x20services.\x20Note\x20that\x20any\x20transcoding\n\x20spe\
1410 cified\x20in\x20the\x20service\x20config\x20will\x20override\x20any\x20m\
1411 atching\x20transcoding\n\x20configuration\x20in\x20the\x20proto.\n\n\x20\
1412 Example:\n\n\x20\x20\x20\x20\x20http:\n\x20\x20\x20\x20\x20\x20\x20rules\
1413 :\n\x20\x20\x20\x20\x20\x20\x20\x20\x20#\x20Selects\x20a\x20gRPC\x20meth\
1414 od\x20and\x20applies\x20HttpRule\x20to\x20it.\n\x20\x20\x20\x20\x20\x20\
1415 \x20\x20\x20-\x20selector:\x20example.v1.Messaging.GetMessage\n\x20\x20\
1416 \x20\x20\x20\x20\x20\x20\x20\x20\x20get:\x20/v1/messages/{message_id}/{s\
1417 ub.subfield}\n\n\x20##\x20Special\x20notes\n\n\x20When\x20gRPC\x20Transc\
1418 oding\x20is\x20used\x20to\x20map\x20a\x20gRPC\x20to\x20JSON\x20REST\x20e\
1419 ndpoints,\x20the\n\x20proto\x20to\x20JSON\x20conversion\x20must\x20follo\
1420 w\x20the\x20[proto3\n\x20specification](https://developers.google.com/pr\
1421 otocol-buffers/docs/proto3#json).\n\n\x20While\x20the\x20single\x20segme\
1422 nt\x20variable\x20follows\x20the\x20semantics\x20of\n\x20[RFC\x206570](h\
1423 ttps://tools.ietf.org/html/rfc6570)\x20Section\x203.2.2\x20Simple\x20Str\
1424 ing\n\x20Expansion,\x20the\x20multi\x20segment\x20variable\x20**does\x20\
1425 not**\x20follow\x20RFC\x206570\x20Section\n\x203.2.3\x20Reserved\x20Expa\
1426 nsion.\x20The\x20reason\x20is\x20that\x20the\x20Reserved\x20Expansion\n\
1427 \x20does\x20not\x20expand\x20special\x20characters\x20like\x20`?`\x20and\
1428 \x20`#`,\x20which\x20would\x20lead\n\x20to\x20invalid\x20URLs.\x20As\x20\
1429 the\x20result,\x20gRPC\x20Transcoding\x20uses\x20a\x20custom\x20encoding\
1430 \n\x20for\x20multi\x20segment\x20variables.\n\n\x20The\x20path\x20variab\
1431 les\x20**must\x20not**\x20refer\x20to\x20any\x20repeated\x20or\x20mapped\
1432 \x20field,\n\x20because\x20client\x20libraries\x20are\x20not\x20capable\
1433 \x20of\x20handling\x20such\x20variable\x20expansion.\n\n\x20The\x20path\
1434 \x20variables\x20**must\x20not**\x20capture\x20the\x20leading\x20\"/\"\
1435 \x20character.\x20The\x20reason\n\x20is\x20that\x20the\x20most\x20common\
1436 \x20use\x20case\x20\"{var}\"\x20does\x20not\x20capture\x20the\x20leading\
1437 \x20\"/\"\n\x20character.\x20For\x20consistency,\x20all\x20path\x20varia\
1438 bles\x20must\x20share\x20the\x20same\x20behavior.\n\n\x20Repeated\x20mes\
1439 sage\x20fields\x20must\x20not\x20be\x20mapped\x20to\x20URL\x20query\x20p\
1440 arameters,\x20because\n\x20no\x20client\x20library\x20can\x20support\x20\
1441 such\x20complicated\x20mapping.\n\n\x20If\x20an\x20API\x20needs\x20to\
1442 \x20use\x20a\x20JSON\x20array\x20for\x20request\x20or\x20response\x20bod\
1443 y,\x20it\x20can\x20map\n\x20the\x20request\x20or\x20response\x20body\x20\
1444 to\x20a\x20repeated\x20field.\x20However,\x20some\x20gRPC\n\x20Transcodi\
1445 ng\x20implementations\x20may\x20not\x20support\x20this\x20feature.\n\n\
1446 \x0b\n\x03\x04\x01\x01\x12\x04\xbb\x02\x08\x10\n\x8f\x01\n\x04\x04\x01\
1447 \x02\0\x12\x04\xc0\x02\x02\x16\x1a\x80\x01\x20Selects\x20a\x20method\x20\
1448 to\x20which\x20this\x20rule\x20applies.\n\n\x20Refer\x20to\x20[selector]\
1449 [google.api.DocumentationRule.selector]\x20for\x20syntax\n\x20details.\n\
1450 \n\r\n\x05\x04\x01\x02\0\x05\x12\x04\xc0\x02\x02\x08\n\r\n\x05\x04\x01\
1451 \x02\0\x01\x12\x04\xc0\x02\t\x11\n\r\n\x05\x04\x01\x02\0\x03\x12\x04\xc0\
1452 \x02\x14\x15\n\xd0\x01\n\x04\x04\x01\x08\0\x12\x06\xc5\x02\x02\xdb\x02\
1453 \x03\x1a\xbf\x01\x20Determines\x20the\x20URL\x20pattern\x20is\x20matched\
1454 \x20by\x20this\x20rules.\x20This\x20pattern\x20can\x20be\n\x20used\x20wi\
1455 th\x20any\x20of\x20the\x20{get|put|post|delete|patch}\x20methods.\x20A\
1456 \x20custom\x20method\n\x20can\x20be\x20defined\x20using\x20the\x20'custo\
1457 m'\x20field.\n\n\r\n\x05\x04\x01\x08\0\x01\x12\x04\xc5\x02\x08\x0f\n\\\n\
1458 \x04\x04\x01\x02\x01\x12\x04\xc8\x02\x04\x13\x1aN\x20Maps\x20to\x20HTTP\
1459 \x20GET.\x20Used\x20for\x20listing\x20and\x20getting\x20information\x20a\
1460 bout\n\x20resources.\n\n\r\n\x05\x04\x01\x02\x01\x05\x12\x04\xc8\x02\x04\
1461 \n\n\r\n\x05\x04\x01\x02\x01\x01\x12\x04\xc8\x02\x0b\x0e\n\r\n\x05\x04\
1462 \x01\x02\x01\x03\x12\x04\xc8\x02\x11\x12\n@\n\x04\x04\x01\x02\x02\x12\
1463 \x04\xcb\x02\x04\x13\x1a2\x20Maps\x20to\x20HTTP\x20PUT.\x20Used\x20for\
1464 \x20replacing\x20a\x20resource.\n\n\r\n\x05\x04\x01\x02\x02\x05\x12\x04\
1465 \xcb\x02\x04\n\n\r\n\x05\x04\x01\x02\x02\x01\x12\x04\xcb\x02\x0b\x0e\n\r\
1466 \n\x05\x04\x01\x02\x02\x03\x12\x04\xcb\x02\x11\x12\nX\n\x04\x04\x01\x02\
1467 \x03\x12\x04\xce\x02\x04\x14\x1aJ\x20Maps\x20to\x20HTTP\x20POST.\x20Used\
1468 \x20for\x20creating\x20a\x20resource\x20or\x20performing\x20an\x20action\
1469 .\n\n\r\n\x05\x04\x01\x02\x03\x05\x12\x04\xce\x02\x04\n\n\r\n\x05\x04\
1470 \x01\x02\x03\x01\x12\x04\xce\x02\x0b\x0f\n\r\n\x05\x04\x01\x02\x03\x03\
1471 \x12\x04\xce\x02\x12\x13\nB\n\x04\x04\x01\x02\x04\x12\x04\xd1\x02\x04\
1472 \x16\x1a4\x20Maps\x20to\x20HTTP\x20DELETE.\x20Used\x20for\x20deleting\
1473 \x20a\x20resource.\n\n\r\n\x05\x04\x01\x02\x04\x05\x12\x04\xd1\x02\x04\n\
1474 \n\r\n\x05\x04\x01\x02\x04\x01\x12\x04\xd1\x02\x0b\x11\n\r\n\x05\x04\x01\
1475 \x02\x04\x03\x12\x04\xd1\x02\x14\x15\nA\n\x04\x04\x01\x02\x05\x12\x04\
1476 \xd4\x02\x04\x15\x1a3\x20Maps\x20to\x20HTTP\x20PATCH.\x20Used\x20for\x20\
1477 updating\x20a\x20resource.\n\n\r\n\x05\x04\x01\x02\x05\x05\x12\x04\xd4\
1478 \x02\x04\n\n\r\n\x05\x04\x01\x02\x05\x01\x12\x04\xd4\x02\x0b\x10\n\r\n\
1479 \x05\x04\x01\x02\x05\x03\x12\x04\xd4\x02\x13\x14\n\x98\x02\n\x04\x04\x01\
1480 \x02\x06\x12\x04\xda\x02\x04!\x1a\x89\x02\x20The\x20custom\x20pattern\
1481 \x20is\x20used\x20for\x20specifying\x20an\x20HTTP\x20method\x20that\x20i\
1482 s\x20not\n\x20included\x20in\x20the\x20`pattern`\x20field,\x20such\x20as\
1483 \x20HEAD,\x20or\x20\"*\"\x20to\x20leave\x20the\n\x20HTTP\x20method\x20un\
1484 specified\x20for\x20this\x20rule.\x20The\x20wild-card\x20rule\x20is\x20u\
1485 seful\n\x20for\x20services\x20that\x20provide\x20content\x20to\x20Web\
1486 \x20(HTML)\x20clients.\n\n\r\n\x05\x04\x01\x02\x06\x06\x12\x04\xda\x02\
1487 \x04\x15\n\r\n\x05\x04\x01\x02\x06\x01\x12\x04\xda\x02\x16\x1c\n\r\n\x05\
1488 \x04\x01\x02\x06\x03\x12\x04\xda\x02\x1f\x20\n\xc4\x02\n\x04\x04\x01\x02\
1489 \x07\x12\x04\xe3\x02\x02\x12\x1a\xb5\x02\x20The\x20name\x20of\x20the\x20\
1490 request\x20field\x20whose\x20value\x20is\x20mapped\x20to\x20the\x20HTTP\
1491 \x20request\n\x20body,\x20or\x20`*`\x20for\x20mapping\x20all\x20request\
1492 \x20fields\x20not\x20captured\x20by\x20the\x20path\n\x20pattern\x20to\
1493 \x20the\x20HTTP\x20body,\x20or\x20omitted\x20for\x20not\x20having\x20any\
1494 \x20HTTP\x20request\x20body.\n\n\x20NOTE:\x20the\x20referred\x20field\
1495 \x20must\x20be\x20present\x20at\x20the\x20top-level\x20of\x20the\x20requ\
1496 est\n\x20message\x20type.\n\n\r\n\x05\x04\x01\x02\x07\x05\x12\x04\xe3\
1497 \x02\x02\x08\n\r\n\x05\x04\x01\x02\x07\x01\x12\x04\xe3\x02\t\r\n\r\n\x05\
1498 \x04\x01\x02\x07\x03\x12\x04\xe3\x02\x10\x11\n\x99\x02\n\x04\x04\x01\x02\
1499 \x08\x12\x04\xeb\x02\x02\x1c\x1a\x8a\x02\x20Optional.\x20The\x20name\x20\
1500 of\x20the\x20response\x20field\x20whose\x20value\x20is\x20mapped\x20to\
1501 \x20the\x20HTTP\n\x20response\x20body.\x20When\x20omitted,\x20the\x20ent\
1502 ire\x20response\x20message\x20will\x20be\x20used\n\x20as\x20the\x20HTTP\
1503 \x20response\x20body.\n\n\x20NOTE:\x20The\x20referred\x20field\x20must\
1504 \x20be\x20present\x20at\x20the\x20top-level\x20of\x20the\x20response\n\
1505 \x20message\x20type.\n\n\r\n\x05\x04\x01\x02\x08\x05\x12\x04\xeb\x02\x02\
1506 \x08\n\r\n\x05\x04\x01\x02\x08\x01\x12\x04\xeb\x02\t\x16\n\r\n\x05\x04\
1507 \x01\x02\x08\x03\x12\x04\xeb\x02\x19\x1b\n\xbb\x01\n\x04\x04\x01\x02\t\
1508 \x12\x04\xf0\x02\x02-\x1a\xac\x01\x20Additional\x20HTTP\x20bindings\x20f\
1509 or\x20the\x20selector.\x20Nested\x20bindings\x20must\n\x20not\x20contain\
1510 \x20an\x20`additional_bindings`\x20field\x20themselves\x20(that\x20is,\n\
1511 \x20the\x20nesting\x20may\x20only\x20be\x20one\x20level\x20deep).\n\n\r\
1512 \n\x05\x04\x01\x02\t\x04\x12\x04\xf0\x02\x02\n\n\r\n\x05\x04\x01\x02\t\
1513 \x06\x12\x04\xf0\x02\x0b\x13\n\r\n\x05\x04\x01\x02\t\x01\x12\x04\xf0\x02\
1514 \x14'\n\r\n\x05\x04\x01\x02\t\x03\x12\x04\xf0\x02*,\nG\n\x02\x04\x02\x12\
1515 \x06\xf4\x02\0\xfa\x02\x01\x1a9\x20A\x20custom\x20pattern\x20is\x20used\
1516 \x20for\x20defining\x20custom\x20HTTP\x20verb.\n\n\x0b\n\x03\x04\x02\x01\
1517 \x12\x04\xf4\x02\x08\x19\n2\n\x04\x04\x02\x02\0\x12\x04\xf6\x02\x02\x12\
1518 \x1a$\x20The\x20name\x20of\x20this\x20custom\x20HTTP\x20verb.\n\n\r\n\
1519 \x05\x04\x02\x02\0\x05\x12\x04\xf6\x02\x02\x08\n\r\n\x05\x04\x02\x02\0\
1520 \x01\x12\x04\xf6\x02\t\r\n\r\n\x05\x04\x02\x02\0\x03\x12\x04\xf6\x02\x10\
1521 \x11\n5\n\x04\x04\x02\x02\x01\x12\x04\xf9\x02\x02\x12\x1a'\x20The\x20pat\
1522 h\x20matched\x20by\x20this\x20custom\x20verb.\n\n\r\n\x05\x04\x02\x02\
1523 \x01\x05\x12\x04\xf9\x02\x02\x08\n\r\n\x05\x04\x02\x02\x01\x01\x12\x04\
1524 \xf9\x02\t\r\n\r\n\x05\x04\x02\x02\x01\x03\x12\x04\xf9\x02\x10\x11b\x06p\
1525 roto3\
1526";
1527
1528static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;
1529
1530fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
1531 ::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
1532}
1533
1534pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
1535 file_descriptor_proto_lazy.get(|| {
1536 parse_descriptor_proto()
1537 })
1538}