test.proto 14.2 KB
Newer Older
Jeromy's avatar
Jeromy committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
// Go support for Protocol Buffers - Google's data interchange format
//
// Copyright 2010 The Go Authors.  All rights reserved.
// https://github.com/golang/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// A feature-rich test file for the protocol compiler and libraries.

syntax = "proto2";

package testdata;

enum FOO { FOO1 = 1; };

message GoEnum {
  required FOO foo = 1;
}

message GoTestField {
  required string Label = 1;
  required string Type = 2;
}

message GoTest {
  // An enum, for completeness.
  enum KIND {
    VOID = 0;

    // Basic types
    BOOL = 1;
    BYTES = 2;
    FINGERPRINT = 3;
    FLOAT = 4;
    INT = 5;
    STRING = 6;
    TIME = 7;

    // Groupings
    TUPLE = 8;
    ARRAY = 9;
    MAP = 10;

    // Table types
    TABLE = 11;

    // Functions
    FUNCTION = 12;  // last tag
  };

  // Some typical parameters
  required KIND Kind = 1;
  optional string Table = 2;
  optional int32 Param = 3;

  // Required, repeated and optional foreign fields.
  required GoTestField RequiredField = 4;
  repeated GoTestField RepeatedField = 5;
  optional GoTestField OptionalField = 6;

  // Required fields of all basic types
  required bool F_Bool_required = 10;
  required int32 F_Int32_required = 11;
  required int64 F_Int64_required = 12;
  required fixed32 F_Fixed32_required = 13;
  required fixed64 F_Fixed64_required = 14;
  required uint32 F_Uint32_required = 15;
  required uint64 F_Uint64_required = 16;
  required float F_Float_required = 17;
  required double F_Double_required = 18;
  required string F_String_required = 19;
  required bytes F_Bytes_required = 101;
  required sint32 F_Sint32_required = 102;
  required sint64 F_Sint64_required = 103;

  // Repeated fields of all basic types
  repeated bool F_Bool_repeated = 20;
  repeated int32 F_Int32_repeated = 21;
  repeated int64 F_Int64_repeated = 22;
  repeated fixed32 F_Fixed32_repeated = 23;
  repeated fixed64 F_Fixed64_repeated = 24;
  repeated uint32 F_Uint32_repeated = 25;
  repeated uint64 F_Uint64_repeated = 26;
  repeated float F_Float_repeated = 27;
  repeated double F_Double_repeated = 28;
  repeated string F_String_repeated = 29;
  repeated bytes F_Bytes_repeated = 201;
  repeated sint32 F_Sint32_repeated = 202;
  repeated sint64 F_Sint64_repeated = 203;

  // Optional fields of all basic types
  optional bool F_Bool_optional = 30;
  optional int32 F_Int32_optional = 31;
  optional int64 F_Int64_optional = 32;
  optional fixed32 F_Fixed32_optional = 33;
  optional fixed64 F_Fixed64_optional = 34;
  optional uint32 F_Uint32_optional = 35;
  optional uint64 F_Uint64_optional = 36;
  optional float F_Float_optional = 37;
  optional double F_Double_optional = 38;
  optional string F_String_optional = 39;
  optional bytes F_Bytes_optional = 301;
  optional sint32 F_Sint32_optional = 302;
  optional sint64 F_Sint64_optional = 303;

  // Default-valued fields of all basic types
  optional bool F_Bool_defaulted = 40 [default=true];
  optional int32 F_Int32_defaulted = 41 [default=32];
  optional int64 F_Int64_defaulted = 42 [default=64];
  optional fixed32 F_Fixed32_defaulted = 43 [default=320];
  optional fixed64 F_Fixed64_defaulted = 44 [default=640];
  optional uint32 F_Uint32_defaulted = 45 [default=3200];
  optional uint64 F_Uint64_defaulted = 46 [default=6400];
  optional float F_Float_defaulted = 47 [default=314159.];
  optional double F_Double_defaulted = 48 [default=271828.];
  optional string F_String_defaulted = 49 [default="hello, \"world!\"\n"];
  optional bytes F_Bytes_defaulted = 401 [default="Bignose"];
  optional sint32 F_Sint32_defaulted = 402 [default = -32];
  optional sint64 F_Sint64_defaulted = 403 [default = -64];

  // Packed repeated fields (no string or bytes).
  repeated bool F_Bool_repeated_packed = 50 [packed=true];
  repeated int32 F_Int32_repeated_packed = 51 [packed=true];
  repeated int64 F_Int64_repeated_packed = 52 [packed=true];
  repeated fixed32 F_Fixed32_repeated_packed = 53 [packed=true];
  repeated fixed64 F_Fixed64_repeated_packed = 54 [packed=true];
  repeated uint32 F_Uint32_repeated_packed = 55 [packed=true];
  repeated uint64 F_Uint64_repeated_packed = 56 [packed=true];
  repeated float F_Float_repeated_packed = 57 [packed=true];
  repeated double F_Double_repeated_packed = 58 [packed=true];
  repeated sint32 F_Sint32_repeated_packed = 502 [packed=true];
  repeated sint64 F_Sint64_repeated_packed = 503 [packed=true];

  // Required, repeated, and optional groups.
  required group RequiredGroup = 70 {
    required string RequiredField = 71;
  };

  repeated group RepeatedGroup = 80 {
    required string RequiredField = 81;
  };

  optional group OptionalGroup = 90 {
    required string RequiredField = 91;
  };
}

