// Copyright 2018 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.

syntax = "proto2";

package goproto.proto.test;

import public "internal/testprotos/test/test_public.proto";

import weak "internal/testprotos/test/weak1/test_weak.proto";
import weak "internal/testprotos/test/weak2/test_weak.proto";

import "internal/testprotos/enums/enums.proto";
import "internal/testprotos/required/required.proto";
import "internal/testprotos/test/test_import.proto";

option go_package = "google.golang.org/protobuf/internal/testprotos/test";

message TestAllTypes {
  message NestedMessage {
    optional int32 a = 1;
    optional TestAllTypes corecursive = 2;
  }

  enum NestedEnum {
    FOO = 0;
    BAR = 1;
    BAZ = 2;
    NEG = -1;  // Intentionally negative.
  }

  optional int32 optional_int32 = 1;
  optional int64 optional_int64 = 2;
  optional uint32 optional_uint32 = 3;
  optional uint64 optional_uint64 = 4;
  optional sint32 optional_sint32 = 5;
  optional sint64 optional_sint64 = 6;
  optional fixed32 optional_fixed32 = 7;
  optional fixed64 optional_fixed64 = 8;
  optional sfixed32 optional_sfixed32 = 9;
  optional sfixed64 optional_sfixed64 = 10;
  optional float optional_float = 11;
  optional double optional_double = 12;
  optional bool optional_bool = 13;
  optional string optional_string = 14;
  optional bytes optional_bytes = 15;
  optional group OptionalGroup = 16 {
    optional int32 a = 17;
    optional NestedMessage optional_nested_message = 1000;
    optional int32 same_field_number = 16;
  }
  optional NestedMessage optional_nested_message = 18;
  optional ForeignMessage optional_foreign_message = 19;
  optional ImportMessage optional_import_message = 20;
  optional NestedEnum optional_nested_enum = 21;
  optional ForeignEnum optional_foreign_enum = 22;
  optional ImportEnum optional_import_enum = 23;
  optional NestedMessage optional_lazy_nested_message = 24 [lazy = true];

  repeated int32 repeated_int32 = 31;
  repeated int64 repeated_int64 = 32;
  repeated uint32 repeated_uint32 = 33;
  repeated uint64 repeated_uint64 = 34;
  repeated sint32 repeated_sint32 = 35;
  repeated sint64 repeated_sint64 = 36;
  repeated fixed32 repeated_fixed32 = 37;
  repeated fixed64 repeated_fixed64 = 38;
  repeated sfixed32 repeated_sfixed32 = 39;
  repeated sfixed64 repeated_sfixed64 = 40;
  repeated float repeated_float = 41;
  repeated double repeated_double = 42;
  repeated bool repeated_bool = 43;
  repeated string repeated_string = 44;
  repeated bytes repeated_bytes = 45;
  repeated group RepeatedGroup = 46 {
    optional int32 a = 47;
    optional NestedMessage optional_nested_message = 1001;
  }
  repeated NestedMessage repeated_nested_message = 48;
  repeated ForeignMessage repeated_foreign_message = 49;
  repeated ImportMessage repeated_importmessage = 50;
  repeated NestedEnum repeated_nested_enum = 51;
  repeated ForeignEnum repeated_foreign_enum = 52;
  repeated ImportEnum repeated_importenum = 53;

  map<int32, int32> map_int32_int32 = 56;
  map<int64, int64> map_int64_int64 = 57;
  map<uint32, uint32> map_uint32_uint32 = 58;
  map<uint64, uint64> map_uint64_uint64 = 59;
  map<sint32, sint32> map_sint32_sint32 = 60;
  map<sint64, sint64> map_sint64_sint64 = 61;
  map<fixed32, fixed32> map_fixed32_fixed32 = 62;
  map<fixed64, fixed64> map_fixed64_fixed64 = 63;
  map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 64;
  map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 65;
  map<int32, float> map_int32_float = 66;
  map<int32, double> map_int32_double = 67;
  map<bool, bool> map_bool_bool = 68;
  map<string, string> map_string_string = 69;
  map<string, bytes> map_string_bytes = 70;
  map<string, NestedMessage> map_string_nested_message = 71;
  map<string, NestedEnum> map_string_nested_enum = 73;

  // Singular with defaults
  optional int32 default_int32 = 81 [default = 81];
  optional int64 default_int64 = 82 [default = 82];
  optional uint32 default_uint32 = 83 [default = 83];
  optional uint64 default_uint64 = 84 [default = 84];
  optional sint32 default_sint32 = 85 [default = -85];
  optional sint64 default_sint64 = 86 [default = 86];
  optional fixed32 default_fixed32 = 87 [default = 87];
  optional fixed64 default_fixed64 = 88 [default = 88];
  optional sfixed32 default_sfixed32 = 89 [default = 89];
  optional sfixed64 default_sfixed64 = 80 [default = -90];
  optional float default_float = 91 [default = 91.5];
  optional double default_double = 92 [default = 92e3];
  optional bool default_bool = 93 [default = true];
  optional string default_string = 94 [default = "hello"];
  optional bytes default_bytes = 95 [default = "world"];
  optional NestedEnum default_nested_enum = 96 [default = BAR];
  optional ForeignEnum default_foreign_enum = 97 [default = FOREIGN_BAR];

  oneof oneof_field {
    uint32 oneof_uint32 = 111;
    NestedMessage oneof_nested_message = 112;
    string oneof_string = 113;
    bytes oneof_bytes = 114;
    bool oneof_bool = 115;
    uint64 oneof_uint64 = 116;
    float oneof_float = 117;
    double oneof_double = 118;
    NestedEnum oneof_enum = 119;
    group OneofGroup = 121 {
      optional int32 a = 1;
      optional int32 b = 2;
    }
  }

  // A oneof with exactly one field.
  oneof oneof_optional {
    uint32 oneof_optional_uint32 = 120;
  }
}

