Skip to main content

proto_types/
protobuf.rs

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