// For testing skipping of unrecognized fields.
// Numbers are all big, larger than tag numbers in GoTestField,
// the message used in the corresponding test.
message GoSkipTest {
  required int32 skip_int32 = 11;
  required fixed32 skip_fixed32 = 12;
  required fixed64 skip_fixed64 = 13;
  required string skip_string = 14;
  required group SkipGroup = 15 {
    required int32 group_int32 = 16;
    required string group_string = 17;
  }
}

// For testing packed/non-packed decoder switching.
// A serialized instance of one should be deserializable as the other.
message NonPackedTest {
  repeated int32 a = 1;
}

message PackedTest {
  repeated int32 b = 1 [packed=true];
}

message MaxTag {
  // Maximum possible tag number.
  optional string last_field = 536870911;
}

message OldMessage {
  message Nested {
    optional string name = 1;
  }
  optional Nested nested = 1;

  optional int32 num = 2;
}

// NewMessage is wire compatible with OldMessage;
// imagine it as a future version.
message NewMessage {
  message Nested {
    optional string name = 1;
    optional string food_group = 2;
  }
  optional Nested nested = 1;

  // This is an int32 in OldMessage.
  optional int64 num = 2;
}

// Smaller tests for ASCII formatting.

message InnerMessage {
  required string host = 1;
  optional int32 port = 2 [default=4000];
  optional bool connected = 3;
}

message OtherMessage {
  optional int64 key = 1;
  optional bytes value = 2;
  optional float weight = 3;
  optional InnerMessage inner = 4;
}

message MyMessage {
  required int32 count = 1;
  optional string name = 2;
  optional string quote = 3;
  repeated string pet = 4;
  optional InnerMessage inner = 5;
  repeated OtherMessage others = 6;
  repeated InnerMessage rep_inner = 12;

  enum Color {
    RED = 0;
    GREEN = 1;
    BLUE = 2;
  };
  optional Color bikeshed = 7;

  optional group SomeGroup = 8 {
    optional int32 group_field = 9;
  }

  // This field becomes [][]byte in the generated code.
  repeated bytes rep_bytes = 10;

  optional double bigfloat = 11;

  extensions 100 to max;
}

message Ext {
  extend MyMessage {
    optional Ext more = 103;
    optional string text = 104;
    optional int32 number = 105;
  }

  optional string data = 1;
}

extend MyMessage {
  repeated string greeting = 106;
}

message DefaultsMessage {
  enum DefaultsEnum {
    ZERO = 0;
    ONE = 1;
    TWO = 2;
  };
  extensions 100 to max;
}

extend DefaultsMessage {
  optional double no_default_double = 101;
  optional float no_default_float = 102;
  optional int32 no_default_int32 = 103;
  optional int64 no_default_int64 = 104;
  optional uint32 no_default_uint32 = 105;
  optional uint64 no_default_uint64 = 106;
  optional sint32 no_default_sint32 = 107;
  optional sint64 no_default_sint64 = 108;
  optional fixed32 no_default_fixed32 = 109;
  optional fixed64 no_default_fixed64 = 110;
  optional sfixed32 no_default_sfixed32 = 111;
  optional sfixed64 no_default_sfixed64 = 112;
  optional bool no_default_bool = 113;
  optional string no_default_string = 114;
  optional bytes no_default_bytes = 115;
  optional DefaultsMessage.DefaultsEnum no_default_enum = 116;

  optional double default_double = 201 [default = 3.1415];
  optional float default_float = 202 [default = 3.14];
  optional int32 default_int32 = 203 [default = 42];
  optional int64 default_int64 = 204 [default = 43];
  optional uint32 default_uint32 = 205 [default = 44];
  optional uint64 default_uint64 = 206 [default = 45];
  optional sint32 default_sint32 = 207 [default = 46];
  optional sint64 default_sint64 = 208 [default = 47];
  optional fixed32 default_fixed32 = 209 [default = 48];
  optional fixed64 default_fixed64 = 210 [default = 49];
  optional sfixed32 default_sfixed32 = 211 [default = 50];
  optional sfixed64 default_sfixed64 = 212 [default = 51];
  optional bool default_bool = 213 [default = true];
  optional string default_string = 214 [default = "Hello, string"];
  optional bytes default_bytes = 215 [default = "Hello, bytes"];
  optional DefaultsMessage.DefaultsEnum default_enum = 216 [default = ONE];
}

