blob: b97cd536110f7e5f77eff4bd06370b1946159a10 [file] [log] [blame]
Herbie Ong8170d692019-02-13 14:13:21 -08001// Copyright 2019 The Go Authors. All rights reserved.
Herbie Ongcddf8192018-11-28 18:25:20 -08002// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Test Protobuf definitions with proto2 syntax.
6syntax = "proto2";
7
8package pb2;
Joe Tsai94e730b2020-01-10 23:31:25 -08009option go_package = "google.golang.org/protobuf/internal/testprotos/textpb2";
Herbie Ongcddf8192018-11-28 18:25:20 -080010
11import "google/protobuf/any.proto";
12import "google/protobuf/empty.proto";
Herbie Ong0b0f4032019-03-18 19:06:15 -070013import "google/protobuf/field_mask.proto";
Herbie Ongcddf8192018-11-28 18:25:20 -080014import "google/protobuf/duration.proto";
15import "google/protobuf/struct.proto";
16import "google/protobuf/timestamp.proto";
17import "google/protobuf/wrappers.proto";
18
19// Scalars contains optional scalar fields.
20message Scalars {
21 optional bool opt_bool = 1;
Herbie Ongcddf8192018-11-28 18:25:20 -080022 optional int32 opt_int32 = 2;
23 optional int64 opt_int64 = 3;
24 optional uint32 opt_uint32 = 4;
25 optional uint64 opt_uint64 = 5;
26 optional sint32 opt_sint32 = 6;
27 optional sint64 opt_sint64 = 7;
28 optional fixed32 opt_fixed32 = 8;
29 optional fixed64 opt_fixed64 = 9;
30 optional sfixed32 opt_sfixed32 = 10;
31 optional sfixed64 opt_sfixed64 = 11;
32
Herbie Ong8170d692019-02-13 14:13:21 -080033 // Textproto marshal outputs fields in the same order as this proto
34 // definition regardless of field number. Following fields are intended to
35 // test that assumption.
36
Herbie Ongcddf8192018-11-28 18:25:20 -080037 optional float opt_float = 20;
38 optional double opt_double = 21;
39
40 optional bytes opt_bytes = 14;
41 optional string opt_string = 13;
42}
43
Herbie Ongcddf8192018-11-28 18:25:20 -080044enum Enum {
Herbie Ong8170d692019-02-13 14:13:21 -080045 ONE = 1;
46 TWO = 2;
47 TEN = 10;
Herbie Ongcddf8192018-11-28 18:25:20 -080048}
49
50// Message contains enum fields.
51message Enums {
52 optional Enum opt_enum = 1;
53 repeated Enum rpt_enum = 2;
54
55 enum NestedEnum {
56 UNO = 1;
57 DOS = 2;
58 DIEZ = 10;
59 }
60 optional NestedEnum opt_nested_enum = 3;
61 repeated NestedEnum rpt_nested_enum = 4;
62}
63
Herbie Ong8170d692019-02-13 14:13:21 -080064// Message contains repeated fields.
65message Repeats {
66 repeated bool rpt_bool = 1;
67 repeated int32 rpt_int32 = 2;
68 repeated int64 rpt_int64 = 3;
69 repeated uint32 rpt_uint32 = 4;
70 repeated uint64 rpt_uint64 = 5;
71 repeated float rpt_float = 6;
72 repeated double rpt_double = 7;
73 repeated string rpt_string = 8;
74 repeated bytes rpt_bytes = 9;
Herbie Ongcddf8192018-11-28 18:25:20 -080075}
76
77// Message type used as submessage.
78message Nested {
79 optional string opt_string = 1;
80 optional Nested opt_nested = 2;
81}
82
Herbie Ong8170d692019-02-13 14:13:21 -080083// Message contains message and group fields.
84message Nests {
85 optional Nested opt_nested = 1;
86 optional group OptGroup = 2 {
87 optional string opt_string = 1;
88 optional Nested opt_nested = 2;
89
90 optional group OptNestedGroup = 3 {
91 optional fixed32 opt_fixed32 = 1;
92 }
93 }
94
95 repeated Nested rpt_nested = 4;
96 repeated group RptGroup = 5 {
97 repeated string rpt_string = 1;
98 }
99
100 reserved "reserved_field";
101}
102
Herbie Ongcddf8192018-11-28 18:25:20 -0800103// Message contains required fields.
104message Requireds {
105 required bool req_bool = 1;
Herbie Ong8170d692019-02-13 14:13:21 -0800106 required sfixed64 req_sfixed64 = 2;
107 required double req_double = 3;
108 required string req_string = 4;
109 required Enum req_enum = 5;
110 required Nested req_nested = 6;
Herbie Ongcddf8192018-11-28 18:25:20 -0800111}
112
Herbie Ong800c9902018-12-06 15:28:53 -0800113// Message contains both required and optional fields.
114message PartialRequired {
115 required string req_string = 1;
116 optional string opt_string = 2;
117}
118
Herbie Ong800c9902018-12-06 15:28:53 -0800119// Following messages are for testing required field nested in optional, repeated and map fields.
Herbie Ongcf253082018-12-17 17:13:07 -0800120
Herbie Ong800c9902018-12-06 15:28:53 -0800121message NestedWithRequired {
122 required string req_string = 1;
123}
124
125message IndirectRequired {
126 optional NestedWithRequired opt_nested = 1;
127 repeated NestedWithRequired rpt_nested = 2;
128 map<string, NestedWithRequired> str_to_nested = 3;
Herbie Ong8170d692019-02-13 14:13:21 -0800129
130 oneof union {
131 NestedWithRequired oneof_nested = 4;
132 }
Herbie Ong800c9902018-12-06 15:28:53 -0800133}
134
Herbie Ongcf253082018-12-17 17:13:07 -0800135// Following messages are for testing extensions.
136
137message Extensions {
138 optional string opt_string = 1;
139 extensions 20 to 100;
140 optional bool opt_bool = 101;
141 optional int32 opt_int32 = 2;
142}
143
144extend Extensions {
145 optional bool opt_ext_bool = 21;
146 optional string opt_ext_string = 22;
147 optional Enum opt_ext_enum = 23;
148 optional Nested opt_ext_nested = 24;
Herbie Ong09b28a92019-04-03 15:42:41 -0700149 optional PartialRequired opt_ext_partial = 25;
Herbie Ongcf253082018-12-17 17:13:07 -0800150
151 repeated fixed32 rpt_ext_fixed32 = 31;
152 repeated Enum rpt_ext_enum = 32;
153 repeated Nested rpt_ext_nested = 33;
154}
155
156message ExtensionsContainer {
157 extend Extensions {
158 optional bool opt_ext_bool = 51;
159 optional string opt_ext_string = 52;
160 optional Enum opt_ext_enum = 53;
161 optional Nested opt_ext_nested = 54;
Herbie Ong09b28a92019-04-03 15:42:41 -0700162 optional PartialRequired opt_ext_partial = 55;
Herbie Ongcf253082018-12-17 17:13:07 -0800163
164 repeated string rpt_ext_string = 61;
165 repeated Enum rpt_ext_enum = 62;
166 repeated Nested rpt_ext_nested = 63;
167 }
168}
169
170// Following messages are for testing MessageSet.
171
172message MessageSet {
173 option message_set_wire_format = true;
174
175 extensions 4 to max;
176}
177
178message MessageSetExtension {
179 optional string opt_string = 1;
180
181 extend MessageSet {
182 optional MessageSetExtension message_set_extension = 10;
183 optional MessageSetExtension not_message_set_extension = 20;
184 optional Nested ext_nested = 30;
185 }
186}
187
Herbie Ong6470ea62019-01-07 18:56:57 -0800188message FakeMessageSet {
189 extensions 4 to max;
190}
191
192message FakeMessageSetExtension {
193 optional string opt_string = 1;
194
195 extend FakeMessageSet {
196 optional FakeMessageSetExtension message_set_extension = 10;
197 }
198}
199
200extend MessageSet {
201 optional FakeMessageSetExtension message_set_extension = 50;
202}
203
Herbie Ongcddf8192018-11-28 18:25:20 -0800204// Message contains well-known type fields.
205message KnownTypes {
206 optional google.protobuf.BoolValue opt_bool = 1;
207 optional google.protobuf.Int32Value opt_int32 = 2;
208 optional google.protobuf.Int64Value opt_int64 = 3;
209 optional google.protobuf.UInt32Value opt_uint32 = 4;
210 optional google.protobuf.UInt64Value opt_uint64 = 5;
211 optional google.protobuf.FloatValue opt_float = 6;
212 optional google.protobuf.DoubleValue opt_double = 7;
213 optional google.protobuf.StringValue opt_string = 8;
214 optional google.protobuf.BytesValue opt_bytes = 9;
215
216 optional google.protobuf.Duration opt_duration = 20;
217 optional google.protobuf.Timestamp opt_timestamp = 21;
Herbie Ong300b9fe2019-03-29 15:42:20 -0700218
Herbie Ongcddf8192018-11-28 18:25:20 -0800219 optional google.protobuf.Struct opt_struct = 25;
220 optional google.protobuf.ListValue opt_list = 26;
221 optional google.protobuf.Value opt_value = 27;
Herbie Ong300b9fe2019-03-29 15:42:20 -0700222 optional google.protobuf.NullValue opt_null = 28;
223
Herbie Ongcddf8192018-11-28 18:25:20 -0800224 optional google.protobuf.Empty opt_empty = 30;
225 optional google.protobuf.Any opt_any = 32;
Herbie Ong0b0f4032019-03-18 19:06:15 -0700226
227 optional google.protobuf.FieldMask opt_fieldmask = 40;
Herbie Ongcddf8192018-11-28 18:25:20 -0800228}