ydb_grpc/generated/
google.protobuf.rs

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