message TestManyMessageFieldsMessage {
  optional TestAllTypes f1 = 1;
  optional TestAllTypes f2 = 2;
  optional TestAllTypes f3 = 3;
  optional TestAllTypes f4 = 4;
  optional TestAllTypes f5 = 5;
  optional TestAllTypes f6 = 6;
  optional TestAllTypes f7 = 7;
  optional TestAllTypes f8 = 8;
  optional TestAllTypes f9 = 9;
  optional TestAllTypes f10 = 10;
  optional TestAllTypes f11 = 11;
  optional TestAllTypes f12 = 12;
  optional TestAllTypes f13 = 13;
  optional TestAllTypes f14 = 14;
  optional TestAllTypes f15 = 15;
  optional TestAllTypes f16 = 16;
  optional TestAllTypes f17 = 17;
  optional TestAllTypes f18 = 18;
  optional TestAllTypes f19 = 19;
  optional TestAllTypes f20 = 20;
  optional TestAllTypes f21 = 21;
  optional TestAllTypes f22 = 22;
  optional TestAllTypes f23 = 23;
  optional TestAllTypes f24 = 24;
  optional TestAllTypes f25 = 25;
  optional TestAllTypes f26 = 26;
  optional TestAllTypes f27 = 27;
  optional TestAllTypes f28 = 28;
  optional TestAllTypes f29 = 29;
  optional TestAllTypes f30 = 30;
  optional TestAllTypes f31 = 31;
  optional TestAllTypes f32 = 32;
  optional TestAllTypes f33 = 33;
  optional TestAllTypes f34 = 34;
  optional TestAllTypes f35 = 35;
  optional TestAllTypes f36 = 36;
  optional TestAllTypes f37 = 37;
  optional TestAllTypes f38 = 38;
  optional TestAllTypes f39 = 39;
  optional TestAllTypes f40 = 40;
  optional TestAllTypes f41 = 41;
  optional TestAllTypes f42 = 42;
  optional TestAllTypes f43 = 43;
  optional TestAllTypes f44 = 44;
  optional TestAllTypes f45 = 45;
  optional TestAllTypes f46 = 46;
  optional TestAllTypes f47 = 47;
  optional TestAllTypes f48 = 48;
  optional TestAllTypes f49 = 49;
  optional TestAllTypes f50 = 50;
  optional TestAllTypes f51 = 51;
  optional TestAllTypes f52 = 52;
  optional TestAllTypes f53 = 53;
  optional TestAllTypes f54 = 54;
  optional TestAllTypes f55 = 55;
  optional TestAllTypes f56 = 56;
  optional TestAllTypes f57 = 57;
  optional TestAllTypes f58 = 58;
  optional TestAllTypes f59 = 59;
  optional TestAllTypes f60 = 60;
  optional TestAllTypes f61 = 61;
  optional TestAllTypes f62 = 62;
  optional TestAllTypes f63 = 63;
  optional TestAllTypes f64 = 64;
  optional TestAllTypes f65 = 65;
  optional TestAllTypes f66 = 66;
  optional TestAllTypes f67 = 67;
  optional TestAllTypes f68 = 68;
  optional TestAllTypes f69 = 69;
  optional TestAllTypes f70 = 70;
  optional TestAllTypes f71 = 71;
  optional TestAllTypes f72 = 72;
  optional TestAllTypes f73 = 73;
  optional TestAllTypes f74 = 74;
  optional TestAllTypes f75 = 75;
  optional TestAllTypes f76 = 76;
  optional TestAllTypes f77 = 77;
  optional TestAllTypes f78 = 78;
  optional TestAllTypes f79 = 79;
  optional TestAllTypes f80 = 80;
  optional TestAllTypes f81 = 81;
  optional TestAllTypes f82 = 82;
  optional TestAllTypes f83 = 83;
  optional TestAllTypes f84 = 84;
  optional TestAllTypes f85 = 85;
  optional TestAllTypes f86 = 86;
  optional TestAllTypes f87 = 87;
  optional TestAllTypes f88 = 88;
  optional TestAllTypes f89 = 89;
  optional TestAllTypes f90 = 90;
  optional TestAllTypes f91 = 91;
  optional TestAllTypes f92 = 92;
  optional TestAllTypes f93 = 93;
  optional TestAllTypes f94 = 94;
  optional TestAllTypes f95 = 95;
  optional TestAllTypes f96 = 96;
  optional TestAllTypes f97 = 97;
  optional TestAllTypes f98 = 98;
  optional TestAllTypes f99 = 99;
  optional TestAllTypes f100 = 100;
}

