Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / google-proto-files / google / protobuf / descriptor.proto
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 //     * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 //     * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 // Author: kenton@google.com (Kenton Varda)
32 //  Based on original Protocol Buffers design by
33 //  Sanjay Ghemawat, Jeff Dean, and others.
34 //
35 // The messages in this file describe the definitions found in .proto files.
36 // A valid .proto file can be translated directly to a FileDescriptorProto
37 // without any other information (e.g. without reading its imports).
38
39
40 syntax = "proto2";
41
42 package google.protobuf;
43 option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor";
44 option java_package = "com.google.protobuf";
45 option java_outer_classname = "DescriptorProtos";
46 option csharp_namespace = "Google.Protobuf.Reflection";
47 option objc_class_prefix = "GPB";
48 option cc_enable_arenas = true;
49
50 // descriptor.proto must be optimized for speed because reflection-based
51 // algorithms don't work during bootstrapping.
52 option optimize_for = SPEED;
53
54 // The protocol compiler can output a FileDescriptorSet containing the .proto
55 // files it parses.
56 message FileDescriptorSet {
57   repeated FileDescriptorProto file = 1;
58 }
59
60 // Describes a complete .proto file.
61 message FileDescriptorProto {
62   optional string name = 1;       // file name, relative to root of source tree
63   optional string package = 2;    // e.g. "foo", "foo.bar", etc.
64
65   // Names of files imported by this file.
66   repeated string dependency = 3;
67   // Indexes of the public imported files in the dependency list above.
68   repeated int32 public_dependency = 10;
69   // Indexes of the weak imported files in the dependency list.
70   // For Google-internal migration only. Do not use.
71   repeated int32 weak_dependency = 11;
72
73   // All top-level definitions in this file.
74   repeated DescriptorProto message_type = 4;
75   repeated EnumDescriptorProto enum_type = 5;
76   repeated ServiceDescriptorProto service = 6;
77   repeated FieldDescriptorProto extension = 7;
78
79   optional FileOptions options = 8;
80
81   // This field contains optional information about the original source code.
82   // You may safely remove this entire field without harming runtime
83   // functionality of the descriptors -- the information is needed only by
84   // development tools.
85   optional SourceCodeInfo source_code_info = 9;
86
87   // The syntax of the proto file.
88   // The supported values are "proto2" and "proto3".
89   optional string syntax = 12;
90 }
91
92 // Describes a message type.
93 message DescriptorProto {
94   optional string name = 1;
95
96   repeated FieldDescriptorProto field = 2;
97   repeated FieldDescriptorProto extension = 6;
98
99   repeated DescriptorProto nested_type = 3;
100   repeated EnumDescriptorProto enum_type = 4;
101
102   message ExtensionRange {
103     optional int32 start = 1;
104     optional int32 end = 2;
105
106     optional ExtensionRangeOptions options = 3;
107   }
108   repeated ExtensionRange extension_range = 5;
109
110   repeated OneofDescriptorProto oneof_decl = 8;
111
112   optional MessageOptions options = 7;
113
114   // Range of reserved tag numbers. Reserved tag numbers may not be used by
115   // fields or extension ranges in the same message. Reserved ranges may
116   // not overlap.
117   message ReservedRange {
118     optional int32 start = 1; // Inclusive.
119     optional int32 end = 2;   // Exclusive.
120   }
121   repeated ReservedRange reserved_range = 9;
122   // Reserved field names, which may not be used by fields in the same message.
123   // A given name may only be reserved once.
124   repeated string reserved_name = 10;
125 }
126
127 message ExtensionRangeOptions {
128   // The parser stores options it doesn't recognize here. See above.
129   repeated UninterpretedOption uninterpreted_option = 999;
130
131   // Clients can define custom options in extensions of this message. See above.
132   extensions 1000 to max;
133 }
134
135 // Describes a field within a message.
136 message FieldDescriptorProto {
137   enum Type {
138     // 0 is reserved for errors.
139     // Order is weird for historical reasons.
140     TYPE_DOUBLE         = 1;
141     TYPE_FLOAT          = 2;
142     // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
143     // negative values are likely.
144     TYPE_INT64          = 3;
145     TYPE_UINT64         = 4;
146     // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
147     // negative values are likely.
148     TYPE_INT32          = 5;
149     TYPE_FIXED64        = 6;
150     TYPE_FIXED32        = 7;
151     TYPE_BOOL           = 8;
152     TYPE_STRING         = 9;
153     // Tag-delimited aggregate.
154     // Group type is deprecated and not supported in proto3. However, Proto3
155     // implementations should still be able to parse the group wire format and
156     // treat group fields as unknown fields.
157     TYPE_GROUP          = 10;
158     TYPE_MESSAGE        = 11;  // Length-delimited aggregate.
159
160     // New in version 2.
161     TYPE_BYTES          = 12;
162     TYPE_UINT32         = 13;
163     TYPE_ENUM           = 14;
164     TYPE_SFIXED32       = 15;
165     TYPE_SFIXED64       = 16;
166     TYPE_SINT32         = 17;  // Uses ZigZag encoding.
167     TYPE_SINT64         = 18;  // Uses ZigZag encoding.
168   };
169
170   enum Label {
171     // 0 is reserved for errors
172     LABEL_OPTIONAL      = 1;
173     LABEL_REQUIRED      = 2;
174     LABEL_REPEATED      = 3;
175   };
176
177   optional string name = 1;
178   optional int32 number = 3;
179   optional Label label = 4;
180
181   // If type_name is set, this need not be set.  If both this and type_name
182   // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
183   optional Type type = 5;
184
185   // For message and enum types, this is the name of the type.  If the name
186   // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
187   // rules are used to find the type (i.e. first the nested types within this
188   // message are searched, then within the parent, on up to the root
189   // namespace).
190   optional string type_name = 6;
191
192   // For extensions, this is the name of the type being extended.  It is
193   // resolved in the same manner as type_name.
194   optional string extendee = 2;
195
196   // For numeric types, contains the original text representation of the value.
197   // For booleans, "true" or "false".
198   // For strings, contains the default text contents (not escaped in any way).
199   // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
200   // TODO(kenton):  Base-64 encode?
201   optional string default_value = 7;
202
203   // If set, gives the index of a oneof in the containing type's oneof_decl
204   // list.  This field is a member of that oneof.
205   optional int32 oneof_index = 9;
206
207   // JSON name of this field. The value is set by protocol compiler. If the
208   // user has set a "json_name" option on this field, that option's value
209   // will be used. Otherwise, it's deduced from the field's name by converting
210   // it to camelCase.
211   optional string json_name = 10;
212
213   optional FieldOptions options = 8;
214 }
215
216 // Describes a oneof.
217 message OneofDescriptorProto {
218   optional string name = 1;
219   optional OneofOptions options = 2;
220 }
221
222 // Describes an enum type.
223 message EnumDescriptorProto {
224   optional string name = 1;
225
226   repeated EnumValueDescriptorProto value = 2;
227
228   optional EnumOptions options = 3;
229
230   // Range of reserved numeric values. Reserved values may not be used by
231   // entries in the same enum. Reserved ranges may not overlap.
232   //
233   // Note that this is distinct from DescriptorProto.ReservedRange in that it
234   // is inclusive such that it can appropriately represent the entire int32
235   // domain.
236   message EnumReservedRange {
237     optional int32 start = 1; // Inclusive.
238     optional int32 end = 2;   // Inclusive.
239   }
240
241   // Range of reserved numeric values. Reserved numeric values may not be used
242   // by enum values in the same enum declaration. Reserved ranges may not
243   // overlap.
244   repeated EnumReservedRange reserved_range = 4;
245
246   // Reserved enum value names, which may not be reused. A given name may only
247   // be reserved once.
248   repeated string reserved_name = 5;
249 }
250
251 // Describes a value within an enum.
252 message EnumValueDescriptorProto {
253   optional string name = 1;
254   optional int32 number = 2;
255
256   optional EnumValueOptions options = 3;
257 }
258
259 // Describes a service.
260 message ServiceDescriptorProto {
261   optional string name = 1;
262   repeated MethodDescriptorProto method = 2;
263
264   optional ServiceOptions options = 3;
265 }
266
267 // Describes a method of a service.
268 message MethodDescriptorProto {
269   optional string name = 1;
270
271   // Input and output type names.  These are resolved in the same way as
272   // FieldDescriptorProto.type_name, but must refer to a message type.
273   optional string input_type = 2;
274   optional string output_type = 3;
275
276   optional MethodOptions options = 4;
277
278   // Identifies if client streams multiple client messages
279   optional bool client_streaming = 5 [default=false];
280   // Identifies if server streams multiple server messages
281   optional bool server_streaming = 6 [default=false];
282 }
283
284
285 // ===================================================================
286 // Options
287
288 // Each of the definitions above may have "options" attached.  These are
289 // just annotations which may cause code to be generated slightly differently
290 // or may contain hints for code that manipulates protocol messages.
291 //
292 // Clients may define custom options as extensions of the *Options messages.
293 // These extensions may not yet be known at parsing time, so the parser cannot
294 // store the values in them.  Instead it stores them in a field in the *Options
295 // message called uninterpreted_option. This field must have the same name
296 // across all *Options messages. We then use this field to populate the
297 // extensions when we build a descriptor, at which point all protos have been
298 // parsed and so all extensions are known.
299 //
300 // Extension numbers for custom options may be chosen as follows:
301 // * For options which will only be used within a single application or
302 //   organization, or for experimental options, use field numbers 50000
303 //   through 99999.  It is up to you to ensure that you do not use the
304 //   same number for multiple options.
305 // * For options which will be published and used publicly by multiple
306 //   independent entities, e-mail protobuf-global-extension-registry@google.com
307 //   to reserve extension numbers. Simply provide your project name (e.g.
308 //   Objective-C plugin) and your project website (if available) -- there's no
309 //   need to explain how you intend to use them. Usually you only need one
310 //   extension number. You can declare multiple options with only one extension
311 //   number by putting them in a sub-message. See the Custom Options section of
312 //   the docs for examples:
313 //   https://developers.google.com/protocol-buffers/docs/proto#options
314 //   If this turns out to be popular, a web service will be set up
315 //   to automatically assign option numbers.
316
317
318 message FileOptions {
319
320   // Sets the Java package where classes generated from this .proto will be
321   // placed.  By default, the proto package is used, but this is often
322   // inappropriate because proto packages do not normally start with backwards
323   // domain names.
324   optional string java_package = 1;
325
326
327   // If set, all the classes from the .proto file are wrapped in a single
328   // outer class with the given name.  This applies to both Proto1
329   // (equivalent to the old "--one_java_file" option) and Proto2 (where
330   // a .proto always translates to a single class, but you may want to
331   // explicitly choose the class name).
332   optional string java_outer_classname = 8;
333
334   // If set true, then the Java code generator will generate a separate .java
335   // file for each top-level message, enum, and service defined in the .proto
336   // file.  Thus, these types will *not* be nested inside the outer class
337   // named by java_outer_classname.  However, the outer class will still be
338   // generated to contain the file's getDescriptor() method as well as any
339   // top-level extensions defined in the file.
340   optional bool java_multiple_files = 10 [default=false];
341
342   // This option does nothing.
343   optional bool java_generate_equals_and_hash = 20 [deprecated=true];
344
345   // If set true, then the Java2 code generator will generate code that
346   // throws an exception whenever an attempt is made to assign a non-UTF-8
347   // byte sequence to a string field.
348   // Message reflection will do the same.
349   // However, an extension field still accepts non-UTF-8 byte sequences.
350   // This option has no effect on when used with the lite runtime.
351   optional bool java_string_check_utf8 = 27 [default=false];
352
353
354   // Generated classes can be optimized for speed or code size.
355   enum OptimizeMode {
356     SPEED = 1;        // Generate complete code for parsing, serialization,
357                       // etc.
358     CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
359     LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
360   }
361   optional OptimizeMode optimize_for = 9 [default=SPEED];
362
363   // Sets the Go package where structs generated from this .proto will be
364   // placed. If omitted, the Go package will be derived from the following:
365   //   - The basename of the package import path, if provided.
366   //   - Otherwise, the package statement in the .proto file, if present.
367   //   - Otherwise, the basename of the .proto file, without extension.
368   optional string go_package = 11;
369
370
371
372   // Should generic services be generated in each language?  "Generic" services
373   // are not specific to any particular RPC system.  They are generated by the
374   // main code generators in each language (without additional plugins).
375   // Generic services were the only kind of service generation supported by
376   // early versions of google.protobuf.
377   //
378   // Generic services are now considered deprecated in favor of using plugins
379   // that generate code specific to your particular RPC system.  Therefore,
380   // these default to false.  Old code which depends on generic services should
381   // explicitly set them to true.
382   optional bool cc_generic_services = 16 [default=false];
383   optional bool java_generic_services = 17 [default=false];
384   optional bool py_generic_services = 18 [default=false];
385   optional bool php_generic_services = 42 [default=false];
386
387   // Is this file deprecated?
388   // Depending on the target platform, this can emit Deprecated annotations
389   // for everything in the file, or it will be completely ignored; in the very
390   // least, this is a formalization for deprecating files.
391   optional bool deprecated = 23 [default=false];
392
393   // Enables the use of arenas for the proto messages in this file. This applies
394   // only to generated classes for C++.
395   optional bool cc_enable_arenas = 31 [default=false];
396
397
398   // Sets the objective c class prefix which is prepended to all objective c
399   // generated classes from this .proto. There is no default.
400   optional string objc_class_prefix = 36;
401
402   // Namespace for generated classes; defaults to the package.
403   optional string csharp_namespace = 37;
404
405   // By default Swift generators will take the proto package and CamelCase it
406   // replacing '.' with underscore and use that to prefix the types/symbols
407   // defined. When this options is provided, they will use this value instead
408   // to prefix the types/symbols defined.
409   optional string swift_prefix = 39;
410
411   // Sets the php class prefix which is prepended to all php generated classes
412   // from this .proto. Default is empty.
413   optional string php_class_prefix = 40;
414
415   // Use this option to change the namespace of php generated classes. Default
416   // is empty. When this option is empty, the package name will be used for
417   // determining the namespace.
418   optional string php_namespace = 41;
419
420   // Use this option to change the namespace of php generated metadata classes.
421   // Default is empty. When this option is empty, the proto file name will be used
422   // for determining the namespace.
423   optional string php_metadata_namespace = 44;
424
425   // Use this option to change the package of ruby generated classes. Default
426   // is empty. When this option is not set, the package name will be used for
427   // determining the ruby package.
428   optional string ruby_package = 45;
429
430   // The parser stores options it doesn't recognize here.
431   // See the documentation for the "Options" section above.
432   repeated UninterpretedOption uninterpreted_option = 999;
433
434   // Clients can define custom options in extensions of this message.
435   // See the documentation for the "Options" section above.
436   extensions 1000 to max;
437
438   reserved 38;
439 }
440
441 message MessageOptions {
442   // Set true to use the old proto1 MessageSet wire format for extensions.
443   // This is provided for backwards-compatibility with the MessageSet wire
444   // format.  You should not use this for any other reason:  It's less
445   // efficient, has fewer features, and is more complicated.
446   //
447   // The message must be defined exactly as follows:
448   //   message Foo {
449   //     option message_set_wire_format = true;
450   //     extensions 4 to max;
451   //   }
452   // Note that the message cannot have any defined fields; MessageSets only
453   // have extensions.
454   //
455   // All extensions of your type must be singular messages; e.g. they cannot
456   // be int32s, enums, or repeated messages.
457   //
458   // Because this is an option, the above two restrictions are not enforced by
459   // the protocol compiler.
460   optional bool message_set_wire_format = 1 [default=false];
461
462   // Disables the generation of the standard "descriptor()" accessor, which can
463   // conflict with a field of the same name.  This is meant to make migration
464   // from proto1 easier; new code should avoid fields named "descriptor".
465   optional bool no_standard_descriptor_accessor = 2 [default=false];
466
467   // Is this message deprecated?
468   // Depending on the target platform, this can emit Deprecated annotations
469   // for the message, or it will be completely ignored; in the very least,
470   // this is a formalization for deprecating messages.
471   optional bool deprecated = 3 [default=false];
472
473   // Whether the message is an automatically generated map entry type for the
474   // maps field.
475   //
476   // For maps fields:
477   //     map<KeyType, ValueType> map_field = 1;
478   // The parsed descriptor looks like:
479   //     message MapFieldEntry {
480   //         option map_entry = true;
481   //         optional KeyType key = 1;
482   //         optional ValueType value = 2;
483   //     }
484   //     repeated MapFieldEntry map_field = 1;
485   //
486   // Implementations may choose not to generate the map_entry=true message, but
487   // use a native map in the target language to hold the keys and values.
488   // The reflection APIs in such implementations still need to work as
489   // if the field is a repeated message field.
490   //
491   // NOTE: Do not set the option in .proto files. Always use the maps syntax
492   // instead. The option should only be implicitly set by the proto compiler
493   // parser.
494   optional bool map_entry = 7;
495
496   reserved 8;  // javalite_serializable
497   reserved 9;  // javanano_as_lite
498
499   // The parser stores options it doesn't recognize here. See above.
500   repeated UninterpretedOption uninterpreted_option = 999;
501
502   // Clients can define custom options in extensions of this message. See above.
503   extensions 1000 to max;
504 }
505
506 message FieldOptions {
507   // The ctype option instructs the C++ code generator to use a different
508   // representation of the field than it normally would.  See the specific
509   // options below.  This option is not yet implemented in the open source
510   // release -- sorry, we'll try to include it in a future version!
511   optional CType ctype = 1 [default = STRING];
512   enum CType {
513     // Default mode.
514     STRING = 0;
515
516     CORD = 1;
517
518     STRING_PIECE = 2;
519   }
520   // The packed option can be enabled for repeated primitive fields to enable
521   // a more efficient representation on the wire. Rather than repeatedly
522   // writing the tag and type for each element, the entire array is encoded as
523   // a single length-delimited blob. In proto3, only explicit setting it to
524   // false will avoid using packed encoding.
525   optional bool packed = 2;
526
527   // The jstype option determines the JavaScript type used for values of the
528   // field.  The option is permitted only for 64 bit integral and fixed types
529   // (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
530   // is represented as JavaScript string, which avoids loss of precision that
531   // can happen when a large value is converted to a floating point JavaScript.
532   // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
533   // use the JavaScript "number" type.  The behavior of the default option
534   // JS_NORMAL is implementation dependent.
535   //
536   // This option is an enum to permit additional types to be added, e.g.
537   // goog.math.Integer.
538   optional JSType jstype = 6 [default = JS_NORMAL];
539   enum JSType {
540     // Use the default type.
541     JS_NORMAL = 0;
542
543     // Use JavaScript strings.
544     JS_STRING = 1;
545
546     // Use JavaScript numbers.
547     JS_NUMBER = 2;
548   }
549
550   // Should this field be parsed lazily?  Lazy applies only to message-type
551   // fields.  It means that when the outer message is initially parsed, the
552   // inner message's contents will not be parsed but instead stored in encoded
553   // form.  The inner message will actually be parsed when it is first accessed.
554   //
555   // This is only a hint.  Implementations are free to choose whether to use
556   // eager or lazy parsing regardless of the value of this option.  However,
557   // setting this option true suggests that the protocol author believes that
558   // using lazy parsing on this field is worth the additional bookkeeping
559   // overhead typically needed to implement it.
560   //
561   // This option does not affect the public interface of any generated code;
562   // all method signatures remain the same.  Furthermore, thread-safety of the
563   // interface is not affected by this option; const methods remain safe to
564   // call from multiple threads concurrently, while non-const methods continue
565   // to require exclusive access.
566   //
567   //
568   // Note that implementations may choose not to check required fields within
569   // a lazy sub-message.  That is, calling IsInitialized() on the outer message
570   // may return true even if the inner message has missing required fields.
571   // This is necessary because otherwise the inner message would have to be
572   // parsed in order to perform the check, defeating the purpose of lazy
573   // parsing.  An implementation which chooses not to check required fields
574   // must be consistent about it.  That is, for any particular sub-message, the
575   // implementation must either *always* check its required fields, or *never*
576   // check its required fields, regardless of whether or not the message has
577   // been parsed.
578   optional bool lazy = 5 [default=false];
579
580   // Is this field deprecated?
581   // Depending on the target platform, this can emit Deprecated annotations
582   // for accessors, or it will be completely ignored; in the very least, this
583   // is a formalization for deprecating fields.
584   optional bool deprecated = 3 [default=false];
585
586   // For Google-internal migration only. Do not use.
587   optional bool weak = 10 [default=false];
588
589
590   // The parser stores options it doesn't recognize here. See above.
591   repeated UninterpretedOption uninterpreted_option = 999;
592
593   // Clients can define custom options in extensions of this message. See above.
594   extensions 1000 to max;
595
596   reserved 4;  // removed jtype
597 }
598
599 message OneofOptions {
600   // The parser stores options it doesn't recognize here. See above.
601   repeated UninterpretedOption uninterpreted_option = 999;
602
603   // Clients can define custom options in extensions of this message. See above.
604   extensions 1000 to max;
605 }
606
607 message EnumOptions {
608
609   // Set this option to true to allow mapping different tag names to the same
610   // value.
611   optional bool allow_alias = 2;
612
613   // Is this enum deprecated?
614   // Depending on the target platform, this can emit Deprecated annotations
615   // for the enum, or it will be completely ignored; in the very least, this
616   // is a formalization for deprecating enums.
617   optional bool deprecated = 3 [default=false];
618
619   reserved 5;  // javanano_as_lite
620
621   // The parser stores options it doesn't recognize here. See above.
622   repeated UninterpretedOption uninterpreted_option = 999;
623
624   // Clients can define custom options in extensions of this message. See above.
625   extensions 1000 to max;
626 }
627
628 message EnumValueOptions {
629   // Is this enum value deprecated?
630   // Depending on the target platform, this can emit Deprecated annotations
631   // for the enum value, or it will be completely ignored; in the very least,
632   // this is a formalization for deprecating enum values.
633   optional bool deprecated = 1 [default=false];
634
635   // The parser stores options it doesn't recognize here. See above.
636   repeated UninterpretedOption uninterpreted_option = 999;
637
638   // Clients can define custom options in extensions of this message. See above.
639   extensions 1000 to max;
640 }
641
642 message ServiceOptions {
643
644   // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
645   //   framework.  We apologize for hoarding these numbers to ourselves, but
646   //   we were already using them long before we decided to release Protocol
647   //   Buffers.
648
649   // Is this service deprecated?
650   // Depending on the target platform, this can emit Deprecated annotations
651   // for the service, or it will be completely ignored; in the very least,
652   // this is a formalization for deprecating services.
653   optional bool deprecated = 33 [default=false];
654
655   // The parser stores options it doesn't recognize here. See above.
656   repeated UninterpretedOption uninterpreted_option = 999;
657
658   // Clients can define custom options in extensions of this message. See above.
659   extensions 1000 to max;
660 }
661
662 message MethodOptions {
663
664   // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
665   //   framework.  We apologize for hoarding these numbers to ourselves, but
666   //   we were already using them long before we decided to release Protocol
667   //   Buffers.
668
669   // Is this method deprecated?
670   // Depending on the target platform, this can emit Deprecated annotations
671   // for the method, or it will be completely ignored; in the very least,
672   // this is a formalization for deprecating methods.
673   optional bool deprecated = 33 [default=false];
674
675   // Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
676   // or neither? HTTP based RPC implementation may choose GET verb for safe
677   // methods, and PUT verb for idempotent methods instead of the default POST.
678   enum IdempotencyLevel {
679     IDEMPOTENCY_UNKNOWN = 0;
680     NO_SIDE_EFFECTS     = 1; // implies idempotent
681     IDEMPOTENT          = 2; // idempotent, but may have side effects
682   }
683   optional IdempotencyLevel idempotency_level =
684       34 [default=IDEMPOTENCY_UNKNOWN];
685
686   // The parser stores options it doesn't recognize here. See above.
687   repeated UninterpretedOption uninterpreted_option = 999;
688
689   // Clients can define custom options in extensions of this message. See above.
690   extensions 1000 to max;
691 }
692
693
694 // A message representing a option the parser does not recognize. This only
695 // appears in options protos created by the compiler::Parser class.
696 // DescriptorPool resolves these when building Descriptor objects. Therefore,
697 // options protos in descriptor objects (e.g. returned by Descriptor::options(),
698 // or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
699 // in them.
700 message UninterpretedOption {
701   // The name of the uninterpreted option.  Each string represents a segment in
702   // a dot-separated name.  is_extension is true iff a segment represents an
703   // extension (denoted with parentheses in options specs in .proto files).
704   // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
705   // "foo.(bar.baz).qux".
706   message NamePart {
707     required string name_part = 1;
708     required bool is_extension = 2;
709   }
710   repeated NamePart name = 2;
711
712   // The value of the uninterpreted option, in whatever type the tokenizer
713   // identified it as during parsing. Exactly one of these should be set.
714   optional string identifier_value = 3;
715   optional uint64 positive_int_value = 4;
716   optional int64 negative_int_value = 5;
717   optional double double_value = 6;
718   optional bytes string_value = 7;
719   optional string aggregate_value = 8;
720 }
721
722 // ===================================================================
723 // Optional source code info
724
725 // Encapsulates information about the original source file from which a
726 // FileDescriptorProto was generated.
727 message SourceCodeInfo {
728   // A Location identifies a piece of source code in a .proto file which
729   // corresponds to a particular definition.  This information is intended
730   // to be useful to IDEs, code indexers, documentation generators, and similar
731   // tools.
732   //
733   // For example, say we have a file like:
734   //   message Foo {
735   //     optional string foo = 1;
736   //   }
737   // Let's look at just the field definition:
738   //   optional string foo = 1;
739   //   ^       ^^     ^^  ^  ^^^
740   //   a       bc     de  f  ghi
741   // We have the following locations:
742   //   span   path               represents
743   //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
744   //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
745   //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
746   //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
747   //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
748   //
749   // Notes:
750   // - A location may refer to a repeated field itself (i.e. not to any
751   //   particular index within it).  This is used whenever a set of elements are
752   //   logically enclosed in a single code segment.  For example, an entire
753   //   extend block (possibly containing multiple extension definitions) will
754   //   have an outer location whose path refers to the "extensions" repeated
755   //   field without an index.
756   // - Multiple locations may have the same path.  This happens when a single
757   //   logical declaration is spread out across multiple places.  The most
758   //   obvious example is the "extend" block again -- there may be multiple
759   //   extend blocks in the same scope, each of which will have the same path.
760   // - A location's span is not always a subset of its parent's span.  For
761   //   example, the "extendee" of an extension declaration appears at the
762   //   beginning of the "extend" block and is shared by all extensions within
763   //   the block.
764   // - Just because a location's span is a subset of some other location's span
765   //   does not mean that it is a descendant.  For example, a "group" defines
766   //   both a type and a field in a single declaration.  Thus, the locations
767   //   corresponding to the type and field and their components will overlap.
768   // - Code which tries to interpret locations should probably be designed to
769   //   ignore those that it doesn't understand, as more types of locations could
770   //   be recorded in the future.
771   repeated Location location = 1;
772   message Location {
773     // Identifies which part of the FileDescriptorProto was defined at this
774     // location.
775     //
776     // Each element is a field number or an index.  They form a path from
777     // the root FileDescriptorProto to the place where the definition.  For
778     // example, this path:
779     //   [ 4, 3, 2, 7, 1 ]
780     // refers to:
781     //   file.message_type(3)  // 4, 3
782     //       .field(7)         // 2, 7
783     //       .name()           // 1
784     // This is because FileDescriptorProto.message_type has field number 4:
785     //   repeated DescriptorProto message_type = 4;
786     // and DescriptorProto.field has field number 2:
787     //   repeated FieldDescriptorProto field = 2;
788     // and FieldDescriptorProto.name has field number 1:
789     //   optional string name = 1;
790     //
791     // Thus, the above path gives the location of a field name.  If we removed
792     // the last element:
793     //   [ 4, 3, 2, 7 ]
794     // this path refers to the whole field declaration (from the beginning
795     // of the label to the terminating semicolon).
796     repeated int32 path = 1 [packed=true];
797
798     // Always has exactly three or four elements: start line, start column,
799     // end line (optional, otherwise assumed same as start line), end column.
800     // These are packed into a single field for efficiency.  Note that line
801     // and column numbers are zero-based -- typically you will want to add
802     // 1 to each before displaying to a user.
803     repeated int32 span = 2 [packed=true];
804
805     // If this SourceCodeInfo represents a complete declaration, these are any
806     // comments appearing before and after the declaration which appear to be
807     // attached to the declaration.
808     //
809     // A series of line comments appearing on consecutive lines, with no other
810     // tokens appearing on those lines, will be treated as a single comment.
811     //
812     // leading_detached_comments will keep paragraphs of comments that appear
813     // before (but not connected to) the current element. Each paragraph,
814     // separated by empty lines, will be one comment element in the repeated
815     // field.
816     //
817     // Only the comment content is provided; comment markers (e.g. //) are
818     // stripped out.  For block comments, leading whitespace and an asterisk
819     // will be stripped from the beginning of each line other than the first.
820     // Newlines are included in the output.
821     //
822     // Examples:
823     //
824     //   optional int32 foo = 1;  // Comment attached to foo.
825     //   // Comment attached to bar.
826     //   optional int32 bar = 2;
827     //
828     //   optional string baz = 3;
829     //   // Comment attached to baz.
830     //   // Another line attached to baz.
831     //
832     //   // Comment attached to qux.
833     //   //
834     //   // Another line attached to qux.
835     //   optional double qux = 4;
836     //
837     //   // Detached comment for corge. This is not leading or trailing comments
838     //   // to qux or corge because there are blank lines separating it from
839     //   // both.
840     //
841     //   // Detached comment for corge paragraph 2.
842     //
843     //   optional string corge = 5;
844     //   /* Block comment attached
845     //    * to corge.  Leading asterisks
846     //    * will be removed. */
847     //   /* Block comment attached to
848     //    * grault. */
849     //   optional int32 grault = 6;
850     //
851     //   // ignored detached comments.
852     optional string leading_comments = 3;
853     optional string trailing_comments = 4;
854     repeated string leading_detached_comments = 6;
855   }
856 }
857
858 // Describes the relationship between generated code and its original source
859 // file. A GeneratedCodeInfo message is associated with only one generated
860 // source file, but may contain references to different source .proto files.
861 message GeneratedCodeInfo {
862   // An Annotation connects some span of text in generated code to an element
863   // of its generating .proto file.
864   repeated Annotation annotation = 1;
865   message Annotation {
866     // Identifies the element in the original source .proto file. This field
867     // is formatted the same as SourceCodeInfo.Location.path.
868     repeated int32 path = 1 [packed=true];
869
870     // Identifies the filesystem path to the original source .proto.
871     optional string source_file = 2;
872
873     // Identifies the starting offset in bytes in the generated code
874     // that relates to the identified object.
875     optional int32 begin = 3;
876
877     // Identifies the ending offset in bytes in the generated code that
878     // relates to the identified offset. The end offset should be one past
879     // the last relevant byte (so the length of the text = end - begin).
880     optional int32 end = 4;
881   }
882 }