Skip to main content

megacommerce_proto/envoy/
google.protobuf.rs

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