prost_types/
protobuf.rs

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