1// Copyright 2019 The Go Authors. All rights reserved.
2// 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;
9option go_package = "google.golang.org/protobuf/internal/testprotos/textpb2";
10
11import "google/protobuf/any.proto";
12import "google/protobuf/empty.proto";
13import "google/protobuf/field_mask.proto";
14import "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;
22  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
33  // 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
37  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
44enum Enum {
45  ONE = 1;
46  TWO = 2;
47  TEN = 10;
48}
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
64// 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;
75}
76
77// Message contains map fields.
78message Maps {
79  map<int32, string> int32_to_str = 1;
80  map<string, Nested> str_to_nested = 4;
81}
82
83// Message type used as submessage.
84message Nested {
85  optional string opt_string = 1;
86  optional Nested opt_nested = 2;
87}
88
89// Message contains message and group fields.
90message Nests {
91  optional Nested opt_nested = 1;
92  optional group OptGroup = 2 {
93    optional string opt_string = 1;
94    optional Nested opt_nested = 2;
95
96    optional group OptNestedGroup = 3 {
97      optional fixed32 opt_fixed32 = 1;
98    }
99  }
100
101  repeated Nested rpt_nested = 4;
102  repeated group RptGroup = 5 {
103    repeated string rpt_string = 1;
104  }
105
106  reserved "reserved_field";
107}
108
109// Message contains required fields.
110message Requireds {
111  required bool req_bool = 1;
112  required sfixed64 req_sfixed64 = 2;
113  required double req_double = 3;
114  required string req_string = 4;
115  required Enum req_enum = 5;
116  required Nested req_nested = 6;
117}
118
119// Message contains both required and optional fields.
120message PartialRequired {
121  required string req_string = 1;
122  optional string opt_string = 2;
123}
124
125// Following messages are for testing required field nested in optional, repeated and map fields.
126
127message NestedWithRequired {
128  required string req_string = 1;
129}
130
131message IndirectRequired {
132  optional NestedWithRequired opt_nested = 1;
133  repeated NestedWithRequired rpt_nested = 2;
134  map<string, NestedWithRequired> str_to_nested = 3;
135
136  oneof union {
137    NestedWithRequired oneof_nested = 4;
138  }
139}
140
141// Following messages are for testing extensions.
142
143message Extensions {
144  optional string opt_string = 1;
145  extensions 20 to 100;
146  optional bool opt_bool = 101;
147  optional int32 opt_int32 = 2;
148}
149
150extend Extensions {
151  optional bool opt_ext_bool = 21;
152  optional string opt_ext_string = 22;
153  optional Enum opt_ext_enum = 23;
154  optional Nested opt_ext_nested = 24;
155  optional PartialRequired opt_ext_partial = 25;
156
157  repeated fixed32 rpt_ext_fixed32 = 31;
158  repeated Enum rpt_ext_enum = 32;
159  repeated Nested rpt_ext_nested = 33;
160}
161
162message ExtensionsContainer {
163  extend Extensions {
164    optional bool opt_ext_bool = 51;
165    optional string opt_ext_string = 52;
166    optional Enum opt_ext_enum = 53;
167    optional Nested opt_ext_nested = 54;
168    optional PartialRequired opt_ext_partial = 55;
169
170    repeated string rpt_ext_string = 61;
171    repeated Enum rpt_ext_enum = 62;
172    repeated Nested rpt_ext_nested = 63;
173  }
174}
175
176// Following messages are for testing MessageSet.
177
178message MessageSet {
179  option message_set_wire_format = true;
180
181  extensions 4 to max;
182}
183
184message MessageSetExtension {
185  optional string opt_string = 1;
186
187  extend MessageSet {
188    optional MessageSetExtension message_set_extension = 10;
189    optional MessageSetExtension not_message_set_extension = 20;
190    optional Nested ext_nested = 30;
191  }
192}
193
194message FakeMessageSet {
195  extensions 4 to max;
196}
197
198message FakeMessageSetExtension {
199  optional string opt_string = 1;
200
201  extend FakeMessageSet {
202    optional FakeMessageSetExtension message_set_extension = 10;
203  }
204}
205
206extend MessageSet {
207  optional FakeMessageSetExtension message_set_extension = 50;
208}
209
210// Message contains well-known type fields.
211message KnownTypes {
212  optional google.protobuf.BoolValue opt_bool = 1;
213  optional google.protobuf.Int32Value opt_int32 = 2;
214  optional google.protobuf.Int64Value opt_int64 = 3;
215  optional google.protobuf.UInt32Value opt_uint32 = 4;
216  optional google.protobuf.UInt64Value opt_uint64 = 5;
217  optional google.protobuf.FloatValue opt_float = 6;
218  optional google.protobuf.DoubleValue opt_double = 7;
219  optional google.protobuf.StringValue opt_string = 8;
220  optional google.protobuf.BytesValue opt_bytes = 9;
221
222  optional google.protobuf.Duration opt_duration = 20;
223  optional google.protobuf.Timestamp opt_timestamp = 21;
224
225  optional google.protobuf.Struct opt_struct = 25;
226  optional google.protobuf.ListValue opt_list = 26;
227  optional google.protobuf.Value opt_value = 27;
228  optional google.protobuf.NullValue opt_null = 28;
229
230  optional google.protobuf.Empty opt_empty = 30;
231  optional google.protobuf.Any opt_any = 32;
232
233  optional google.protobuf.FieldMask opt_fieldmask = 40;
234}
235