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