1syntax = "proto2";
2
3package protos_generator.test;
4
5import "protos_generator/tests/child_model.proto";
6
7message TestModelContainer {
8  repeated TestModel models = 1;
9  optional ChildModel3 proto_3_child = 2;
10}
11
12message TestModel {
13  optional int32 value = 1;
14  repeated int32 value_array = 2;  // _UPB_MODE_ARRAY
15  repeated int32 value_packed_array = 3
16      [packed = true];  // _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED
17  repeated int32 value_deprec = 4 [deprecated = true];
18  optional string str1 = 115;
19  optional bool b1 = 9;
20  optional bool b2 = 10;
21  optional string str2 = 50;
22  optional string str3 = 11;
23  optional float optional_float = 14;
24  optional double optional_double = 15;
25  optional int64 optional_int64 = 16;
26  optional uint32 optional_uint32 = 17;
27  optional uint64 optional_uint64 = 18;
28  optional sint32 optional_sint32 = 19;
29  optional sint64 optional_sint64 = 20;
30  optional fixed32 optional_fixed32 = 21;
31  optional fixed64 optional_fixed64 = 22;
32  optional sfixed32 optional_sfixed32 = 23;
33  optional sfixed64 optional_sfixed64 = 24;
34  repeated int64 repeated_int64 = 25;
35  repeated uint64 repeated_uint64 = 26;
36  repeated fixed64 repeated_fixed64 = 27;
37  repeated sfixed64 repeated_sfixed64 = 28;
38  repeated bool repeated_bool = 29;
39  repeated string repeated_string = 35;
40  optional bytes optional_bytes = 36;
41  message NestedChild {
42    optional string nested_child_name = 211;
43  }
44  optional NestedChild nested_child_1 = 212;
45  optional ChildModel1 child_model_1 = 222;
46  repeated ChildModel1 child_model_2 = 223;
47  optional ChildModel1 bar = 224;
48  oneof child_oneof1 {
49    string oneof_member1 = 98;
50    bool oneof_member2 = 99;
51  }
52  optional int32 int_value_with_default = 31
53      [default = 65];  // Not supported yet
54  optional string string_value_with_default = 32
55      [default = "hello"];  // Not supported yet
56  optional float float_value_with_default = 33 [default = inf];
57  optional float double_value_with_default = 34 [default = -inf];
58
59  map<int32, ChildModel1> child_map = 225;
60  optional TestModel recursive_child = 226;
61  map<string, ChildModel1> child_str_map = 227;
62  map<string, int32> str_to_int_map = 228;
63  map<string, string> str_to_str_map = 229;
64
65  extend TestAnnotation {
66    optional OtherExtension in_message_ext = 15000;
67  }
68
69  enum Category {
70    IMAGES = 5;
71    NEWS = 6;
72    VIDEO = 7;
73    RADIO = 8 [deprecated = true];
74  }
75  optional Category category = 37;
76
77  // keyword collisions (double, template, ...)
78  oneof type {
79    string string = 230;
80    int64 int64 = 231;
81    double double = 232;
82  }
83  optional string template = 233;
84  optional string msg = 234;
85  optional string arena = 235;
86
87  // Tests publicly imported enum.
88  optional TestEnum imported_enum = 238;
89
90  optional string phase = 239;
91  optional bool clear_phase = 240;
92
93  optional string doc_id = 241;
94  optional bool set_doc_id = 242;
95
96  extensions 10000 to max;
97}
98
99// Old version with fewer fields to test backward/forward compatibility.
100message TestModelContainerV1 {
101  repeated TestModelV1 models = 1;
102}
103
104message TestModelV1 {
105  optional int32 value = 1;
106  repeated int32 value2 = 2;
107  repeated int32 value3 = 3 [packed = true];
108  repeated int32 value4 = 4 [deprecated = true];
109  optional bool b1 = 9;
110  optional bool b2 = 10;
111  optional string str2 = 50;
112}
113
114enum PrimaryColors {
115  RED = 1;
116  GREEN = 2;
117  BLUE = 3;
118}
119
120// TestModel extension.
121message ThemeExtension {
122  extend TestModel {
123    optional ThemeExtension theme_extension = 12003;
124  }
125  optional string ext_name = 1;
126  optional bool ext_bool = 2;
127}
128
129extend TestModel {
130  optional ThemeExtension theme = 12001;
131}
132
133message OtherExtension {
134  optional string ext2_name = 1;
135}
136
137extend TestModel {
138  optional OtherExtension other_ext = 12002;
139}
140
141message TestAnnotation {
142  extensions 10000 to max;
143}
144
145message TestMessageHasEnum {
146  optional EnumDeclaredAfterMessage enum_declared_after_message = 1;
147}
148
149enum EnumDeclaredAfterMessage {
150  ZERO = 0;
151  ONE = 1;
152  TWO = 2;
153  THREE = 3;
154}
155