proto_types/
protobuf.rs

1// This file is @generated by prost-build.
2/// The protocol compiler can output a FileDescriptorSet containing the .proto
3/// files it parses.
4
5#[derive(Clone, PartialEq, ::prost::Message)]
6pub struct FileDescriptorSet {
7  #[prost(message, repeated, tag = "1")]
8  pub file: ::prost::alloc::vec::Vec<FileDescriptorProto>,
9}
10/// Describes a complete .proto file.
11
12#[derive(Clone, PartialEq, ::prost::Message)]
13pub struct FileDescriptorProto {
14  /// file name, relative to root of source tree
15  #[prost(string, optional, tag = "1")]
16  pub name: ::core::option::Option<::prost::alloc::string::String>,
17  /// e.g. "foo", "foo.bar", etc.
18  #[prost(string, optional, tag = "2")]
19  pub package: ::core::option::Option<::prost::alloc::string::String>,
20  /// Names of files imported by this file.
21  #[prost(string, repeated, tag = "3")]
22  pub dependency: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
23  /// Indexes of the public imported files in the dependency list above.
24  #[prost(int32, repeated, packed = "false", tag = "10")]
25  pub public_dependency: ::prost::alloc::vec::Vec<i32>,
26  /// Indexes of the weak imported files in the dependency list.
27  /// For Google-internal migration only. Do not use.
28  #[prost(int32, repeated, packed = "false", tag = "11")]
29  pub weak_dependency: ::prost::alloc::vec::Vec<i32>,
30  /// All top-level definitions in this file.
31  #[prost(message, repeated, tag = "4")]
32  pub message_type: ::prost::alloc::vec::Vec<DescriptorProto>,
33  #[prost(message, repeated, tag = "5")]
34  pub enum_type: ::prost::alloc::vec::Vec<EnumDescriptorProto>,
35  #[prost(message, repeated, tag = "6")]
36  pub service: ::prost::alloc::vec::Vec<ServiceDescriptorProto>,
37  #[prost(message, repeated, tag = "7")]
38  pub extension: ::prost::alloc::vec::Vec<FieldDescriptorProto>,
39  #[prost(message, optional, tag = "8")]
40  pub options: ::core::option::Option<FileOptions>,
41  /// This field contains optional information about the original source code.
42  /// You may safely remove this entire field without harming runtime
43  /// functionality of the descriptors -- the information is needed only by
44  /// development tools.
45  #[prost(message, optional, tag = "9")]
46  pub source_code_info: ::core::option::Option<SourceCodeInfo>,
47  /// The syntax of the proto file.
48  /// The supported values are "proto2" and "proto3".
49  #[prost(string, optional, tag = "12")]
50  pub syntax: ::core::option::Option<::prost::alloc::string::String>,
51}
52/// Describes a message type.
53
54#[derive(Clone, PartialEq, ::prost::Message)]
55pub struct DescriptorProto {
56  #[prost(string, optional, tag = "1")]
57  pub name: ::core::option::Option<::prost::alloc::string::String>,
58  #[prost(message, repeated, tag = "2")]
59  pub field: ::prost::alloc::vec::Vec<FieldDescriptorProto>,
60  #[prost(message, repeated, tag = "6")]
61  pub extension: ::prost::alloc::vec::Vec<FieldDescriptorProto>,
62  #[prost(message, repeated, tag = "3")]
63  pub nested_type: ::prost::alloc::vec::Vec<DescriptorProto>,
64  #[prost(message, repeated, tag = "4")]
65  pub enum_type: ::prost::alloc::vec::Vec<EnumDescriptorProto>,
66  #[prost(message, repeated, tag = "5")]
67  pub extension_range: ::prost::alloc::vec::Vec<descriptor_proto::ExtensionRange>,
68  #[prost(message, repeated, tag = "8")]
69  pub oneof_decl: ::prost::alloc::vec::Vec<OneofDescriptorProto>,
70  #[prost(message, optional, tag = "7")]
71  pub options: ::core::option::Option<MessageOptions>,
72  #[prost(message, repeated, tag = "9")]
73  pub reserved_range: ::prost::alloc::vec::Vec<descriptor_proto::ReservedRange>,
74  /// Reserved field names, which may not be used by fields in the same message.
75  /// A given name may only be reserved once.
76  #[prost(string, repeated, tag = "10")]
77  pub reserved_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
78}
79/// Nested message and enum types in `DescriptorProto`.
80pub mod descriptor_proto {
81
82  #[derive(Clone, PartialEq, ::prost::Message)]
83  pub struct ExtensionRange {
84    /// Inclusive.
85    #[prost(int32, optional, tag = "1")]
86    pub start: ::core::option::Option<i32>,
87    /// Exclusive.
88    #[prost(int32, optional, tag = "2")]
89    pub end: ::core::option::Option<i32>,
90    #[prost(message, optional, tag = "3")]
91    pub options: ::core::option::Option<super::ExtensionRangeOptions>,
92  }
93  /// Range of reserved tag numbers. Reserved tag numbers may not be used by
94  /// fields or extension ranges in the same message. Reserved ranges may
95  /// not overlap.
96
97  #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
98  pub struct ReservedRange {
99    /// Inclusive.
100    #[prost(int32, optional, tag = "1")]
101    pub start: ::core::option::Option<i32>,
102    /// Exclusive.
103    #[prost(int32, optional, tag = "2")]
104    pub end: ::core::option::Option<i32>,
105  }
106}
107
108#[derive(Clone, PartialEq, ::prost::Message)]
109pub struct ExtensionRangeOptions {
110  /// The parser stores options it doesn't recognize here. See above.
111  #[prost(message, repeated, tag = "999")]
112  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
113}
114/// Describes a field within a message.
115
116#[derive(Clone, PartialEq, ::prost::Message)]
117pub struct FieldDescriptorProto {
118  #[prost(string, optional, tag = "1")]
119  pub name: ::core::option::Option<::prost::alloc::string::String>,
120  #[prost(int32, optional, tag = "3")]
121  pub number: ::core::option::Option<i32>,
122  #[prost(enumeration = "field_descriptor_proto::Label", optional, tag = "4")]
123  pub label: ::core::option::Option<i32>,
124  /// If type_name is set, this need not be set.  If both this and type_name
125  /// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
126  #[prost(enumeration = "field_descriptor_proto::Type", optional, tag = "5")]
127  pub r#type: ::core::option::Option<i32>,
128  /// For message and enum types, this is the name of the type.  If the name
129  /// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
130  /// rules are used to find the type (i.e. first the nested types within this
131  /// message are searched, then within the parent, on up to the root
132  /// namespace).
133  #[prost(string, optional, tag = "6")]
134  pub type_name: ::core::option::Option<::prost::alloc::string::String>,
135  /// For extensions, this is the name of the type being extended.  It is
136  /// resolved in the same manner as type_name.
137  #[prost(string, optional, tag = "2")]
138  pub extendee: ::core::option::Option<::prost::alloc::string::String>,
139  /// For numeric types, contains the original text representation of the value.
140  /// For booleans, "true" or "false".
141  /// For strings, contains the default text contents (not escaped in any way).
142  /// For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
143  /// TODO(kenton):  Base-64 encode?
144  #[prost(string, optional, tag = "7")]
145  pub default_value: ::core::option::Option<::prost::alloc::string::String>,
146  /// If set, gives the index of a oneof in the containing type's oneof_decl
147  /// list.  This field is a member of that oneof.
148  #[prost(int32, optional, tag = "9")]
149  pub oneof_index: ::core::option::Option<i32>,
150  /// JSON name of this field. The value is set by protocol compiler. If the
151  /// user has set a "json_name" option on this field, that option's value
152  /// will be used. Otherwise, it's deduced from the field's name by converting
153  /// it to camelCase.
154  #[prost(string, optional, tag = "10")]
155  pub json_name: ::core::option::Option<::prost::alloc::string::String>,
156  #[prost(message, optional, tag = "8")]
157  pub options: ::core::option::Option<FieldOptions>,
158  /// If true, this is a proto3 "optional". When a proto3 field is optional, it
159  /// tracks presence regardless of field type.
160  ///
161  /// When proto3_optional is true, this field must be belong to a oneof to
162  /// signal to old proto3 clients that presence is tracked for this field. This
163  /// oneof is known as a "synthetic" oneof, and this field must be its sole
164  /// member (each proto3 optional field gets its own synthetic oneof). Synthetic
165  /// oneofs exist in the descriptor only, and do not generate any API. Synthetic
166  /// oneofs must be ordered after all "real" oneofs.
167  ///
168  /// For message fields, proto3_optional doesn't create any semantic change,
169  /// since non-repeated message fields always track presence. However it still
170  /// indicates the semantic detail of whether the user wrote "optional" or not.
171  /// This can be useful for round-tripping the .proto file. For consistency we
172  /// give message fields a synthetic oneof also, even though it is not required
173  /// to track presence. This is especially important because the parser can't
174  /// tell if a field is a message or an enum, so it must always create a
175  /// synthetic oneof.
176  ///
177  /// Proto2 optional fields do not set this flag, because they already indicate
178  /// optional with `LABEL_OPTIONAL`.
179  #[prost(bool, optional, tag = "17")]
180  pub proto3_optional: ::core::option::Option<bool>,
181}
182/// Nested message and enum types in `FieldDescriptorProto`.
183pub mod field_descriptor_proto {
184
185  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
186  #[repr(i32)]
187  pub enum Type {
188    /// 0 is reserved for errors.
189    /// Order is weird for historical reasons.
190    Double = 1,
191    Float = 2,
192    /// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
193    /// negative values are likely.
194    Int64 = 3,
195    Uint64 = 4,
196    /// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
197    /// negative values are likely.
198    Int32 = 5,
199    Fixed64 = 6,
200    Fixed32 = 7,
201    Bool = 8,
202    String = 9,
203    /// Tag-delimited aggregate.
204    /// Group type is deprecated and not supported in proto3. However, Proto3
205    /// implementations should still be able to parse the group wire format and
206    /// treat group fields as unknown fields.
207    Group = 10,
208    /// Length-delimited aggregate.
209    Message = 11,
210    /// New in version 2.
211    Bytes = 12,
212    Uint32 = 13,
213    Enum = 14,
214    Sfixed32 = 15,
215    Sfixed64 = 16,
216    /// Uses ZigZag encoding.
217    Sint32 = 17,
218    /// Uses ZigZag encoding.
219    Sint64 = 18,
220  }
221  impl Type {
222    /// String value of the enum field names used in the ProtoBuf definition.
223    ///
224    /// The values are not transformed in any way and thus are considered stable
225    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
226    pub fn as_str_name(&self) -> &'static str {
227      match self {
228        Self::Double => "TYPE_DOUBLE",
229        Self::Float => "TYPE_FLOAT",
230        Self::Int64 => "TYPE_INT64",
231        Self::Uint64 => "TYPE_UINT64",
232        Self::Int32 => "TYPE_INT32",
233        Self::Fixed64 => "TYPE_FIXED64",
234        Self::Fixed32 => "TYPE_FIXED32",
235        Self::Bool => "TYPE_BOOL",
236        Self::String => "TYPE_STRING",
237        Self::Group => "TYPE_GROUP",
238        Self::Message => "TYPE_MESSAGE",
239        Self::Bytes => "TYPE_BYTES",
240        Self::Uint32 => "TYPE_UINT32",
241        Self::Enum => "TYPE_ENUM",
242        Self::Sfixed32 => "TYPE_SFIXED32",
243        Self::Sfixed64 => "TYPE_SFIXED64",
244        Self::Sint32 => "TYPE_SINT32",
245        Self::Sint64 => "TYPE_SINT64",
246      }
247    }
248    /// Creates an enum from field names used in the ProtoBuf definition.
249    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
250      match value {
251        "TYPE_DOUBLE" => Some(Self::Double),
252        "TYPE_FLOAT" => Some(Self::Float),
253        "TYPE_INT64" => Some(Self::Int64),
254        "TYPE_UINT64" => Some(Self::Uint64),
255        "TYPE_INT32" => Some(Self::Int32),
256        "TYPE_FIXED64" => Some(Self::Fixed64),
257        "TYPE_FIXED32" => Some(Self::Fixed32),
258        "TYPE_BOOL" => Some(Self::Bool),
259        "TYPE_STRING" => Some(Self::String),
260        "TYPE_GROUP" => Some(Self::Group),
261        "TYPE_MESSAGE" => Some(Self::Message),
262        "TYPE_BYTES" => Some(Self::Bytes),
263        "TYPE_UINT32" => Some(Self::Uint32),
264        "TYPE_ENUM" => Some(Self::Enum),
265        "TYPE_SFIXED32" => Some(Self::Sfixed32),
266        "TYPE_SFIXED64" => Some(Self::Sfixed64),
267        "TYPE_SINT32" => Some(Self::Sint32),
268        "TYPE_SINT64" => Some(Self::Sint64),
269        _ => None,
270      }
271    }
272  }
273
274  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
275  #[repr(i32)]
276  pub enum Label {
277    /// 0 is reserved for errors
278    Optional = 1,
279    Required = 2,
280    Repeated = 3,
281  }
282  impl Label {
283    /// String value of the enum field names used in the ProtoBuf definition.
284    ///
285    /// The values are not transformed in any way and thus are considered stable
286    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
287    pub fn as_str_name(&self) -> &'static str {
288      match self {
289        Self::Optional => "LABEL_OPTIONAL",
290        Self::Required => "LABEL_REQUIRED",
291        Self::Repeated => "LABEL_REPEATED",
292      }
293    }
294    /// Creates an enum from field names used in the ProtoBuf definition.
295    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
296      match value {
297        "LABEL_OPTIONAL" => Some(Self::Optional),
298        "LABEL_REQUIRED" => Some(Self::Required),
299        "LABEL_REPEATED" => Some(Self::Repeated),
300        _ => None,
301      }
302    }
303  }
304}
305/// Describes a oneof.
306
307#[derive(Clone, PartialEq, ::prost::Message)]
308pub struct OneofDescriptorProto {
309  #[prost(string, optional, tag = "1")]
310  pub name: ::core::option::Option<::prost::alloc::string::String>,
311  #[prost(message, optional, tag = "2")]
312  pub options: ::core::option::Option<OneofOptions>,
313}
314/// Describes an enum type.
315
316#[derive(Clone, PartialEq, ::prost::Message)]
317pub struct EnumDescriptorProto {
318  #[prost(string, optional, tag = "1")]
319  pub name: ::core::option::Option<::prost::alloc::string::String>,
320  #[prost(message, repeated, tag = "2")]
321  pub value: ::prost::alloc::vec::Vec<EnumValueDescriptorProto>,
322  #[prost(message, optional, tag = "3")]
323  pub options: ::core::option::Option<EnumOptions>,
324  /// Range of reserved numeric values. Reserved numeric values may not be used
325  /// by enum values in the same enum declaration. Reserved ranges may not
326  /// overlap.
327  #[prost(message, repeated, tag = "4")]
328  pub reserved_range: ::prost::alloc::vec::Vec<enum_descriptor_proto::EnumReservedRange>,
329  /// Reserved enum value names, which may not be reused. A given name may only
330  /// be reserved once.
331  #[prost(string, repeated, tag = "5")]
332  pub reserved_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
333}
334/// Nested message and enum types in `EnumDescriptorProto`.
335pub mod enum_descriptor_proto {
336  /// Range of reserved numeric values. Reserved values may not be used by
337  /// entries in the same enum. Reserved ranges may not overlap.
338  ///
339  /// Note that this is distinct from DescriptorProto.ReservedRange in that it
340  /// is inclusive such that it can appropriately represent the entire int32
341  /// domain.
342
343  #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
344  pub struct EnumReservedRange {
345    /// Inclusive.
346    #[prost(int32, optional, tag = "1")]
347    pub start: ::core::option::Option<i32>,
348    /// Inclusive.
349    #[prost(int32, optional, tag = "2")]
350    pub end: ::core::option::Option<i32>,
351  }
352}
353/// Describes a value within an enum.
354
355#[derive(Clone, PartialEq, ::prost::Message)]
356pub struct EnumValueDescriptorProto {
357  #[prost(string, optional, tag = "1")]
358  pub name: ::core::option::Option<::prost::alloc::string::String>,
359  #[prost(int32, optional, tag = "2")]
360  pub number: ::core::option::Option<i32>,
361  #[prost(message, optional, tag = "3")]
362  pub options: ::core::option::Option<EnumValueOptions>,
363}
364/// Describes a service.
365
366#[derive(Clone, PartialEq, ::prost::Message)]
367pub struct ServiceDescriptorProto {
368  #[prost(string, optional, tag = "1")]
369  pub name: ::core::option::Option<::prost::alloc::string::String>,
370  #[prost(message, repeated, tag = "2")]
371  pub method: ::prost::alloc::vec::Vec<MethodDescriptorProto>,
372  #[prost(message, optional, tag = "3")]
373  pub options: ::core::option::Option<ServiceOptions>,
374}
375/// Describes a method of a service.
376
377#[derive(Clone, PartialEq, ::prost::Message)]
378pub struct MethodDescriptorProto {
379  #[prost(string, optional, tag = "1")]
380  pub name: ::core::option::Option<::prost::alloc::string::String>,
381  /// Input and output type names.  These are resolved in the same way as
382  /// FieldDescriptorProto.type_name, but must refer to a message type.
383  #[prost(string, optional, tag = "2")]
384  pub input_type: ::core::option::Option<::prost::alloc::string::String>,
385  #[prost(string, optional, tag = "3")]
386  pub output_type: ::core::option::Option<::prost::alloc::string::String>,
387  #[prost(message, optional, tag = "4")]
388  pub options: ::core::option::Option<MethodOptions>,
389  /// Identifies if client streams multiple client messages
390  #[prost(bool, optional, tag = "5", default = "false")]
391  pub client_streaming: ::core::option::Option<bool>,
392  /// Identifies if server streams multiple server messages
393  #[prost(bool, optional, tag = "6", default = "false")]
394  pub server_streaming: ::core::option::Option<bool>,
395}
396/// Each of the definitions above may have "options" attached.  These are
397/// just annotations which may cause code to be generated slightly differently
398/// or may contain hints for code that manipulates protocol messages.
399///
400/// Clients may define custom options as extensions of the \*Options messages.
401/// These extensions may not yet be known at parsing time, so the parser cannot
402/// store the values in them.  Instead it stores them in a field in the \*Options
403/// message called uninterpreted_option. This field must have the same name
404/// across all \*Options messages. We then use this field to populate the
405/// extensions when we build a descriptor, at which point all protos have been
406/// parsed and so all extensions are known.
407///
408/// Extension numbers for custom options may be chosen as follows:
409///
410/// * For options which will only be used within a single application or
411///   organization, or for experimental options, use field numbers 50000
412///   through 99999.  It is up to you to ensure that you do not use the
413///   same number for multiple options.
414/// * For options which will be published and used publicly by multiple
415///   independent entities, e-mail protobuf-global-extension-registry@google.com
416///   to reserve extension numbers. Simply provide your project name (e.g.
417///   Objective-C plugin) and your project website (if available) -- there's no
418///   need to explain how you intend to use them. Usually you only need one
419///   extension number. You can declare multiple options with only one extension
420///   number by putting them in a sub-message. See the Custom Options section of
421///   the docs for examples:
422///   <https://developers.google.com/protocol-buffers/docs/proto#options>
423///   If this turns out to be popular, a web service will be set up
424///   to automatically assign option numbers.
425
426#[derive(Clone, PartialEq, ::prost::Message)]
427pub struct FileOptions {
428  /// Sets the Java package where classes generated from this .proto will be
429  /// placed.  By default, the proto package is used, but this is often
430  /// inappropriate because proto packages do not normally start with backwards
431  /// domain names.
432  #[prost(string, optional, tag = "1")]
433  pub java_package: ::core::option::Option<::prost::alloc::string::String>,
434  /// Controls the name of the wrapper Java class generated for the .proto file.
435  /// That class will always contain the .proto file's getDescriptor() method as
436  /// well as any top-level extensions defined in the .proto file.
437  /// If java_multiple_files is disabled, then all the other classes from the
438  /// .proto file will be nested inside the single wrapper outer class.
439  #[prost(string, optional, tag = "8")]
440  pub java_outer_classname: ::core::option::Option<::prost::alloc::string::String>,
441  /// If enabled, then the Java code generator will generate a separate .java
442  /// file for each top-level message, enum, and service defined in the .proto
443  /// file.  Thus, these types will *not* be nested inside the wrapper class
444  /// named by java_outer_classname.  However, the wrapper class will still be
445  /// generated to contain the file's getDescriptor() method as well as any
446  /// top-level extensions defined in the file.
447  #[prost(bool, optional, tag = "10", default = "false")]
448  pub java_multiple_files: ::core::option::Option<bool>,
449  /// This option does nothing.
450  #[deprecated]
451  #[prost(bool, optional, tag = "20")]
452  pub java_generate_equals_and_hash: ::core::option::Option<bool>,
453  /// If set true, then the Java2 code generator will generate code that
454  /// throws an exception whenever an attempt is made to assign a non-UTF-8
455  /// byte sequence to a string field.
456  /// Message reflection will do the same.
457  /// However, an extension field still accepts non-UTF-8 byte sequences.
458  /// This option has no effect on when used with the lite runtime.
459  #[prost(bool, optional, tag = "27", default = "false")]
460  pub java_string_check_utf8: ::core::option::Option<bool>,
461  #[prost(
462    enumeration = "file_options::OptimizeMode",
463    optional,
464    tag = "9",
465    default = "Speed"
466  )]
467  pub optimize_for: ::core::option::Option<i32>,
468  /// Sets the Go package where structs generated from this .proto will be
469  /// placed. If omitted, the Go package will be derived from the following:
470  ///
471  /// * The basename of the package import path, if provided.
472  /// * Otherwise, the package statement in the .proto file, if present.
473  /// * Otherwise, the basename of the .proto file, without extension.
474  #[prost(string, optional, tag = "11")]
475  pub go_package: ::core::option::Option<::prost::alloc::string::String>,
476  /// Should generic services be generated in each language?  "Generic" services
477  /// are not specific to any particular RPC system.  They are generated by the
478  /// main code generators in each language (without additional plugins).
479  /// Generic services were the only kind of service generation supported by
480  /// early versions of google.protobuf.
481  ///
482  /// Generic services are now considered deprecated in favor of using plugins
483  /// that generate code specific to your particular RPC system.  Therefore,
484  /// these default to false.  Old code which depends on generic services should
485  /// explicitly set them to true.
486  #[prost(bool, optional, tag = "16", default = "false")]
487  pub cc_generic_services: ::core::option::Option<bool>,
488  #[prost(bool, optional, tag = "17", default = "false")]
489  pub java_generic_services: ::core::option::Option<bool>,
490  #[prost(bool, optional, tag = "18", default = "false")]
491  pub py_generic_services: ::core::option::Option<bool>,
492  #[prost(bool, optional, tag = "42", default = "false")]
493  pub php_generic_services: ::core::option::Option<bool>,
494  /// Is this file deprecated?
495  /// Depending on the target platform, this can emit Deprecated annotations
496  /// for everything in the file, or it will be completely ignored; in the very
497  /// least, this is a formalization for deprecating files.
498  #[prost(bool, optional, tag = "23", default = "false")]
499  pub deprecated: ::core::option::Option<bool>,
500  /// Enables the use of arenas for the proto messages in this file. This applies
501  /// only to generated classes for C++.
502  #[prost(bool, optional, tag = "31", default = "true")]
503  pub cc_enable_arenas: ::core::option::Option<bool>,
504  /// Sets the objective c class prefix which is prepended to all objective c
505  /// generated classes from this .proto. There is no default.
506  #[prost(string, optional, tag = "36")]
507  pub objc_class_prefix: ::core::option::Option<::prost::alloc::string::String>,
508  /// Namespace for generated classes; defaults to the package.
509  #[prost(string, optional, tag = "37")]
510  pub csharp_namespace: ::core::option::Option<::prost::alloc::string::String>,
511  /// By default Swift generators will take the proto package and CamelCase it
512  /// replacing '.' with underscore and use that to prefix the types/symbols
513  /// defined. When this options is provided, they will use this value instead
514  /// to prefix the types/symbols defined.
515  #[prost(string, optional, tag = "39")]
516  pub swift_prefix: ::core::option::Option<::prost::alloc::string::String>,
517  /// Sets the php class prefix which is prepended to all php generated classes
518  /// from this .proto. Default is empty.
519  #[prost(string, optional, tag = "40")]
520  pub php_class_prefix: ::core::option::Option<::prost::alloc::string::String>,
521  /// Use this option to change the namespace of php generated classes. Default
522  /// is empty. When this option is empty, the package name will be used for
523  /// determining the namespace.
524  #[prost(string, optional, tag = "41")]
525  pub php_namespace: ::core::option::Option<::prost::alloc::string::String>,
526  /// Use this option to change the namespace of php generated metadata classes.
527  /// Default is empty. When this option is empty, the proto file name will be
528  /// used for determining the namespace.
529  #[prost(string, optional, tag = "44")]
530  pub php_metadata_namespace: ::core::option::Option<::prost::alloc::string::String>,
531  /// Use this option to change the package of ruby generated classes. Default
532  /// is empty. When this option is not set, the package name will be used for
533  /// determining the ruby package.
534  #[prost(string, optional, tag = "45")]
535  pub ruby_package: ::core::option::Option<::prost::alloc::string::String>,
536  /// The parser stores options it doesn't recognize here.
537  /// See the documentation for the "Options" section above.
538  #[prost(message, repeated, tag = "999")]
539  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
540}
541/// Nested message and enum types in `FileOptions`.
542pub mod file_options {
543  /// Generated classes can be optimized for speed or code size.
544
545  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
546  #[repr(i32)]
547  pub enum OptimizeMode {
548    /// Generate complete code for parsing, serialization,
549    Speed = 1,
550    /// etc.
551    ///
552    /// Use ReflectionOps to implement these methods.
553    CodeSize = 2,
554    /// Generate code using MessageLite and the lite runtime.
555    LiteRuntime = 3,
556  }
557  impl OptimizeMode {
558    /// String value of the enum field names used in the ProtoBuf definition.
559    ///
560    /// The values are not transformed in any way and thus are considered stable
561    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
562    pub fn as_str_name(&self) -> &'static str {
563      match self {
564        Self::Speed => "SPEED",
565        Self::CodeSize => "CODE_SIZE",
566        Self::LiteRuntime => "LITE_RUNTIME",
567      }
568    }
569    /// Creates an enum from field names used in the ProtoBuf definition.
570    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
571      match value {
572        "SPEED" => Some(Self::Speed),
573        "CODE_SIZE" => Some(Self::CodeSize),
574        "LITE_RUNTIME" => Some(Self::LiteRuntime),
575        _ => None,
576      }
577    }
578  }
579}
580
581#[derive(Clone, PartialEq, ::prost::Message)]
582pub struct MessageOptions {
583  /// Set true to use the old proto1 MessageSet wire format for extensions.
584  /// This is provided for backwards-compatibility with the MessageSet wire
585  /// format.  You should not use this for any other reason:  It's less
586  /// efficient, has fewer features, and is more complicated.
587  ///
588  /// The message must be defined exactly as follows:
589  /// message Foo {
590  /// option message_set_wire_format = true;
591  /// extensions 4 to max;
592  /// }
593  /// Note that the message cannot have any defined fields; MessageSets only
594  /// have extensions.
595  ///
596  /// All extensions of your type must be singular messages; e.g. they cannot
597  /// be int32s, enums, or repeated messages.
598  ///
599  /// Because this is an option, the above two restrictions are not enforced by
600  /// the protocol compiler.
601  #[prost(bool, optional, tag = "1", default = "false")]
602  pub message_set_wire_format: ::core::option::Option<bool>,
603  /// Disables the generation of the standard "descriptor()" accessor, which can
604  /// conflict with a field of the same name.  This is meant to make migration
605  /// from proto1 easier; new code should avoid fields named "descriptor".
606  #[prost(bool, optional, tag = "2", default = "false")]
607  pub no_standard_descriptor_accessor: ::core::option::Option<bool>,
608  /// Is this message deprecated?
609  /// Depending on the target platform, this can emit Deprecated annotations
610  /// for the message, or it will be completely ignored; in the very least,
611  /// this is a formalization for deprecating messages.
612  #[prost(bool, optional, tag = "3", default = "false")]
613  pub deprecated: ::core::option::Option<bool>,
614  /// Whether the message is an automatically generated map entry type for the
615  /// maps field.
616  ///
617  /// For maps fields:
618  /// map\<KeyType, ValueType> map_field = 1;
619  /// The parsed descriptor looks like:
620  /// message MapFieldEntry {
621  /// option map_entry = true;
622  /// optional KeyType key = 1;
623  /// optional ValueType value = 2;
624  /// }
625  /// repeated MapFieldEntry map_field = 1;
626  ///
627  /// Implementations may choose not to generate the map_entry=true message, but
628  /// use a native map in the target language to hold the keys and values.
629  /// The reflection APIs in such implementations still need to work as
630  /// if the field is a repeated message field.
631  ///
632  /// NOTE: Do not set the option in .proto files. Always use the maps syntax
633  /// instead. The option should only be implicitly set by the proto compiler
634  /// parser.
635  #[prost(bool, optional, tag = "7")]
636  pub map_entry: ::core::option::Option<bool>,
637  /// The parser stores options it doesn't recognize here. See above.
638  #[prost(message, repeated, tag = "999")]
639  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
640}
641
642#[derive(Clone, PartialEq, ::prost::Message)]
643pub struct FieldOptions {
644  /// The ctype option instructs the C++ code generator to use a different
645  /// representation of the field than it normally would.  See the specific
646  /// options below.  This option is not yet implemented in the open source
647  /// release -- sorry, we'll try to include it in a future version!
648  #[prost(
649    enumeration = "field_options::CType",
650    optional,
651    tag = "1",
652    default = "String"
653  )]
654  pub ctype: ::core::option::Option<i32>,
655  /// The packed option can be enabled for repeated primitive fields to enable
656  /// a more efficient representation on the wire. Rather than repeatedly
657  /// writing the tag and type for each element, the entire array is encoded as
658  /// a single length-delimited blob. In proto3, only explicit setting it to
659  /// false will avoid using packed encoding.
660  #[prost(bool, optional, tag = "2")]
661  pub packed: ::core::option::Option<bool>,
662  /// The jstype option determines the JavaScript type used for values of the
663  /// field.  The option is permitted only for 64 bit integral and fixed types
664  /// (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
665  /// is represented as JavaScript string, which avoids loss of precision that
666  /// can happen when a large value is converted to a floating point JavaScript.
667  /// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
668  /// use the JavaScript "number" type.  The behavior of the default option
669  /// JS_NORMAL is implementation dependent.
670  ///
671  /// This option is an enum to permit additional types to be added, e.g.
672  /// goog.math.Integer.
673  #[prost(
674    enumeration = "field_options::JsType",
675    optional,
676    tag = "6",
677    default = "JsNormal"
678  )]
679  pub jstype: ::core::option::Option<i32>,
680  /// Should this field be parsed lazily?  Lazy applies only to message-type
681  /// fields.  It means that when the outer message is initially parsed, the
682  /// inner message's contents will not be parsed but instead stored in encoded
683  /// form.  The inner message will actually be parsed when it is first accessed.
684  ///
685  /// This is only a hint.  Implementations are free to choose whether to use
686  /// eager or lazy parsing regardless of the value of this option.  However,
687  /// setting this option true suggests that the protocol author believes that
688  /// using lazy parsing on this field is worth the additional bookkeeping
689  /// overhead typically needed to implement it.
690  ///
691  /// This option does not affect the public interface of any generated code;
692  /// all method signatures remain the same.  Furthermore, thread-safety of the
693  /// interface is not affected by this option; const methods remain safe to
694  /// call from multiple threads concurrently, while non-const methods continue
695  /// to require exclusive access.
696  ///
697  /// Note that implementations may choose not to check required fields within
698  /// a lazy sub-message.  That is, calling IsInitialized() on the outer message
699  /// may return true even if the inner message has missing required fields.
700  /// This is necessary because otherwise the inner message would have to be
701  /// parsed in order to perform the check, defeating the purpose of lazy
702  /// parsing.  An implementation which chooses not to check required fields
703  /// must be consistent about it.  That is, for any particular sub-message, the
704  /// implementation must either *always* check its required fields, or *never*
705  /// check its required fields, regardless of whether or not the message has
706  /// been parsed.
707  #[prost(bool, optional, tag = "5", default = "false")]
708  pub lazy: ::core::option::Option<bool>,
709  /// Is this field deprecated?
710  /// Depending on the target platform, this can emit Deprecated annotations
711  /// for accessors, or it will be completely ignored; in the very least, this
712  /// is a formalization for deprecating fields.
713  #[prost(bool, optional, tag = "3", default = "false")]
714  pub deprecated: ::core::option::Option<bool>,
715  /// For Google-internal migration only. Do not use.
716  #[prost(bool, optional, tag = "10", default = "false")]
717  pub weak: ::core::option::Option<bool>,
718  /// The parser stores options it doesn't recognize here. See above.
719  #[prost(message, repeated, tag = "999")]
720  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
721}
722/// Nested message and enum types in `FieldOptions`.
723pub mod field_options {
724
725  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
726  #[repr(i32)]
727  pub enum CType {
728    /// Default mode.
729    String = 0,
730    Cord = 1,
731    StringPiece = 2,
732  }
733  impl CType {
734    /// String value of the enum field names used in the ProtoBuf definition.
735    ///
736    /// The values are not transformed in any way and thus are considered stable
737    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
738    pub fn as_str_name(&self) -> &'static str {
739      match self {
740        Self::String => "STRING",
741        Self::Cord => "CORD",
742        Self::StringPiece => "STRING_PIECE",
743      }
744    }
745    /// Creates an enum from field names used in the ProtoBuf definition.
746    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
747      match value {
748        "STRING" => Some(Self::String),
749        "CORD" => Some(Self::Cord),
750        "STRING_PIECE" => Some(Self::StringPiece),
751        _ => None,
752      }
753    }
754  }
755
756  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
757  #[repr(i32)]
758  pub enum JsType {
759    /// Use the default type.
760    JsNormal = 0,
761    /// Use JavaScript strings.
762    JsString = 1,
763    /// Use JavaScript numbers.
764    JsNumber = 2,
765  }
766  impl JsType {
767    /// String value of the enum field names used in the ProtoBuf definition.
768    ///
769    /// The values are not transformed in any way and thus are considered stable
770    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
771    pub fn as_str_name(&self) -> &'static str {
772      match self {
773        Self::JsNormal => "JS_NORMAL",
774        Self::JsString => "JS_STRING",
775        Self::JsNumber => "JS_NUMBER",
776      }
777    }
778    /// Creates an enum from field names used in the ProtoBuf definition.
779    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
780      match value {
781        "JS_NORMAL" => Some(Self::JsNormal),
782        "JS_STRING" => Some(Self::JsString),
783        "JS_NUMBER" => Some(Self::JsNumber),
784        _ => None,
785      }
786    }
787  }
788}
789
790#[derive(Clone, PartialEq, ::prost::Message)]
791pub struct OneofOptions {
792  /// The parser stores options it doesn't recognize here. See above.
793  #[prost(message, repeated, tag = "999")]
794  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
795}
796
797#[derive(Clone, PartialEq, ::prost::Message)]
798pub struct EnumOptions {
799  /// Set this option to true to allow mapping different tag names to the same
800  /// value.
801  #[prost(bool, optional, tag = "2")]
802  pub allow_alias: ::core::option::Option<bool>,
803  /// Is this enum deprecated?
804  /// Depending on the target platform, this can emit Deprecated annotations
805  /// for the enum, or it will be completely ignored; in the very least, this
806  /// is a formalization for deprecating enums.
807  #[prost(bool, optional, tag = "3", default = "false")]
808  pub deprecated: ::core::option::Option<bool>,
809  /// The parser stores options it doesn't recognize here. See above.
810  #[prost(message, repeated, tag = "999")]
811  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
812}
813
814#[derive(Clone, PartialEq, ::prost::Message)]
815pub struct EnumValueOptions {
816  /// Is this enum value deprecated?
817  /// Depending on the target platform, this can emit Deprecated annotations
818  /// for the enum value, or it will be completely ignored; in the very least,
819  /// this is a formalization for deprecating enum values.
820  #[prost(bool, optional, tag = "1", default = "false")]
821  pub deprecated: ::core::option::Option<bool>,
822  /// The parser stores options it doesn't recognize here. See above.
823  #[prost(message, repeated, tag = "999")]
824  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
825}
826
827#[derive(Clone, PartialEq, ::prost::Message)]
828pub struct ServiceOptions {
829  /// Is this service deprecated?
830  /// Depending on the target platform, this can emit Deprecated annotations
831  /// for the service, or it will be completely ignored; in the very least,
832  /// this is a formalization for deprecating services.
833  #[prost(bool, optional, tag = "33", default = "false")]
834  pub deprecated: ::core::option::Option<bool>,
835  /// The parser stores options it doesn't recognize here. See above.
836  #[prost(message, repeated, tag = "999")]
837  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
838}
839
840#[derive(Clone, PartialEq, ::prost::Message)]
841pub struct MethodOptions {
842  /// Is this method deprecated?
843  /// Depending on the target platform, this can emit Deprecated annotations
844  /// for the method, or it will be completely ignored; in the very least,
845  /// this is a formalization for deprecating methods.
846  #[prost(bool, optional, tag = "33", default = "false")]
847  pub deprecated: ::core::option::Option<bool>,
848  #[prost(
849    enumeration = "method_options::IdempotencyLevel",
850    optional,
851    tag = "34",
852    default = "IdempotencyUnknown"
853  )]
854  pub idempotency_level: ::core::option::Option<i32>,
855  /// The parser stores options it doesn't recognize here. See above.
856  #[prost(message, repeated, tag = "999")]
857  pub uninterpreted_option: ::prost::alloc::vec::Vec<UninterpretedOption>,
858}
859/// Nested message and enum types in `MethodOptions`.
860pub mod method_options {
861  /// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
862  /// or neither? HTTP based RPC implementation may choose GET verb for safe
863  /// methods, and PUT verb for idempotent methods instead of the default POST.
864
865  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
866  #[repr(i32)]
867  pub enum IdempotencyLevel {
868    IdempotencyUnknown = 0,
869    /// implies idempotent
870    NoSideEffects = 1,
871    /// idempotent, but may have side effects
872    Idempotent = 2,
873  }
874  impl IdempotencyLevel {
875    /// String value of the enum field names used in the ProtoBuf definition.
876    ///
877    /// The values are not transformed in any way and thus are considered stable
878    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
879    pub fn as_str_name(&self) -> &'static str {
880      match self {
881        Self::IdempotencyUnknown => "IDEMPOTENCY_UNKNOWN",
882        Self::NoSideEffects => "NO_SIDE_EFFECTS",
883        Self::Idempotent => "IDEMPOTENT",
884      }
885    }
886    /// Creates an enum from field names used in the ProtoBuf definition.
887    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
888      match value {
889        "IDEMPOTENCY_UNKNOWN" => Some(Self::IdempotencyUnknown),
890        "NO_SIDE_EFFECTS" => Some(Self::NoSideEffects),
891        "IDEMPOTENT" => Some(Self::Idempotent),
892        _ => None,
893      }
894    }
895  }
896}
897/// A message representing a option the parser does not recognize. This only
898/// appears in options protos created by the compiler::Parser class.
899/// DescriptorPool resolves these when building Descriptor objects. Therefore,
900/// options protos in descriptor objects (e.g. returned by Descriptor::options(),
901/// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
902/// in them.
903
904#[derive(Clone, PartialEq, ::prost::Message)]
905pub struct UninterpretedOption {
906  #[prost(message, repeated, tag = "2")]
907  pub name: ::prost::alloc::vec::Vec<uninterpreted_option::NamePart>,
908  /// The value of the uninterpreted option, in whatever type the tokenizer
909  /// identified it as during parsing. Exactly one of these should be set.
910  #[prost(string, optional, tag = "3")]
911  pub identifier_value: ::core::option::Option<::prost::alloc::string::String>,
912  #[prost(uint64, optional, tag = "4")]
913  pub positive_int_value: ::core::option::Option<u64>,
914  #[prost(int64, optional, tag = "5")]
915  pub negative_int_value: ::core::option::Option<i64>,
916  #[prost(double, optional, tag = "6")]
917  pub double_value: ::core::option::Option<f64>,
918  #[prost(bytes = "vec", optional, tag = "7")]
919  pub string_value: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
920  #[prost(string, optional, tag = "8")]
921  pub aggregate_value: ::core::option::Option<::prost::alloc::string::String>,
922}
923/// Nested message and enum types in `UninterpretedOption`.
924pub mod uninterpreted_option {
925  /// The name of the uninterpreted option.  Each string represents a segment in
926  /// a dot-separated name.  is_extension is true iff a segment represents an
927  /// extension (denoted with parentheses in options specs in .proto files).
928  /// E.g.,{ \["foo", false\], \["bar.baz", true\], \["qux", false\] } represents
929  /// "foo.(bar.baz).qux".
930
931  #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
932  pub struct NamePart {
933    #[prost(string, required, tag = "1")]
934    pub name_part: ::prost::alloc::string::String,
935    #[prost(bool, required, tag = "2")]
936    pub is_extension: bool,
937  }
938}
939/// Encapsulates information about the original source file from which a
940/// FileDescriptorProto was generated.
941
942#[derive(Clone, PartialEq, ::prost::Message)]
943pub struct SourceCodeInfo {
944  /// A Location identifies a piece of source code in a .proto file which
945  /// corresponds to a particular definition.  This information is intended
946  /// to be useful to IDEs, code indexers, documentation generators, and similar
947  /// tools.
948  ///
949  /// For example, say we have a file like:
950  /// message Foo {
951  /// optional string foo = 1;
952  /// }
953  /// Let's look at just the field definition:
954  /// optional string foo = 1;
955  /// ^       ^^     ^^  ^  ^^^
956  /// a       bc     de  f  ghi
957  /// We have the following locations:
958  /// span   path               represents
959  /// \[a,i)  \[ 4, 0, 2, 0 \]     The whole field definition.
960  /// \[a,b)  \[ 4, 0, 2, 0, 4 \]  The label (optional).
961  /// \[c,d)  \[ 4, 0, 2, 0, 5 \]  The type (string).
962  /// \[e,f)  \[ 4, 0, 2, 0, 1 \]  The name (foo).
963  /// \[g,h)  \[ 4, 0, 2, 0, 3 \]  The number (1).
964  ///
965  /// Notes:
966  ///
967  /// * A location may refer to a repeated field itself (i.e. not to any
968  ///   particular index within it).  This is used whenever a set of elements are
969  ///   logically enclosed in a single code segment.  For example, an entire
970  ///   extend block (possibly containing multiple extension definitions) will
971  ///   have an outer location whose path refers to the "extensions" repeated
972  ///   field without an index.
973  /// * Multiple locations may have the same path.  This happens when a single
974  ///   logical declaration is spread out across multiple places.  The most
975  ///   obvious example is the "extend" block again -- there may be multiple
976  ///   extend blocks in the same scope, each of which will have the same path.
977  /// * A location's span is not always a subset of its parent's span.  For
978  ///   example, the "extendee" of an extension declaration appears at the
979  ///   beginning of the "extend" block and is shared by all extensions within
980  ///   the block.
981  /// * Just because a location's span is a subset of some other location's span
982  ///   does not mean that it is a descendant.  For example, a "group" defines
983  ///   both a type and a field in a single declaration.  Thus, the locations
984  ///   corresponding to the type and field and their components will overlap.
985  /// * Code which tries to interpret locations should probably be designed to
986  ///   ignore those that it doesn't understand, as more types of locations could
987  ///   be recorded in the future.
988  #[prost(message, repeated, tag = "1")]
989  pub location: ::prost::alloc::vec::Vec<source_code_info::Location>,
990}
991/// Nested message and enum types in `SourceCodeInfo`.
992pub mod source_code_info {
993
994  #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
995  pub struct Location {
996    /// Identifies which part of the FileDescriptorProto was defined at this
997    /// location.
998    ///
999    /// Each element is a field number or an index.  They form a path from
1000    /// the root FileDescriptorProto to the place where the definition.  For
1001    /// example, this path:
1002    /// \[ 4, 3, 2, 7, 1 \]
1003    /// refers to:
1004    /// file.message_type(3)  // 4, 3
1005    /// .field(7)         // 2, 7
1006    /// .name()           // 1
1007    /// This is because FileDescriptorProto.message_type has field number 4:
1008    /// repeated DescriptorProto message_type = 4;
1009    /// and DescriptorProto.field has field number 2:
1010    /// repeated FieldDescriptorProto field = 2;
1011    /// and FieldDescriptorProto.name has field number 1:
1012    /// optional string name = 1;
1013    ///
1014    /// Thus, the above path gives the location of a field name.  If we removed
1015    /// the last element:
1016    /// \[ 4, 3, 2, 7 \]
1017    /// this path refers to the whole field declaration (from the beginning
1018    /// of the label to the terminating semicolon).
1019    #[prost(int32, repeated, tag = "1")]
1020    pub path: ::prost::alloc::vec::Vec<i32>,
1021    /// Always has exactly three or four elements: start line, start column,
1022    /// end line (optional, otherwise assumed same as start line), end column.
1023    /// These are packed into a single field for efficiency.  Note that line
1024    /// and column numbers are zero-based -- typically you will want to add
1025    /// 1 to each before displaying to a user.
1026    #[prost(int32, repeated, tag = "2")]
1027    pub span: ::prost::alloc::vec::Vec<i32>,
1028    /// If this SourceCodeInfo represents a complete declaration, these are any
1029    /// comments appearing before and after the declaration which appear to be
1030    /// attached to the declaration.
1031    ///
1032    /// A series of line comments appearing on consecutive lines, with no other
1033    /// tokens appearing on those lines, will be treated as a single comment.
1034    ///
1035    /// leading_detached_comments will keep paragraphs of comments that appear
1036    /// before (but not connected to) the current element. Each paragraph,
1037    /// separated by empty lines, will be one comment element in the repeated
1038    /// field.
1039    ///
1040    /// Only the comment content is provided; comment markers (e.g. //) are
1041    /// stripped out.  For block comments, leading whitespace and an asterisk
1042    /// will be stripped from the beginning of each line other than the first.
1043    /// Newlines are included in the output.
1044    ///
1045    /// Examples:
1046    ///
1047    /// optional int32 foo = 1;  // Comment attached to foo.
1048    /// // Comment attached to bar.
1049    /// optional int32 bar = 2;
1050    ///
1051    /// optional string baz = 3;
1052    /// // Comment attached to baz.
1053    /// // Another line attached to baz.
1054    ///
1055    /// // Comment attached to qux.
1056    /// //
1057    /// // Another line attached to qux.
1058    /// optional double qux = 4;
1059    ///
1060    /// // Detached comment for corge. This is not leading or trailing comments
1061    /// // to qux or corge because there are blank lines separating it from
1062    /// // both.
1063    ///
1064    /// // Detached comment for corge paragraph 2.
1065    ///
1066    /// optional string corge = 5;
1067    /// /\* Block comment attached
1068    /// \* to corge.  Leading asterisks
1069    /// \* will be removed. */
1070    /// /* Block comment attached to
1071    /// \* grault. \*/
1072    /// optional int32 grault = 6;
1073    ///
1074    /// // ignored detached comments.
1075    #[prost(string, optional, tag = "3")]
1076    pub leading_comments: ::core::option::Option<::prost::alloc::string::String>,
1077    #[prost(string, optional, tag = "4")]
1078    pub trailing_comments: ::core::option::Option<::prost::alloc::string::String>,
1079    #[prost(string, repeated, tag = "6")]
1080    pub leading_detached_comments: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1081  }
1082}
1083/// Describes the relationship between generated code and its original source
1084/// file. A GeneratedCodeInfo message is associated with only one generated
1085/// source file, but may contain references to different source .proto files.
1086
1087#[derive(Clone, PartialEq, ::prost::Message)]
1088pub struct GeneratedCodeInfo {
1089  /// An Annotation connects some span of text in generated code to an element
1090  /// of its generating .proto file.
1091  #[prost(message, repeated, tag = "1")]
1092  pub annotation: ::prost::alloc::vec::Vec<generated_code_info::Annotation>,
1093}
1094/// Nested message and enum types in `GeneratedCodeInfo`.
1095pub mod generated_code_info {
1096
1097  #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1098  pub struct Annotation {
1099    /// Identifies the element in the original source .proto file. This field
1100    /// is formatted the same as SourceCodeInfo.Location.path.
1101    #[prost(int32, repeated, tag = "1")]
1102    pub path: ::prost::alloc::vec::Vec<i32>,
1103    /// Identifies the filesystem path to the original source .proto.
1104    #[prost(string, optional, tag = "2")]
1105    pub source_file: ::core::option::Option<::prost::alloc::string::String>,
1106    /// Identifies the starting offset in bytes in the generated code
1107    /// that relates to the identified object.
1108    #[prost(int32, optional, tag = "3")]
1109    pub begin: ::core::option::Option<i32>,
1110    /// Identifies the ending offset in bytes in the generated code that
1111    /// relates to the identified offset. The end offset should be one past
1112    /// the last relevant byte (so the length of the text = end - begin).
1113    #[prost(int32, optional, tag = "4")]
1114    pub end: ::core::option::Option<i32>,
1115  }
1116}
1117/// `Any` contains an arbitrary serialized protocol buffer message along with a
1118/// URL that describes the type of the serialized message.
1119///
1120/// Protobuf library provides support to pack/unpack Any values in the form
1121/// of utility functions or additional generated methods of the Any type.
1122///
1123/// Example 1: Pack and unpack a message in C++.
1124///
1125/// ```text
1126/// Foo foo = ...;
1127/// Any any;
1128/// any.PackFrom(foo);
1129/// ...
1130/// if (any.UnpackTo(&foo)) {
1131///    ...
1132/// }
1133/// ```
1134///
1135/// Example 2: Pack and unpack a message in Java.
1136///
1137/// ```text
1138/// Foo foo = ...;
1139/// Any any = Any.pack(foo);
1140/// ...
1141/// if (any.is(Foo.class)) {
1142///    foo = any.unpack(Foo.class);
1143/// }
1144/// ```
1145///
1146/// Example 3: Pack and unpack a message in Python.
1147///
1148/// ```text
1149/// foo = Foo(...)
1150/// any = Any()
1151/// any.Pack(foo)
1152/// ...
1153/// if any.Is(Foo.DESCRIPTOR):
1154///    any.Unpack(foo)
1155///    ...
1156/// ```
1157///
1158/// Example 4: Pack and unpack a message in Go
1159///
1160/// ```text
1161///   foo := &pb.Foo{...}
1162///   any, err := anypb.New(foo)
1163///   if err != nil {
1164///     ...
1165///   }
1166///   ...
1167///   foo := &pb.Foo{}
1168///   if err := any.UnmarshalTo(foo); err != nil {
1169///     ...
1170///   }
1171/// ```
1172///
1173/// The pack methods provided by protobuf library will by default use
1174/// 'type.googleapis.com/full.type.name' as the type URL and the unpack
1175/// methods only use the fully qualified type name after the last '/'
1176/// in the type URL, for example "foo.bar.com/x/y.z" will yield type
1177/// name "y.z".
1178///
1179/// # JSON
1180///
1181/// The JSON representation of an `Any` value uses the regular
1182/// representation of the deserialized, embedded message, with an
1183/// additional field `@type` which contains the type URL. Example:
1184///
1185/// ```text
1186/// package google.profile;
1187/// message Person {
1188///    string first_name = 1;
1189///    string last_name = 2;
1190/// }
1191///
1192/// {
1193///    "@type": "type.googleapis.com/google.profile.Person",
1194///    "firstName": <string>,
1195///    "lastName": <string>
1196/// }
1197/// ```
1198///
1199/// If the embedded message type is well-known and has a custom JSON
1200/// representation, that representation will be embedded adding a field
1201/// `value` which holds the custom JSON in addition to the `@type`
1202/// field. Example (for message \[google.protobuf.Duration\]\[\]):
1203///
1204/// ```text
1205/// {
1206///    "@type": "type.googleapis.com/google.protobuf.Duration",
1207///    "value": "1.212s"
1208/// }
1209/// ```
1210
1211#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1212pub struct Any {
1213  /// A URL/resource name that uniquely identifies the type of the serialized
1214  /// protocol buffer message. This string must contain at least
1215  /// one "/" character. The last segment of the URL's path must represent
1216  /// the fully qualified name of the type (as in
1217  /// `path/google.protobuf.Duration`). The name should be in a canonical form
1218  /// (e.g., leading "." is not accepted).
1219  ///
1220  /// In practice, teams usually precompile into the binary all types that they
1221  /// expect it to use in the context of Any. However, for URLs which use the
1222  /// scheme `http`, `https`, or no scheme, one can optionally set up a type
1223  /// server that maps type URLs to message definitions as follows:
1224  ///
1225  /// * If no scheme is provided, `https` is assumed.
1226  /// * An HTTP GET on the URL must yield a \[google.protobuf.Type\]\[\]
1227  ///   value in binary format, or produce an error.
1228  /// * Applications are allowed to cache lookup results based on the
1229  ///   URL, or have them precompiled into a binary to avoid any
1230  ///   lookup. Therefore, binary compatibility needs to be preserved
1231  ///   on changes to types. (Use versioned type names to manage
1232  ///   breaking changes.)
1233  ///
1234  /// Note: this functionality is not currently available in the official
1235  /// protobuf release, and it is not used for type URLs beginning with
1236  /// type.googleapis.com.
1237  ///
1238  /// Schemes other than `http`, `https` (or the empty scheme) might be
1239  /// used with implementation specific semantics.
1240  #[prost(string, tag = "1")]
1241  pub type_url: ::prost::alloc::string::String,
1242  /// Must be a valid serialized protocol buffer of the above specified type.
1243  #[prost(bytes = "vec", tag = "2")]
1244  pub value: ::prost::alloc::vec::Vec<u8>,
1245}
1246/// `SourceContext` represents information about the source of a
1247/// protobuf element, like the file in which it is defined.
1248
1249#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1250pub struct SourceContext {
1251  /// The path-qualified name of the .proto file that contained the associated
1252  /// protobuf element.  For example: `"google/protobuf/source_context.proto"`.
1253  #[prost(string, tag = "1")]
1254  pub file_name: ::prost::alloc::string::String,
1255}
1256/// A protocol buffer message type.
1257
1258#[derive(Clone, PartialEq, ::prost::Message)]
1259pub struct Type {
1260  /// The fully qualified message name.
1261  #[prost(string, tag = "1")]
1262  pub name: ::prost::alloc::string::String,
1263  /// The list of fields.
1264  #[prost(message, repeated, tag = "2")]
1265  pub fields: ::prost::alloc::vec::Vec<Field>,
1266  /// The list of types appearing in `oneof` definitions in this type.
1267  #[prost(string, repeated, tag = "3")]
1268  pub oneofs: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1269  /// The protocol buffer options.
1270  #[prost(message, repeated, tag = "4")]
1271  pub options: ::prost::alloc::vec::Vec<Option>,
1272  /// The source context.
1273  #[prost(message, optional, tag = "5")]
1274  pub source_context: ::core::option::Option<SourceContext>,
1275  /// The source syntax.
1276  #[prost(enumeration = "Syntax", tag = "6")]
1277  pub syntax: i32,
1278}
1279/// A single field of a message type.
1280
1281#[derive(Clone, PartialEq, ::prost::Message)]
1282pub struct Field {
1283  /// The field type.
1284  #[prost(enumeration = "field::Kind", tag = "1")]
1285  pub kind: i32,
1286  /// The field cardinality.
1287  #[prost(enumeration = "field::Cardinality", tag = "2")]
1288  pub cardinality: i32,
1289  /// The field number.
1290  #[prost(int32, tag = "3")]
1291  pub number: i32,
1292  /// The field name.
1293  #[prost(string, tag = "4")]
1294  pub name: ::prost::alloc::string::String,
1295  /// The field type URL, without the scheme, for message or enumeration
1296  /// types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
1297  #[prost(string, tag = "6")]
1298  pub type_url: ::prost::alloc::string::String,
1299  /// The index of the field type in `Type.oneofs`, for message or enumeration
1300  /// types. The first type has index 1; zero means the type is not in the list.
1301  #[prost(int32, tag = "7")]
1302  pub oneof_index: i32,
1303  /// Whether to use alternative packed wire representation.
1304  #[prost(bool, tag = "8")]
1305  pub packed: bool,
1306  /// The protocol buffer options.
1307  #[prost(message, repeated, tag = "9")]
1308  pub options: ::prost::alloc::vec::Vec<Option>,
1309  /// The field JSON name.
1310  #[prost(string, tag = "10")]
1311  pub json_name: ::prost::alloc::string::String,
1312  /// The string value of the default value of this field. Proto2 syntax only.
1313  #[prost(string, tag = "11")]
1314  pub default_value: ::prost::alloc::string::String,
1315}
1316/// Nested message and enum types in `Field`.
1317pub mod field {
1318  /// Basic field types.
1319
1320  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1321  #[repr(i32)]
1322  pub enum Kind {
1323    /// Field type unknown.
1324    TypeUnknown = 0,
1325    /// Field type double.
1326    TypeDouble = 1,
1327    /// Field type float.
1328    TypeFloat = 2,
1329    /// Field type int64.
1330    TypeInt64 = 3,
1331    /// Field type uint64.
1332    TypeUint64 = 4,
1333    /// Field type int32.
1334    TypeInt32 = 5,
1335    /// Field type fixed64.
1336    TypeFixed64 = 6,
1337    /// Field type fixed32.
1338    TypeFixed32 = 7,
1339    /// Field type bool.
1340    TypeBool = 8,
1341    /// Field type string.
1342    TypeString = 9,
1343    /// Field type group. Proto2 syntax only, and deprecated.
1344    TypeGroup = 10,
1345    /// Field type message.
1346    TypeMessage = 11,
1347    /// Field type bytes.
1348    TypeBytes = 12,
1349    /// Field type uint32.
1350    TypeUint32 = 13,
1351    /// Field type enum.
1352    TypeEnum = 14,
1353    /// Field type sfixed32.
1354    TypeSfixed32 = 15,
1355    /// Field type sfixed64.
1356    TypeSfixed64 = 16,
1357    /// Field type sint32.
1358    TypeSint32 = 17,
1359    /// Field type sint64.
1360    TypeSint64 = 18,
1361  }
1362  impl Kind {
1363    /// String value of the enum field names used in the ProtoBuf definition.
1364    ///
1365    /// The values are not transformed in any way and thus are considered stable
1366    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1367    pub fn as_str_name(&self) -> &'static str {
1368      match self {
1369        Self::TypeUnknown => "TYPE_UNKNOWN",
1370        Self::TypeDouble => "TYPE_DOUBLE",
1371        Self::TypeFloat => "TYPE_FLOAT",
1372        Self::TypeInt64 => "TYPE_INT64",
1373        Self::TypeUint64 => "TYPE_UINT64",
1374        Self::TypeInt32 => "TYPE_INT32",
1375        Self::TypeFixed64 => "TYPE_FIXED64",
1376        Self::TypeFixed32 => "TYPE_FIXED32",
1377        Self::TypeBool => "TYPE_BOOL",
1378        Self::TypeString => "TYPE_STRING",
1379        Self::TypeGroup => "TYPE_GROUP",
1380        Self::TypeMessage => "TYPE_MESSAGE",
1381        Self::TypeBytes => "TYPE_BYTES",
1382        Self::TypeUint32 => "TYPE_UINT32",
1383        Self::TypeEnum => "TYPE_ENUM",
1384        Self::TypeSfixed32 => "TYPE_SFIXED32",
1385        Self::TypeSfixed64 => "TYPE_SFIXED64",
1386        Self::TypeSint32 => "TYPE_SINT32",
1387        Self::TypeSint64 => "TYPE_SINT64",
1388      }
1389    }
1390    /// Creates an enum from field names used in the ProtoBuf definition.
1391    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1392      match value {
1393        "TYPE_UNKNOWN" => Some(Self::TypeUnknown),
1394        "TYPE_DOUBLE" => Some(Self::TypeDouble),
1395        "TYPE_FLOAT" => Some(Self::TypeFloat),
1396        "TYPE_INT64" => Some(Self::TypeInt64),
1397        "TYPE_UINT64" => Some(Self::TypeUint64),
1398        "TYPE_INT32" => Some(Self::TypeInt32),
1399        "TYPE_FIXED64" => Some(Self::TypeFixed64),
1400        "TYPE_FIXED32" => Some(Self::TypeFixed32),
1401        "TYPE_BOOL" => Some(Self::TypeBool),
1402        "TYPE_STRING" => Some(Self::TypeString),
1403        "TYPE_GROUP" => Some(Self::TypeGroup),
1404        "TYPE_MESSAGE" => Some(Self::TypeMessage),
1405        "TYPE_BYTES" => Some(Self::TypeBytes),
1406        "TYPE_UINT32" => Some(Self::TypeUint32),
1407        "TYPE_ENUM" => Some(Self::TypeEnum),
1408        "TYPE_SFIXED32" => Some(Self::TypeSfixed32),
1409        "TYPE_SFIXED64" => Some(Self::TypeSfixed64),
1410        "TYPE_SINT32" => Some(Self::TypeSint32),
1411        "TYPE_SINT64" => Some(Self::TypeSint64),
1412        _ => None,
1413      }
1414    }
1415  }
1416  /// Whether a field is optional, required, or repeated.
1417
1418  #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1419  #[repr(i32)]
1420  pub enum Cardinality {
1421    /// For fields with unknown cardinality.
1422    Unknown = 0,
1423    /// For optional fields.
1424    Optional = 1,
1425    /// For required fields. Proto2 syntax only.
1426    Required = 2,
1427    /// For repeated fields.
1428    Repeated = 3,
1429  }
1430  impl Cardinality {
1431    /// String value of the enum field names used in the ProtoBuf definition.
1432    ///
1433    /// The values are not transformed in any way and thus are considered stable
1434    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1435    pub fn as_str_name(&self) -> &'static str {
1436      match self {
1437        Self::Unknown => "CARDINALITY_UNKNOWN",
1438        Self::Optional => "CARDINALITY_OPTIONAL",
1439        Self::Required => "CARDINALITY_REQUIRED",
1440        Self::Repeated => "CARDINALITY_REPEATED",
1441      }
1442    }
1443    /// Creates an enum from field names used in the ProtoBuf definition.
1444    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1445      match value {
1446        "CARDINALITY_UNKNOWN" => Some(Self::Unknown),
1447        "CARDINALITY_OPTIONAL" => Some(Self::Optional),
1448        "CARDINALITY_REQUIRED" => Some(Self::Required),
1449        "CARDINALITY_REPEATED" => Some(Self::Repeated),
1450        _ => None,
1451      }
1452    }
1453  }
1454}
1455/// Enum type definition.
1456
1457#[derive(Clone, PartialEq, ::prost::Message)]
1458pub struct Enum {
1459  /// Enum type name.
1460  #[prost(string, tag = "1")]
1461  pub name: ::prost::alloc::string::String,
1462  /// Enum value definitions.
1463  #[prost(message, repeated, tag = "2")]
1464  pub enumvalue: ::prost::alloc::vec::Vec<EnumValue>,
1465  /// Protocol buffer options.
1466  #[prost(message, repeated, tag = "3")]
1467  pub options: ::prost::alloc::vec::Vec<Option>,
1468  /// The source context.
1469  #[prost(message, optional, tag = "4")]
1470  pub source_context: ::core::option::Option<SourceContext>,
1471  /// The source syntax.
1472  #[prost(enumeration = "Syntax", tag = "5")]
1473  pub syntax: i32,
1474}
1475/// Enum value definition.
1476
1477#[derive(Clone, PartialEq, ::prost::Message)]
1478pub struct EnumValue {
1479  /// Enum value name.
1480  #[prost(string, tag = "1")]
1481  pub name: ::prost::alloc::string::String,
1482  /// Enum value number.
1483  #[prost(int32, tag = "2")]
1484  pub number: i32,
1485  /// Protocol buffer options.
1486  #[prost(message, repeated, tag = "3")]
1487  pub options: ::prost::alloc::vec::Vec<Option>,
1488}
1489/// A protocol buffer option, which can be attached to a message, field,
1490/// enumeration, etc.
1491
1492#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1493pub struct Option {
1494  /// The option's name. For protobuf built-in options (options defined in
1495  /// descriptor.proto), this is the short name. For example, `"map_entry"`.
1496  /// For custom options, it should be the fully-qualified name. For example,
1497  /// `"google.api.http"`.
1498  #[prost(string, tag = "1")]
1499  pub name: ::prost::alloc::string::String,
1500  /// The option's value packed in an Any message. If the value is a primitive,
1501  /// the corresponding wrapper type defined in google/protobuf/wrappers.proto
1502  /// should be used. If the value is an enum, it should be stored as an int32
1503  /// value using the google.protobuf.Int32Value type.
1504  #[prost(message, optional, tag = "2")]
1505  pub value: ::core::option::Option<Any>,
1506}
1507/// The syntax in which a protocol buffer element is defined.
1508
1509#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1510#[repr(i32)]
1511pub enum Syntax {
1512  /// Syntax `proto2`.
1513  Proto2 = 0,
1514  /// Syntax `proto3`.
1515  Proto3 = 1,
1516}
1517impl Syntax {
1518  /// String value of the enum field names used in the ProtoBuf definition.
1519  ///
1520  /// The values are not transformed in any way and thus are considered stable
1521  /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1522  pub fn as_str_name(&self) -> &'static str {
1523    match self {
1524      Self::Proto2 => "SYNTAX_PROTO2",
1525      Self::Proto3 => "SYNTAX_PROTO3",
1526    }
1527  }
1528  /// Creates an enum from field names used in the ProtoBuf definition.
1529  pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1530    match value {
1531      "SYNTAX_PROTO2" => Some(Self::Proto2),
1532      "SYNTAX_PROTO3" => Some(Self::Proto3),
1533      _ => None,
1534    }
1535  }
1536}
1537/// Api is a light-weight descriptor for an API Interface.
1538///
1539/// Interfaces are also described as "protocol buffer services" in some contexts,
1540/// such as by the "service" keyword in a .proto file, but they are different
1541/// from API Services, which represent a concrete implementation of an interface
1542/// as opposed to simply a description of methods and bindings. They are also
1543/// sometimes simply referred to as "APIs" in other contexts, such as the name of
1544/// this message itself. See <https://cloud.google.com/apis/design/glossary> for
1545/// detailed terminology.
1546
1547#[derive(Clone, PartialEq, ::prost::Message)]
1548pub struct Api {
1549  /// The fully qualified name of this interface, including package name
1550  /// followed by the interface's simple name.
1551  #[prost(string, tag = "1")]
1552  pub name: ::prost::alloc::string::String,
1553  /// The methods of this interface, in unspecified order.
1554  #[prost(message, repeated, tag = "2")]
1555  pub methods: ::prost::alloc::vec::Vec<Method>,
1556  /// Any metadata attached to the interface.
1557  #[prost(message, repeated, tag = "3")]
1558  pub options: ::prost::alloc::vec::Vec<Option>,
1559  /// A version string for this interface. If specified, must have the form
1560  /// `major-version.minor-version`, as in `1.10`. If the minor version is
1561  /// omitted, it defaults to zero. If the entire version field is empty, the
1562  /// major version is derived from the package name, as outlined below. If the
1563  /// field is not empty, the version in the package name will be verified to be
1564  /// consistent with what is provided here.
1565  ///
1566  /// The versioning schema uses [semantic
1567  /// versioning](<http://semver.org>) where the major version number
1568  /// indicates a breaking change and the minor version an additive,
1569  /// non-breaking change. Both version numbers are signals to users
1570  /// what to expect from different versions, and should be carefully
1571  /// chosen based on the product plan.
1572  ///
1573  /// The major version is also reflected in the package name of the
1574  /// interface, which must end in `v<major-version>`, as in
1575  /// `google.feature.v1`. For major versions 0 and 1, the suffix can
1576  /// be omitted. Zero major versions must only be used for
1577  /// experimental, non-GA interfaces.
1578  #[prost(string, tag = "4")]
1579  pub version: ::prost::alloc::string::String,
1580  /// Source context for the protocol buffer service represented by this
1581  /// message.
1582  #[prost(message, optional, tag = "5")]
1583  pub source_context: ::core::option::Option<SourceContext>,
1584  /// Included interfaces. See \[Mixin\]\[\].
1585  #[prost(message, repeated, tag = "6")]
1586  pub mixins: ::prost::alloc::vec::Vec<Mixin>,
1587  /// The source syntax of the service.
1588  #[prost(enumeration = "Syntax", tag = "7")]
1589  pub syntax: i32,
1590}
1591/// Method represents a method of an API interface.
1592
1593#[derive(Clone, PartialEq, ::prost::Message)]
1594pub struct Method {
1595  /// The simple name of this method.
1596  #[prost(string, tag = "1")]
1597  pub name: ::prost::alloc::string::String,
1598  /// A URL of the input message type.
1599  #[prost(string, tag = "2")]
1600  pub request_type_url: ::prost::alloc::string::String,
1601  /// If true, the request is streamed.
1602  #[prost(bool, tag = "3")]
1603  pub request_streaming: bool,
1604  /// The URL of the output message type.
1605  #[prost(string, tag = "4")]
1606  pub response_type_url: ::prost::alloc::string::String,
1607  /// If true, the response is streamed.
1608  #[prost(bool, tag = "5")]
1609  pub response_streaming: bool,
1610  /// Any metadata attached to the method.
1611  #[prost(message, repeated, tag = "6")]
1612  pub options: ::prost::alloc::vec::Vec<Option>,
1613  /// The source syntax of this method.
1614  #[prost(enumeration = "Syntax", tag = "7")]
1615  pub syntax: i32,
1616}
1617/// Declares an API Interface to be included in this interface. The including
1618/// interface must redeclare all the methods from the included interface, but
1619/// documentation and options are inherited as follows:
1620///
1621/// * If after comment and whitespace stripping, the documentation
1622///   string of the redeclared method is empty, it will be inherited
1623///   from the original method.
1624///
1625/// * Each annotation belonging to the service config (http,
1626///   visibility) which is not set in the redeclared method will be
1627///   inherited.
1628///
1629/// * If an http annotation is inherited, the path pattern will be
1630///   modified as follows. Any version prefix will be replaced by the
1631///   version of the including interface plus the \[root\]\[\] path if
1632///   specified.
1633///
1634/// Example of a simple mixin:
1635///
1636/// ```text
1637/// package google.acl.v1;
1638/// service AccessControl {
1639///    // Get the underlying ACL object.
1640///    rpc GetAcl(GetAclRequest) returns (Acl) {
1641///      option (google.api.http).get = "/v1/{resource=**}:getAcl";
1642///    }
1643/// }
1644///
1645/// package google.storage.v2;
1646/// service Storage {
1647///    rpc GetAcl(GetAclRequest) returns (Acl);
1648///
1649///    // Get a data record.
1650///    rpc GetData(GetDataRequest) returns (Data) {
1651///      option (google.api.http).get = "/v2/{resource=**}";
1652///    }
1653/// }
1654/// ```
1655///
1656/// Example of a mixin configuration:
1657///
1658/// ```text
1659/// apis:
1660/// - name: google.storage.v2.Storage
1661///    mixins:
1662///    - name: google.acl.v1.AccessControl
1663/// ```
1664///
1665/// The mixin construct implies that all methods in `AccessControl` are
1666/// also declared with same name and request/response types in
1667/// `Storage`. A documentation generator or annotation processor will
1668/// see the effective `Storage.GetAcl` method after inheriting
1669/// documentation and annotations as follows:
1670///
1671/// ```text
1672/// service Storage {
1673///    // Get the underlying ACL object.
1674///    rpc GetAcl(GetAclRequest) returns (Acl) {
1675///      option (google.api.http).get = "/v2/{resource=**}:getAcl";
1676///    }
1677///    ...
1678/// }
1679/// ```
1680///
1681/// Note how the version in the path pattern changed from `v1` to `v2`.
1682///
1683/// If the `root` field in the mixin is specified, it should be a
1684/// relative path under which inherited HTTP paths are placed. Example:
1685///
1686/// ```text
1687/// apis:
1688/// - name: google.storage.v2.Storage
1689///    mixins:
1690///    - name: google.acl.v1.AccessControl
1691///      root: acls
1692/// ```
1693///
1694/// This implies the following inherited HTTP annotation:
1695///
1696/// ```text
1697/// service Storage {
1698///    // Get the underlying ACL object.
1699///    rpc GetAcl(GetAclRequest) returns (Acl) {
1700///      option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
1701///    }
1702///    ...
1703/// }
1704/// ```
1705
1706#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1707pub struct Mixin {
1708  /// The fully qualified name of the interface which is included.
1709  #[prost(string, tag = "1")]
1710  pub name: ::prost::alloc::string::String,
1711  /// If non-empty specifies a path under which inherited HTTP paths
1712  /// are rooted.
1713  #[prost(string, tag = "2")]
1714  pub root: ::prost::alloc::string::String,
1715}
1716/// A Duration represents a signed, fixed-length span of time represented
1717/// as a count of seconds and fractions of seconds at nanosecond
1718/// resolution. It is independent of any calendar and concepts like "day"
1719/// or "month". It is related to Timestamp in that the difference between
1720/// two Timestamp values is a Duration and it can be added or subtracted
1721/// from a Timestamp. Range is approximately +-10,000 years.
1722///
1723/// # Examples
1724///
1725/// Example 1: Compute Duration from two Timestamps in pseudo code.
1726///
1727/// ```text
1728/// Timestamp start = ...;
1729/// Timestamp end = ...;
1730/// Duration duration = ...;
1731///
1732/// duration.seconds = end.seconds - start.seconds;
1733/// duration.nanos = end.nanos - start.nanos;
1734///
1735/// if (duration.seconds < 0 && duration.nanos > 0) {
1736///    duration.seconds += 1;
1737///    duration.nanos -= 1000000000;
1738/// } else if (duration.seconds > 0 && duration.nanos < 0) {
1739///    duration.seconds -= 1;
1740///    duration.nanos += 1000000000;
1741/// }
1742/// ```
1743///
1744/// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
1745///
1746/// ```text
1747/// Timestamp start = ...;
1748/// Duration duration = ...;
1749/// Timestamp end = ...;
1750///
1751/// end.seconds = start.seconds + duration.seconds;
1752/// end.nanos = start.nanos + duration.nanos;
1753///
1754/// if (end.nanos < 0) {
1755///    end.seconds -= 1;
1756///    end.nanos += 1000000000;
1757/// } else if (end.nanos >= 1000000000) {
1758///    end.seconds += 1;
1759///    end.nanos -= 1000000000;
1760/// }
1761/// ```
1762///
1763/// Example 3: Compute Duration from datetime.timedelta in Python.
1764///
1765/// ```text
1766/// td = datetime.timedelta(days=3, minutes=10)
1767/// duration = Duration()
1768/// duration.FromTimedelta(td)
1769/// ```
1770///
1771/// # JSON Mapping
1772///
1773/// In JSON format, the Duration type is encoded as a string rather than an
1774/// object, where the string ends in the suffix "s" (indicating seconds) and
1775/// is preceded by the number of seconds, with nanoseconds expressed as
1776/// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
1777/// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
1778/// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
1779/// microsecond should be expressed in JSON format as "3.000001s".
1780
1781#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1782pub struct Duration {
1783  /// Signed seconds of the span of time. Must be from -315,576,000,000
1784  /// to +315,576,000,000 inclusive. Note: these bounds are computed from:
1785  /// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
1786  #[prost(int64, tag = "1")]
1787  pub seconds: i64,
1788  /// Signed fractions of a second at nanosecond resolution of the span
1789  /// of time. Durations less than one second are represented with a 0
1790  /// `seconds` field and a positive or negative `nanos` field. For durations
1791  /// of one second or more, a non-zero value for the `nanos` field must be
1792  /// of the same sign as the `seconds` field. Must be from -999,999,999
1793  /// to +999,999,999 inclusive.
1794  #[prost(int32, tag = "2")]
1795  pub nanos: i32,
1796}
1797/// `FieldMask` represents a set of symbolic field paths, for example:
1798///
1799/// ```text
1800/// paths: "f.a"
1801/// paths: "f.b.d"
1802/// ```
1803///
1804/// Here `f` represents a field in some root message, `a` and `b`
1805/// fields in the message found in `f`, and `d` a field found in the
1806/// message in `f.b`.
1807///
1808/// Field masks are used to specify a subset of fields that should be
1809/// returned by a get operation or modified by an update operation.
1810/// Field masks also have a custom JSON encoding (see below).
1811///
1812/// # Field Masks in Projections
1813///
1814/// When used in the context of a projection, a response message or
1815/// sub-message is filtered by the API to only contain those fields as
1816/// specified in the mask. For example, if the mask in the previous
1817/// example is applied to a response message as follows:
1818///
1819/// ```text
1820/// f {
1821///    a : 22
1822///    b {
1823///      d : 1
1824///      x : 2
1825///    }
1826///    y : 13
1827/// }
1828/// z: 8
1829/// ```
1830///
1831/// The result will not contain specific values for fields x,y and z
1832/// (their value will be set to the default, and omitted in proto text
1833/// output):
1834///
1835/// ```text
1836/// f {
1837///    a : 22
1838///    b {
1839///      d : 1
1840///    }
1841/// }
1842/// ```
1843///
1844/// A repeated field is not allowed except at the last position of a
1845/// paths string.
1846///
1847/// If a FieldMask object is not present in a get operation, the
1848/// operation applies to all fields (as if a FieldMask of all fields
1849/// had been specified).
1850///
1851/// Note that a field mask does not necessarily apply to the
1852/// top-level response message. In case of a REST get operation, the
1853/// field mask applies directly to the response, but in case of a REST
1854/// list operation, the mask instead applies to each individual message
1855/// in the returned resource list. In case of a REST custom method,
1856/// other definitions may be used. Where the mask applies will be
1857/// clearly documented together with its declaration in the API.  In
1858/// any case, the effect on the returned resource/resources is required
1859/// behavior for APIs.
1860///
1861/// # Field Masks in Update Operations
1862///
1863/// A field mask in update operations specifies which fields of the
1864/// targeted resource are going to be updated. The API is required
1865/// to only change the values of the fields as specified in the mask
1866/// and leave the others untouched. If a resource is passed in to
1867/// describe the updated values, the API ignores the values of all
1868/// fields not covered by the mask.
1869///
1870/// If a repeated field is specified for an update operation, new values will
1871/// be appended to the existing repeated field in the target resource. Note that
1872/// a repeated field is only allowed in the last position of a `paths` string.
1873///
1874/// If a sub-message is specified in the last position of the field mask for an
1875/// update operation, then new value will be merged into the existing sub-message
1876/// in the target resource.
1877///
1878/// For example, given the target message:
1879///
1880/// ```text
1881/// f {
1882///    b {
1883///      d: 1
1884///      x: 2
1885///    }
1886///    c: \[1\]
1887/// }
1888/// ```
1889///
1890/// And an update message:
1891///
1892/// ```text
1893/// f {
1894///    b {
1895///      d: 10
1896///    }
1897///    c: \[2\]
1898/// }
1899/// ```
1900///
1901/// then if the field mask is:
1902///
1903/// paths: \["f.b", "f.c"\]
1904///
1905/// then the result will be:
1906///
1907/// ```text
1908/// f {
1909///    b {
1910///      d: 10
1911///      x: 2
1912///    }
1913///    c: \[1, 2\]
1914/// }
1915/// ```
1916///
1917/// An implementation may provide options to override this default behavior for
1918/// repeated and message fields.
1919///
1920/// In order to reset a field's value to the default, the field must
1921/// be in the mask and set to the default value in the provided resource.
1922/// Hence, in order to reset all fields of a resource, provide a default
1923/// instance of the resource and set all fields in the mask, or do
1924/// not provide a mask as described below.
1925///
1926/// If a field mask is not present on update, the operation applies to
1927/// all fields (as if a field mask of all fields has been specified).
1928/// Note that in the presence of schema evolution, this may mean that
1929/// fields the client does not know and has therefore not filled into
1930/// the request will be reset to their default. If this is unwanted
1931/// behavior, a specific service may require a client to always specify
1932/// a field mask, producing an error if not.
1933///
1934/// As with get operations, the location of the resource which
1935/// describes the updated values in the request message depends on the
1936/// operation kind. In any case, the effect of the field mask is
1937/// required to be honored by the API.
1938///
1939/// ## Considerations for HTTP REST
1940///
1941/// The HTTP kind of an update operation which uses a field mask must
1942/// be set to PATCH instead of PUT in order to satisfy HTTP semantics
1943/// (PUT must only be used for full updates).
1944///
1945/// # JSON Encoding of Field Masks
1946///
1947/// In JSON, a field mask is encoded as a single string where paths are
1948/// separated by a comma. Fields name in each path are converted
1949/// to/from lower-camel naming conventions.
1950///
1951/// As an example, consider the following message declarations:
1952///
1953/// ```text
1954/// message Profile {
1955///    User user = 1;
1956///    Photo photo = 2;
1957/// }
1958/// message User {
1959///    string display_name = 1;
1960///    string address = 2;
1961/// }
1962/// ```
1963///
1964/// In proto a field mask for `Profile` may look as such:
1965///
1966/// ```text
1967/// mask {
1968///    paths: "user.display_name"
1969///    paths: "photo"
1970/// }
1971/// ```
1972///
1973/// In JSON, the same mask is represented as below:
1974///
1975/// ```text
1976/// {
1977///    mask: "user.displayName,photo"
1978/// }
1979/// ```
1980///
1981/// # Field Masks and Oneof Fields
1982///
1983/// Field masks treat fields in oneofs just as regular fields. Consider the
1984/// following message:
1985///
1986/// ```text
1987/// message SampleMessage {
1988///    oneof test_oneof {
1989///      string name = 4;
1990///      SubMessage sub_message = 9;
1991///    }
1992/// }
1993/// ```
1994///
1995/// The field mask can be:
1996///
1997/// ```text
1998/// mask {
1999///    paths: "name"
2000/// }
2001/// ```
2002///
2003/// Or:
2004///
2005/// ```text
2006/// mask {
2007///    paths: "sub_message"
2008/// }
2009/// ```
2010///
2011/// Note that oneof type names ("test_oneof" in this case) cannot be used in
2012/// paths.
2013///
2014/// ## Field Mask Verification
2015///
2016/// The implementation of any API method which has a FieldMask type field in the
2017/// request should verify the included field paths, and return an
2018/// `INVALID_ARGUMENT` error if any path is unmappable.
2019
2020#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2021pub struct FieldMask {
2022  /// The set of field mask paths.
2023  #[prost(string, repeated, tag = "1")]
2024  pub paths: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2025}
2026/// `Struct` represents a structured data value, consisting of fields
2027/// which map to dynamically typed values. In some languages, `Struct`
2028/// might be supported by a native representation. For example, in
2029/// scripting languages like JS a struct is represented as an
2030/// object. The details of that representation are described together
2031/// with the proto support for the language.
2032///
2033/// The JSON representation for `Struct` is JSON object.
2034
2035#[derive(Clone, PartialEq, ::prost::Message)]
2036#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2037pub struct Struct {
2038  /// Unordered map of dynamically typed values.
2039  #[prost(btree_map = "string, message", tag = "1")]
2040  pub fields: ::prost::alloc::collections::BTreeMap<::prost::alloc::string::String, Value>,
2041}
2042/// `Value` represents a dynamically typed value which can be either
2043/// null, a number, a string, a boolean, a recursive struct value, or a
2044/// list of values. A producer of value is expected to set one of these
2045/// variants. Absence of any variant indicates an error.
2046///
2047/// The JSON representation for `Value` is JSON value.
2048
2049#[derive(Clone, PartialEq, ::prost::Message)]
2050pub struct Value {
2051  /// The kind of value.
2052  #[prost(oneof = "value::Kind", tags = "1, 2, 3, 4, 5, 6")]
2053  pub kind: ::core::option::Option<value::Kind>,
2054}
2055/// Nested message and enum types in `Value`.
2056pub mod value {
2057  /// The kind of value.
2058
2059  #[derive(Clone, PartialEq, ::prost::Oneof)]
2060  pub enum Kind {
2061    /// Represents a null value.
2062    #[prost(enumeration = "super::NullValue", tag = "1")]
2063    NullValue(i32),
2064    /// Represents a double value.
2065    #[prost(double, tag = "2")]
2066    NumberValue(f64),
2067    /// Represents a string value.
2068    #[prost(string, tag = "3")]
2069    StringValue(::prost::alloc::string::String),
2070    /// Represents a boolean value.
2071    #[prost(bool, tag = "4")]
2072    BoolValue(bool),
2073    /// Represents a structured value.
2074    #[prost(message, tag = "5")]
2075    StructValue(super::Struct),
2076    /// Represents a repeated `Value`.
2077    #[prost(message, tag = "6")]
2078    ListValue(super::ListValue),
2079  }
2080}
2081/// `ListValue` is a wrapper around a repeated field of values.
2082///
2083/// The JSON representation for `ListValue` is JSON array.
2084
2085#[derive(Clone, PartialEq, ::prost::Message)]
2086pub struct ListValue {
2087  /// Repeated field of dynamically typed values.
2088  #[prost(message, repeated, tag = "1")]
2089  pub values: ::prost::alloc::vec::Vec<Value>,
2090}
2091/// `NullValue` is a singleton enumeration to represent the null value for the
2092/// `Value` type union.
2093///
2094/// The JSON representation for `NullValue` is JSON `null`.
2095
2096#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2097#[repr(i32)]
2098pub enum NullValue {
2099  /// Null value.
2100  NullValue = 0,
2101}
2102impl NullValue {
2103  /// String value of the enum field names used in the ProtoBuf definition.
2104  ///
2105  /// The values are not transformed in any way and thus are considered stable
2106  /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2107  pub fn as_str_name(&self) -> &'static str {
2108    match self {
2109      Self::NullValue => "NULL_VALUE",
2110    }
2111  }
2112  /// Creates an enum from field names used in the ProtoBuf definition.
2113  pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2114    match value {
2115      "NULL_VALUE" => Some(Self::NullValue),
2116      _ => None,
2117    }
2118  }
2119}
2120/// A Timestamp represents a point in time independent of any time zone or local
2121/// calendar, encoded as a count of seconds and fractions of seconds at
2122/// nanosecond resolution. The count is relative to an epoch at UTC midnight on
2123/// January 1, 1970, in the proleptic Gregorian calendar which extends the
2124/// Gregorian calendar backwards to year one.
2125///
2126/// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
2127/// second table is needed for interpretation, using a [24-hour linear
2128/// smear](<https://developers.google.com/time/smear>).
2129///
2130/// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
2131/// restricting to that range, we ensure that we can convert to and from [RFC
2132/// 3339](<https://www.ietf.org/rfc/rfc3339.txt>) date strings.
2133///
2134/// # Examples
2135///
2136/// Example 1: Compute Timestamp from POSIX `time()`.
2137///
2138/// ```text
2139/// Timestamp timestamp;
2140/// timestamp.set_seconds(time(NULL));
2141/// timestamp.set_nanos(0);
2142/// ```
2143///
2144/// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
2145///
2146/// ```text
2147/// struct timeval tv;
2148/// gettimeofday(&tv, NULL);
2149///
2150/// Timestamp timestamp;
2151/// timestamp.set_seconds(tv.tv_sec);
2152/// timestamp.set_nanos(tv.tv_usec * 1000);
2153/// ```
2154///
2155/// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
2156///
2157/// ```text
2158/// FILETIME ft;
2159/// GetSystemTimeAsFileTime(&ft);
2160/// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
2161///
2162/// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
2163/// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
2164/// Timestamp timestamp;
2165/// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
2166/// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
2167/// ```
2168///
2169/// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
2170///
2171/// ```text
2172/// long millis = System.currentTimeMillis();
2173///
2174/// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
2175///      .setNanos((int) ((millis % 1000) * 1000000)).build();
2176/// ```
2177///
2178/// Example 5: Compute Timestamp from Java `Instant.now()`.
2179///
2180/// ```text
2181/// Instant now = Instant.now();
2182///
2183/// Timestamp timestamp =
2184///      Timestamp.newBuilder().setSeconds(now.getEpochSecond())
2185///          .setNanos(now.getNano()).build();
2186/// ```
2187///
2188/// Example 6: Compute Timestamp from current time in Python.
2189///
2190/// ```text
2191/// timestamp = Timestamp()
2192/// timestamp.GetCurrentTime()
2193/// ```
2194///
2195/// # JSON Mapping
2196///
2197/// In JSON format, the Timestamp type is encoded as a string in the
2198/// [RFC 3339](<https://www.ietf.org/rfc/rfc3339.txt>) format. That is, the
2199/// format is "{year}-{month}-{day}T{hour}:{min}:{sec}\[.{frac_sec}\]Z"
2200/// where {year} is always expressed using four digits while {month}, {day},
2201/// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
2202/// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
2203/// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
2204/// is required. A proto3 JSON serializer should always use UTC (as indicated by
2205/// "Z") when printing the Timestamp type and a proto3 JSON parser should be
2206/// able to accept both UTC and other timezones (as indicated by an offset).
2207///
2208/// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
2209/// 01:30 UTC on January 15, 2017.
2210///
2211/// In JavaScript, one can convert a Date object to this format using the
2212/// standard
2213/// [toISOString()](<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString>)
2214/// method. In Python, a standard `datetime.datetime` object can be converted
2215/// to this format using
2216/// [`strftime`](<https://docs.python.org/2/library/time.html#time.strftime>) with
2217/// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
2218/// the Joda Time's [`ISODateTimeFormat.dateTime()`](<http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D>) to obtain a formatter capable of generating timestamps in this format.
2219
2220#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2221pub struct Timestamp {
2222  /// Represents seconds of UTC time since Unix epoch
2223  /// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
2224  /// 9999-12-31T23:59:59Z inclusive.
2225  #[prost(int64, tag = "1")]
2226  pub seconds: i64,
2227  /// Non-negative fractions of a second at nanosecond resolution. Negative
2228  /// second values with fractions must still have non-negative nanos values
2229  /// that count forward in time. Must be from 0 to 999,999,999
2230  /// inclusive.
2231  #[prost(int32, tag = "2")]
2232  pub nanos: i32,
2233}
2234
2235/// A generic empty message that you can re-use to avoid defining duplicated
2236/// empty messages in your APIs. A typical example is to use it as the request
2237/// or the response type of an API method. For instance:
2238///
2239///      service Foo {
2240///        rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
2241///      }
2242///
2243#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2244pub struct Empty {}
2245
2246/// Wrapper message for `double`.
2247///
2248/// The JSON representation for `DoubleValue` is JSON number.
2249///
2250/// Not recommended for use in new APIs, but still useful for legacy APIs and
2251/// has no plan to be removed.
2252#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2253#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2254pub struct DoubleValue {
2255  /// The double value.
2256  #[prost(double, tag = "1")]
2257  pub value: f64,
2258}
2259/// Wrapper message for `float`.
2260///
2261/// The JSON representation for `FloatValue` is JSON number.
2262///
2263/// Not recommended for use in new APIs, but still useful for legacy APIs and
2264/// has no plan to be removed.
2265#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2266#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2267pub struct FloatValue {
2268  /// The float value.
2269  #[prost(float, tag = "1")]
2270  pub value: f32,
2271}
2272/// Wrapper message for `int64`.
2273///
2274/// The JSON representation for `Int64Value` is JSON string.
2275///
2276/// Not recommended for use in new APIs, but still useful for legacy APIs and
2277/// has no plan to be removed.
2278#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2279#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2280pub struct Int64Value {
2281  /// The int64 value.
2282  #[prost(int64, tag = "1")]
2283  pub value: i64,
2284}
2285/// Wrapper message for `uint64`.
2286///
2287/// The JSON representation for `UInt64Value` is JSON string.
2288///
2289/// Not recommended for use in new APIs, but still useful for legacy APIs and
2290/// has no plan to be removed.
2291#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2292#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2293pub struct UInt64Value {
2294  /// The uint64 value.
2295  #[prost(uint64, tag = "1")]
2296  pub value: u64,
2297}
2298/// Wrapper message for `int32`.
2299///
2300/// The JSON representation for `Int32Value` is JSON number.
2301///
2302/// Not recommended for use in new APIs, but still useful for legacy APIs and
2303/// has no plan to be removed.
2304#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2305#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2306pub struct Int32Value {
2307  /// The int32 value.
2308  #[prost(int32, tag = "1")]
2309  pub value: i32,
2310}
2311/// Wrapper message for `uint32`.
2312///
2313/// The JSON representation for `UInt32Value` is JSON number.
2314///
2315/// Not recommended for use in new APIs, but still useful for legacy APIs and
2316/// has no plan to be removed.
2317#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2318#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2319pub struct UInt32Value {
2320  /// The uint32 value.
2321  #[prost(uint32, tag = "1")]
2322  pub value: u32,
2323}
2324/// Wrapper message for `bool`.
2325///
2326/// The JSON representation for `BoolValue` is JSON `true` and `false`.
2327///
2328/// Not recommended for use in new APIs, but still useful for legacy APIs and
2329/// has no plan to be removed.
2330#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
2331#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2332pub struct BoolValue {
2333  /// The bool value.
2334  #[prost(bool, tag = "1")]
2335  pub value: bool,
2336}
2337/// Wrapper message for `string`.
2338///
2339/// The JSON representation for `StringValue` is JSON string.
2340///
2341/// Not recommended for use in new APIs, but still useful for legacy APIs and
2342/// has no plan to be removed.
2343#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2344#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2345pub struct StringValue {
2346  /// The string value.
2347  #[prost(string, tag = "1")]
2348  pub value: ::prost::alloc::string::String,
2349}
2350/// Wrapper message for `bytes`.
2351///
2352/// The JSON representation for `BytesValue` is JSON string.
2353///
2354/// Not recommended for use in new APIs, but still useful for legacy APIs and
2355/// has no plan to be removed.
2356#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2357pub struct BytesValue {
2358  /// The bytes value.
2359  #[prost(bytes = "bytes", tag = "1")]
2360  pub value: ::prost::bytes::Bytes,
2361}