message TestDeprecatedMessage {
  option deprecated = true;

  optional int32 deprecated_int32 = 1 [deprecated = true];
  enum DeprecatedEnum {
    option deprecated = true;

    DEPRECATED = 0 [deprecated = true];
  }
  oneof deprecated_oneof {
    int32 deprecated_oneof_field = 2 [deprecated = true];
  }
}

message TestOneofWithRequired {
  oneof oneof_field {
    uint32 oneof_uint32 = 1;
    goproto.proto.testrequired.Message oneof_required = 2;
  }
}

message ForeignMessage {
  optional int32 c = 1;
  optional int32 d = 2;
}

enum ForeignEnum {
  FOREIGN_FOO = 4;
  FOREIGN_BAR = 5;
  FOREIGN_BAZ = 6;
}

message TestReservedFields {
  reserved 2, 15, 9 to 11;
  reserved "bar", "baz";
}

enum TestReservedEnumFields {
  RESERVED_ENUM = 0;
  reserved 2, 15, 9 to 11;
  reserved "BAR", "BAZ";
}

message TestAllExtensions {
  message NestedMessage {
    optional int32 a = 1;
    optional TestAllExtensions corecursive = 2;
  }

  extensions 1 to max;
}

extend TestAllExtensions {
  optional int32 optional_int32 = 1;
  optional int64 optional_int64 = 2;
  optional uint32 optional_uint32 = 3;
  optional uint64 optional_uint64 = 4;
  optional sint32 optional_sint32 = 5;
  optional sint64 optional_sint64 = 6;
  optional fixed32 optional_fixed32 = 7;
  optional fixed64 optional_fixed64 = 8;
  optional sfixed32 optional_sfixed32 = 9;
  optional sfixed64 optional_sfixed64 = 10;
  optional float optional_float = 11;
  optional double optional_double = 12;
  optional bool optional_bool = 13;
  optional string optional_string = 14;
  optional bytes optional_bytes = 15;

  optional group OptionalGroup = 16 {
    optional int32 a = 17;
    optional int32 same_field_number = 16;
    optional TestAllExtensions.NestedMessage optional_nested_message = 1000;
  }

  optional TestAllExtensions.NestedMessage optional_nested_message = 18;
  optional TestAllTypes.NestedEnum optional_nested_enum = 21;

  repeated int32 repeated_int32 = 31;
  repeated int64 repeated_int64 = 32;
  repeated uint32 repeated_uint32 = 33;
  repeated uint64 repeated_uint64 = 34;
  repeated sint32 repeated_sint32 = 35;
  repeated sint64 repeated_sint64 = 36;
  repeated fixed32 repeated_fixed32 = 37;
  repeated fixed64 repeated_fixed64 = 38;
  repeated sfixed32 repeated_sfixed32 = 39;
  repeated sfixed64 repeated_sfixed64 = 40;
  repeated float repeated_float = 41;
  repeated double repeated_double = 42;
  repeated bool repeated_bool = 43;
  repeated string repeated_string = 44;
  repeated bytes repeated_bytes = 45;

  repeated group RepeatedGroup = 46 {
    optional int32 a = 47;
    optional TestAllExtensions.NestedMessage optional_nested_message = 1001;
  }

  repeated TestAllExtensions.NestedMessage repeated_nested_message = 48;
  repeated TestAllTypes.NestedEnum repeated_nested_enum = 51;

  optional int32 default_int32 = 81 [default = 81];
  optional int64 default_int64 = 82 [default = 82];
  optional uint32 default_uint32 = 83 [default = 83];
  optional uint64 default_uint64 = 84 [default = 84];
  optional sint32 default_sint32 = 85 [default = -85];
  optional sint64 default_sint64 = 86 [default = 86];
  optional fixed32 default_fixed32 = 87 [default = 87];
  optional fixed64 default_fixed64 = 88 [default = 88];
  optional sfixed32 default_sfixed32 = 89 [default = 89];
  optional sfixed64 default_sfixed64 = 80 [default = -90];
  optional float default_float = 91 [default = 91.5];
  optional double default_double = 92 [default = 92e3];
  optional bool default_bool = 93 [default = true];
  optional string default_string = 94 [default = "hello"];
  optional bytes default_bytes = 95 [default = "world"];
}

