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}