nominal_api/proto/
google.protobuf.rs

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