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