message TestNestedExtension {
  extend TestAllExtensions {
    optional string nested_string_extension = 1003;
  }
}

message TestRequired {
  required int32 required_field = 1;

  extend TestAllExtensions {
    optional TestRequired single = 1000;
    repeated TestRequired multi = 1001;
  }
}

message TestRequiredForeign {
  optional TestRequired optional_message = 1;
  repeated TestRequired repeated_message = 2;
  map<int32, TestRequired> map_message = 3;
  oneof oneof_field {
    TestRequired oneof_message = 4;
  }
}

message TestRequiredGroupFields {
  optional group OptionalGroup = 1 {
    required int32 a = 2;
  }
  repeated group RepeatedGroup = 3 {
    required int32 a = 4;
  }
}

message TestRequiredLazy {
  optional TestRequired optional_lazy_message = 1 [lazy = true];
}

message TestWeak {
  optional goproto.proto.test.weak.WeakImportMessage1 weak_message1 = 1
      [weak = true];
  optional goproto.proto.test.weak.WeakImportMessage2 weak_message2 = 2
      [weak = true];
}

message TestPackedTypes {
  repeated int32 packed_int32 = 90 [packed = true];
  repeated int64 packed_int64 = 91 [packed = true];
  repeated uint32 packed_uint32 = 92 [packed = true];
  repeated uint64 packed_uint64 = 93 [packed = true];
  repeated sint32 packed_sint32 = 94 [packed = true];
  repeated sint64 packed_sint64 = 95 [packed = true];
  repeated fixed32 packed_fixed32 = 96 [packed = true];
  repeated fixed64 packed_fixed64 = 97 [packed = true];
  repeated sfixed32 packed_sfixed32 = 98 [packed = true];
  repeated sfixed64 packed_sfixed64 = 99 [packed = true];
  repeated float packed_float = 100 [packed = true];
  repeated double packed_double = 101 [packed = true];
  repeated bool packed_bool = 102 [packed = true];
  repeated ForeignEnum packed_enum = 103 [packed = true];
}

