Home | History | Annotate | Download | only in protobuf
      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 syntax = "proto3";
     32 
     33 option cc_enable_arenas = true;
     34 option optimize_for = LITE_RUNTIME;
     35 
     36 import "google/protobuf/unittest_import.proto";
     37 
     38 package proto3_arena_lite_unittest;
     39 
     40 // This proto includes every type of field in both singular and repeated
     41 // forms.
     42 message TestAllTypes {
     43   message NestedMessage {
     44     // The field name "b" fails to compile in proto1 because it conflicts with
     45     // a local variable named "b" in one of the generated methods.  Doh.
     46     // This file needs to compile in proto1 to test backwards-compatibility.
     47     int32 bb = 1;
     48   }
     49 
     50   enum NestedEnum {
     51     ZERO = 0;
     52     FOO = 1;
     53     BAR = 2;
     54     BAZ = 3;
     55     NEG = -1;  // Intentionally negative.
     56   }
     57 
     58   // Singular
     59      int32 optional_int32    =  1;
     60      int64 optional_int64    =  2;
     61     uint32 optional_uint32   =  3;
     62     uint64 optional_uint64   =  4;
     63     sint32 optional_sint32   =  5;
     64     sint64 optional_sint64   =  6;
     65    fixed32 optional_fixed32  =  7;
     66    fixed64 optional_fixed64  =  8;
     67   sfixed32 optional_sfixed32 =  9;
     68   sfixed64 optional_sfixed64 = 10;
     69      float optional_float    = 11;
     70     double optional_double   = 12;
     71       bool optional_bool     = 13;
     72     string optional_string   = 14;
     73      bytes optional_bytes    = 15;
     74 
     75   // Groups are not allowed in proto3.
     76   // optional group OptionalGroup = 16 {
     77   //   optional int32 a = 17;
     78   // }
     79 
     80   NestedMessage                        optional_nested_message  = 18;
     81   ForeignMessage                       optional_foreign_message = 19;
     82   protobuf_unittest_import.ImportMessage optional_import_message  = 20;
     83 
     84   NestedEnum                           optional_nested_enum     = 21;
     85   ForeignEnum                          optional_foreign_enum    = 22;
     86 
     87   // Omitted (compared to unittest.proto) because proto2 enums are not allowed
     88   // inside proto2 messages.
     89   //
     90   // optional protobuf_unittest_import.ImportEnum    optional_import_enum  = 23;
     91 
     92   string optional_string_piece = 24 [ctype=STRING_PIECE];
     93   string optional_cord = 25 [ctype=CORD];
     94 
     95   // Defined in unittest_import_public.proto
     96   protobuf_unittest_import.PublicImportMessage
     97       optional_public_import_message = 26;
     98 
     99   NestedMessage optional_lazy_message = 27 [lazy=true];
    100 
    101   // Repeated
    102   repeated    int32 repeated_int32    = 31;
    103   repeated    int64 repeated_int64    = 32;
    104   repeated   uint32 repeated_uint32   = 33;
    105   repeated   uint64 repeated_uint64   = 34;
    106   repeated   sint32 repeated_sint32   = 35;
    107   repeated   sint64 repeated_sint64   = 36;
    108   repeated  fixed32 repeated_fixed32  = 37;
    109   repeated  fixed64 repeated_fixed64  = 38;
    110   repeated sfixed32 repeated_sfixed32 = 39;
    111   repeated sfixed64 repeated_sfixed64 = 40;
    112   repeated    float repeated_float    = 41;
    113   repeated   double repeated_double   = 42;
    114   repeated     bool repeated_bool     = 43;
    115   repeated   string repeated_string   = 44;
    116   repeated    bytes repeated_bytes    = 45;
    117 
    118   // Groups are not allowed in proto3.
    119   // repeated group RepeatedGroup = 46 {
    120   //   optional int32 a = 47;
    121   // }
    122 
    123   repeated NestedMessage                        repeated_nested_message  = 48;
    124   repeated ForeignMessage                       repeated_foreign_message = 49;
    125   repeated protobuf_unittest_import.ImportMessage repeated_import_message  = 50;
    126 
    127   repeated NestedEnum                           repeated_nested_enum     = 51;
    128   repeated ForeignEnum                          repeated_foreign_enum    = 52;
    129 
    130   // Omitted (compared to unittest.proto) because proto2 enums are not allowed
    131   // inside proto2 messages.
    132   //
    133   // repeated protobuf_unittest_import.ImportEnum    repeated_import_enum  = 53;
    134 
    135   repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
    136   repeated string repeated_cord = 55 [ctype=CORD];
    137 
    138   repeated NestedMessage repeated_lazy_message = 57 [lazy=true];
    139 
    140   oneof oneof_field {
    141     uint32 oneof_uint32 = 111;
    142     NestedMessage oneof_nested_message = 112;
    143     string oneof_string = 113;
    144     bytes oneof_bytes = 114;
    145   }
    146 }
    147 
    148 // Test messages for packed fields
    149 
    150 message TestPackedTypes {
    151   repeated    int32 packed_int32    =  90 [packed = true];
    152   repeated    int64 packed_int64    =  91 [packed = true];
    153   repeated   uint32 packed_uint32   =  92 [packed = true];
    154   repeated   uint64 packed_uint64   =  93 [packed = true];
    155   repeated   sint32 packed_sint32   =  94 [packed = true];
    156   repeated   sint64 packed_sint64   =  95 [packed = true];
    157   repeated  fixed32 packed_fixed32  =  96 [packed = true];
    158   repeated  fixed64 packed_fixed64  =  97 [packed = true];
    159   repeated sfixed32 packed_sfixed32 =  98 [packed = true];
    160   repeated sfixed64 packed_sfixed64 =  99 [packed = true];
    161   repeated    float packed_float    = 100 [packed = true];
    162   repeated   double packed_double   = 101 [packed = true];
    163   repeated     bool packed_bool     = 102 [packed = true];
    164   repeated ForeignEnum packed_enum  = 103 [packed = true];
    165 }
    166 
    167 // Explicitly set packed to false
    168 message TestUnpackedTypes {
    169   repeated    int32 repeated_int32    =  1 [packed = false];
    170   repeated    int64 repeated_int64    =  2 [packed = false];
    171   repeated   uint32 repeated_uint32   =  3 [packed = false];
    172   repeated   uint64 repeated_uint64   =  4 [packed = false];
    173   repeated   sint32 repeated_sint32   =  5 [packed = false];
    174   repeated   sint64 repeated_sint64   =  6 [packed = false];
    175   repeated  fixed32 repeated_fixed32  =  7 [packed = false];
    176   repeated  fixed64 repeated_fixed64  =  8 [packed = false];
    177   repeated sfixed32 repeated_sfixed32 =  9 [packed = false];
    178   repeated sfixed64 repeated_sfixed64 = 10 [packed = false];
    179   repeated    float repeated_float    = 11 [packed = false];
    180   repeated   double repeated_double   = 12 [packed = false];
    181   repeated     bool repeated_bool     = 13 [packed = false];
    182   repeated TestAllTypes.NestedEnum repeated_nested_enum = 14 [packed = false];
    183 }
    184 
    185 // This proto includes a recusively nested message.
    186 message NestedTestAllTypes {
    187   NestedTestAllTypes child = 1;
    188   TestAllTypes payload = 2;
    189 }
    190 
    191 // Define these after TestAllTypes to make sure the compiler can handle
    192 // that.
    193 message ForeignMessage {
    194   int32 c = 1;
    195 }
    196 
    197 enum ForeignEnum {
    198   FOREIGN_ZERO = 0;
    199   FOREIGN_FOO = 4;
    200   FOREIGN_BAR = 5;
    201   FOREIGN_BAZ = 6;
    202 }
    203 
    204 // TestEmptyMessage is used to test behavior of unknown fields.
    205 message TestEmptyMessage {
    206 }
    207 
    208