message MyMessageSet {
  option message_set_wire_format = true;
  extensions 100 to max;
}

message Empty {
}

extend MyMessageSet {
    optional Empty x201 = 201;
    optional Empty x202 = 202;
    optional Empty x203 = 203;
    optional Empty x204 = 204;
    optional Empty x205 = 205;
    optional Empty x206 = 206;
    optional Empty x207 = 207;
    optional Empty x208 = 208;
    optional Empty x209 = 209;
    optional Empty x210 = 210;
    optional Empty x211 = 211;
    optional Empty x212 = 212;
    optional Empty x213 = 213;
    optional Empty x214 = 214;
    optional Empty x215 = 215;
    optional Empty x216 = 216;
    optional Empty x217 = 217;
    optional Empty x218 = 218;
    optional Empty x219 = 219;
    optional Empty x220 = 220;
    optional Empty x221 = 221;
    optional Empty x222 = 222;
    optional Empty x223 = 223;
    optional Empty x224 = 224;
    optional Empty x225 = 225;
    optional Empty x226 = 226;
    optional Empty x227 = 227;
    optional Empty x228 = 228;
    optional Empty x229 = 229;
    optional Empty x230 = 230;
    optional Empty x231 = 231;
    optional Empty x232 = 232;
    optional Empty x233 = 233;
    optional Empty x234 = 234;
    optional Empty x235 = 235;
    optional Empty x236 = 236;
    optional Empty x237 = 237;
    optional Empty x238 = 238;
    optional Empty x239 = 239;
    optional Empty x240 = 240;
    optional Empty x241 = 241;
    optional Empty x242 = 242;
    optional Empty x243 = 243;
    optional Empty x244 = 244;
    optional Empty x245 = 245;
    optional Empty x246 = 246;
    optional Empty x247 = 247;
    optional Empty x248 = 248;
    optional Empty x249 = 249;
    optional Empty x250 = 250;
}

message MessageList {
  repeated group Message = 1 {
    required string name = 2;
    required int32 count = 3;
  }
}

message Strings {
  optional string string_field = 1;
  optional bytes bytes_field = 2;
}

message Defaults {
  enum Color {
    RED = 0;
    GREEN = 1;
    BLUE = 2;
  }

  // Default-valued fields of all basic types.
  // Same as GoTest, but copied here to make testing easier.
  optional bool F_Bool = 1 [default=true];
  optional int32 F_Int32 = 2 [default=32];
  optional int64 F_Int64 = 3 [default=64];
  optional fixed32 F_Fixed32 = 4 [default=320];
  optional fixed64 F_Fixed64 = 5 [default=640];
  optional uint32 F_Uint32 = 6 [default=3200];
  optional uint64 F_Uint64 = 7 [default=6400];
  optional float F_Float = 8 [default=314159.];
  optional double F_Double = 9 [default=271828.];
  optional string F_String = 10 [default="hello, \"world!\"\n"];
  optional bytes F_Bytes = 11 [default="Bignose"];
  optional sint32 F_Sint32 = 12 [default=-32];
  optional sint64 F_Sint64 = 13 [default=-64];
  optional Color F_Enum = 14 [default=GREEN];

  // More fields with crazy defaults.
  optional float F_Pinf = 15 [default=inf];
  optional float F_Ninf = 16 [default=-inf];
  optional float F_Nan = 17 [default=nan];

  // Sub-message.
  optional SubDefaults sub = 18;

  // Redundant but explicit defaults.
  optional string str_zero = 19 [default=""];
}

message SubDefaults {
  optional int64 n = 1 [default=7];
}

message RepeatedEnum {
  enum Color {
    RED = 1;
  }
  repeated Color color = 1;
}

message MoreRepeated {
  repeated bool bools = 1;
  repeated bool bools_packed = 2 [packed=true];
  repeated int32 ints = 3;
  repeated int32 ints_packed = 4 [packed=true];
  repeated int64 int64s_packed = 7 [packed=true];
  repeated string strings = 5;
  repeated fixed32 fixeds = 6;
}

// GroupOld and GroupNew have the same wire format.
// GroupNew has a new field inside a group.

message GroupOld {
  optional group G = 101 {
    optional int32 x = 2;
  }
}

message GroupNew {
  optional group G = 101 {
    optional int32 x = 2;
    optional int32 y = 3;
  }
}

message FloatingPoint {
  required double f = 1;
}

message MessageWithMap {
  map<int32, string> name_mapping = 1;
  map<sint64, FloatingPoint> msg_mapping = 2;
  map<bool, bytes> byte_mapping = 3;
  map<string, string> str_to_str = 4;
}

message Communique {
  optional bool make_me_cry = 1;

  // This is a oneof, called "union".
  oneof union {
    int32 number = 5;
    string name = 6;
    bytes data = 7;
    double temp_c = 8;
    MyMessage.Color col = 9;
    Strings msg = 10;
  }
}