message TestUnpackedTypes {
  repeated int32 unpacked_int32 = 90 [packed = false];
  repeated int64 unpacked_int64 = 91 [packed = false];
  repeated uint32 unpacked_uint32 = 92 [packed = false];
  repeated uint64 unpacked_uint64 = 93 [packed = false];
  repeated sint32 unpacked_sint32 = 94 [packed = false];
  repeated sint64 unpacked_sint64 = 95 [packed = false];
  repeated fixed32 unpacked_fixed32 = 96 [packed = false];
  repeated fixed64 unpacked_fixed64 = 97 [packed = false];
  repeated sfixed32 unpacked_sfixed32 = 98 [packed = false];
  repeated sfixed64 unpacked_sfixed64 = 99 [packed = false];
  repeated float unpacked_float = 100 [packed = false];
  repeated double unpacked_double = 101 [packed = false];
  repeated bool unpacked_bool = 102 [packed = false];
  repeated ForeignEnum unpacked_enum = 103 [packed = false];
}

message TestPackedExtensions {
  extensions 1 to max;
}

extend TestPackedExtensions {
  repeated int32 packed_int32 = 90 [packed = true];
  repeated int64 packed_int64 = 91 [packed = true];
  repeated uint32 packed_uint32 = 92 [packed = true];
  repeated uint64 packed_uint64 = 93 [packed = true];
  repeated sint32 packed_sint32 = 94 [packed = true];
  repeated sint64 packed_sint64 = 95 [packed = true];
  repeated fixed32 packed_fixed32 = 96 [packed = true];
  repeated fixed64 packed_fixed64 = 97 [packed = true];
  repeated sfixed32 packed_sfixed32 = 98 [packed = true];
  repeated sfixed64 packed_sfixed64 = 99 [packed = true];
  repeated float packed_float = 100 [packed = true];
  repeated double packed_double = 101 [packed = true];
  repeated bool packed_bool = 102 [packed = true];
  repeated ForeignEnum packed_enum = 103 [packed = true];
}

message TestUnpackedExtensions {
  extensions 1 to max;
}

extend TestUnpackedExtensions {
  repeated int32 unpacked_int32 = 90 [packed = false];
  repeated int64 unpacked_int64 = 91 [packed = false];
  repeated uint32 unpacked_uint32 = 92 [packed = false];
  repeated uint64 unpacked_uint64 = 93 [packed = false];
  repeated sint32 unpacked_sint32 = 94 [packed = false];
  repeated sint64 unpacked_sint64 = 95 [packed = false];
  repeated fixed32 unpacked_fixed32 = 96 [packed = false];
  repeated fixed64 unpacked_fixed64 = 97 [packed = false];
  repeated sfixed32 unpacked_sfixed32 = 98 [packed = false];
  repeated sfixed64 unpacked_sfixed64 = 99 [packed = false];
  repeated float unpacked_float = 100 [packed = false];
  repeated double unpacked_double = 101 [packed = false];
  repeated bool unpacked_bool = 102 [packed = false];
  repeated ForeignEnum unpacked_enum = 103 [packed = false];
}

// Test that RPC services work.
message FooRequest {}
message FooResponse {}

service TestService {
  rpc Foo(FooRequest) returns (FooResponse);
  rpc TestStream(stream FooRequest) returns (stream FooResponse);
}

service TestDeprecatedService {
  option deprecated = true;

  rpc Deprecated(TestDeprecatedMessage) returns (TestDeprecatedMessage) {
    option deprecated = true;
  }
}

message WeirdDefault {
  optional bytes weird_default = 1
      [default = "hello, \"world!\"\ndead\xde\xad\xbe\xefbeef`"];
}

message RemoteDefault {
  optional goproto.proto.enums.Enum default = 1;
  optional goproto.proto.enums.Enum zero = 2 [default = ZERO];
  optional goproto.proto.enums.Enum one = 3 [default = ONE];
  optional goproto.proto.enums.Enum elevent = 4 [default = ELEVENT];
  optional goproto.proto.enums.Enum seventeen = 5 [default = SEVENTEEN];
  optional goproto.proto.enums.Enum thirtyseven = 6 [default = THIRTYSEVEN];
  optional goproto.proto.enums.Enum sixtyseven = 7 [default = SIXTYSEVEN];
  optional goproto.proto.enums.Enum negative = 8 [default = NEGATIVE];
}
