// Copyright 2024 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Test Protobuf definitions with proto2 syntax. edition = "2023"; package pbeditions; import "google/protobuf/any.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; option go_package = "google.golang.org/protobuf/internal/testprotos/textpbeditions"; option features.enum_type = CLOSED; option features.utf8_validation = NONE; // Scalars contains scalar fields. message Scalars { bool opt_bool = 1; int32 opt_int32 = 2; int64 opt_int64 = 3; uint32 opt_uint32 = 4; uint64 opt_uint64 = 5; sint32 opt_sint32 = 6; sint64 opt_sint64 = 7; fixed32 opt_fixed32 = 8; fixed64 opt_fixed64 = 9; sfixed32 opt_sfixed32 = 10; sfixed64 opt_sfixed64 = 11; // Textproto marshal outputs fields in the same order as this proto // definition regardless of field number. Following fields are intended to // test that assumption. float opt_float = 20; double opt_double = 21; bytes opt_bytes = 14; string opt_string = 13; } // ImplicitScalars contains scalar field types with implicit field_presence message ImplicitScalars { bool s_bool = 1 [features.field_presence = IMPLICIT]; int32 s_int32 = 2 [features.field_presence = IMPLICIT]; int64 s_int64 = 3 [features.field_presence = IMPLICIT]; uint32 s_uint32 = 4 [features.field_presence = IMPLICIT]; uint64 s_uint64 = 5 [features.field_presence = IMPLICIT]; sint32 s_sint32 = 6 [features.field_presence = IMPLICIT]; sint64 s_sint64 = 7 [features.field_presence = IMPLICIT]; fixed32 s_fixed32 = 8 [features.field_presence = IMPLICIT]; fixed64 s_fixed64 = 9 [features.field_presence = IMPLICIT]; sfixed32 s_sfixed32 = 10 [features.field_presence = IMPLICIT]; sfixed64 s_sfixed64 = 11 [features.field_presence = IMPLICIT]; // Textproto marshal outputs fields in the same order as this proto // definition regardless of field number. Following fields are intended to // test that assumption. float s_float = 20 [features.field_presence = IMPLICIT]; double s_double = 21 [features.field_presence = IMPLICIT]; bytes s_bytes = 14 [features.field_presence = IMPLICIT]; string s_string = 13 [features.field_presence = IMPLICIT]; } enum Enum { ONE = 1; TWO = 2; TEN = 10; } enum OpenEnum { option features.enum_type = OPEN; UNKNOWN = 0; EINS = 1; ZWEI = 2; ZEHN = 10; } message UTF8Validated { string validated_string = 1 [features.utf8_validation = VERIFY, features.field_presence = IMPLICIT]; } message NestsUTF8Validated { UTF8Validated validated_message = 1; } // Message contains enum fields. message Enums { Enum opt_enum = 1; repeated Enum rpt_enum = 2; OpenEnum implicit_enum = 5 [features.field_presence = IMPLICIT]; enum NestedEnum { UNO = 1; DOS = 2; DIEZ = 10; } enum NestedOpenEnum { option features.enum_type = OPEN; UNKNOWN = 0; EINS = 1; ZWEI = 2; ZEHN = 10; } NestedEnum opt_nested_enum = 3; repeated NestedEnum rpt_nested_enum = 4; NestedOpenEnum implicit_nested_enum = 6 [features.field_presence = IMPLICIT]; } // Message contains repeated fields. message Repeats { repeated bool rpt_bool = 1; repeated int32 rpt_int32 = 2; repeated int64 rpt_int64 = 3; repeated uint32 rpt_uint32 = 4; repeated uint64 rpt_uint64 = 5; repeated float rpt_float = 6; repeated double rpt_double = 7; repeated string rpt_string = 8; repeated bytes rpt_bytes = 9; } // Message contains map fields. message Maps { map int32_to_str = 1; map str_to_nested = 4; } // Message type used as submessage. message Nested { string opt_string = 1; Nested opt_nested = 2; } // Message contains message and group fields. message Nests { Nested opt_nested = 1; message OptGroup { string opt_string = 1; Nested opt_nested = 2; message OptNestedGroup { fixed32 opt_fixed32 = 1; } OptNestedGroup optnestedgroup = 3 [features.message_encoding = DELIMITED]; OptNestedGroup nested_delimited_field = 4 [features.message_encoding = DELIMITED]; } OptGroup optgroup = 2 [features.message_encoding = DELIMITED]; OptGroup delimited_field = 3 [features.message_encoding = DELIMITED]; repeated Nested rpt_nested = 4; message RptGroup { repeated string rpt_string = 1; } repeated RptGroup rptgroup = 5 [ features.message_encoding = DELIMITED, features.repeated_field_encoding = EXPANDED ]; reserved reserved_field; } // Message contains required fields. message Requireds { bool req_bool = 1 [features.field_presence = LEGACY_REQUIRED]; sfixed64 req_sfixed64 = 2 [features.field_presence = LEGACY_REQUIRED]; double req_double = 3 [features.field_presence = LEGACY_REQUIRED]; string req_string = 4 [features.field_presence = LEGACY_REQUIRED]; Enum req_enum = 5 [features.field_presence = LEGACY_REQUIRED]; Nested req_nested = 6 [features.field_presence = LEGACY_REQUIRED]; } // Message contains both required and optional fields. message PartialRequired { string req_string = 1 [features.field_presence = LEGACY_REQUIRED]; string opt_string = 2; } // Following messages are for testing required field nested in optional, // repeated and map fields. message NestedWithRequired { string req_string = 1 [features.field_presence = LEGACY_REQUIRED]; } message IndirectRequired { NestedWithRequired opt_nested = 1; repeated NestedWithRequired rpt_nested = 2; map str_to_nested = 3; oneof union { NestedWithRequired oneof_nested = 4; } } // Following messages are for testing extensions. message Extensions { string opt_string = 1; extensions 20 to 100; bool opt_bool = 101; int32 opt_int32 = 2; } extend Extensions { bool opt_ext_bool = 21; string opt_ext_string = 22; Enum opt_ext_enum = 23; Nested opt_ext_nested = 24; PartialRequired opt_ext_partial = 25; repeated fixed32 rpt_ext_fixed32 = 31; repeated Enum rpt_ext_enum = 32; repeated Nested rpt_ext_nested = 33; } message ExtensionsContainer { extend Extensions { bool opt_ext_bool = 51; string opt_ext_string = 52; Enum opt_ext_enum = 53; Nested opt_ext_nested = 54; PartialRequired opt_ext_partial = 55; repeated string rpt_ext_string = 61; repeated Enum rpt_ext_enum = 62; repeated Nested rpt_ext_nested = 63; } } // Following messages are for testing MessageSet. message MessageSet { option message_set_wire_format = true; extensions 4 to max; } message MessageSetExtension { string opt_string = 1; extend MessageSet { MessageSetExtension message_set_extension = 10; MessageSetExtension not_message_set_extension = 20; Nested ext_nested = 30; } } message FakeMessageSet { extensions 4 to max; } message FakeMessageSetExtension { string opt_string = 1; extend FakeMessageSet { FakeMessageSetExtension message_set_extension = 10; } } extend MessageSet { FakeMessageSetExtension message_set_extension = 50; } // Message contains well-known type fields. message KnownTypes { google.protobuf.BoolValue opt_bool = 1; google.protobuf.Int32Value opt_int32 = 2; google.protobuf.Int64Value opt_int64 = 3; google.protobuf.UInt32Value opt_uint32 = 4; google.protobuf.UInt64Value opt_uint64 = 5; google.protobuf.FloatValue opt_float = 6; google.protobuf.DoubleValue opt_double = 7; google.protobuf.StringValue opt_string = 8; google.protobuf.BytesValue opt_bytes = 9; google.protobuf.Duration opt_duration = 20; google.protobuf.Timestamp opt_timestamp = 21; google.protobuf.Struct opt_struct = 25; google.protobuf.ListValue opt_list = 26; google.protobuf.Value opt_value = 27; google.protobuf.NullValue opt_null = 28; google.protobuf.Empty opt_empty = 30; google.protobuf.Any opt_any = 32; google.protobuf.FieldMask opt_fieldmask = 40; }