// 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 "test/test_import.proto";
import public "test/test_public.proto";
import weak "test/weak1/test_weak.proto";
import weak "test/weak2/test_weak.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  = 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;

  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;
  }
  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;
  }
}

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 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 {
  extensions 1 to max;
}

extend TestAllExtensions {
  optional int32    optional_int32_extension    =  1;
  optional int64    optional_int64_extension    =  2;
  optional uint32   optional_uint32_extension   =  3;
  optional uint64   optional_uint64_extension   =  4;
  optional sint32   optional_sint32_extension   =  5;
  optional sint64   optional_sint64_extension   =  6;
  optional fixed32  optional_fixed32_extension  =  7;
  optional fixed64  optional_fixed64_extension  =  8;
  optional sfixed32 optional_sfixed32_extension =  9;
  optional sfixed64 optional_sfixed64_extension = 10;
  optional float    optional_float_extension    = 11;
  optional double   optional_double_extension   = 12;
  optional bool     optional_bool_extension     = 13;
  optional string   optional_string_extension   = 14;
  optional bytes    optional_bytes_extension    = 15;

  optional group OptionalGroup_extension = 16 {
    optional int32 a = 17;
  }

  optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;

  repeated int32    repeated_int32_extension    = 31;
  repeated int64    repeated_int64_extension    = 32;
  repeated uint32   repeated_uint32_extension   = 33;
  repeated uint64   repeated_uint64_extension   = 34;
  repeated sint32   repeated_sint32_extension   = 35;
  repeated sint64   repeated_sint64_extension   = 36;
  repeated fixed32  repeated_fixed32_extension  = 37;
  repeated fixed64  repeated_fixed64_extension  = 38;
  repeated sfixed32 repeated_sfixed32_extension = 39;
  repeated sfixed64 repeated_sfixed64_extension = 40;
  repeated float    repeated_float_extension    = 41;
  repeated double   repeated_double_extension   = 42;
  repeated bool     repeated_bool_extension     = 43;
  repeated string   repeated_string_extension   = 44;
  repeated bytes    repeated_bytes_extension    = 45;

  repeated group RepeatedGroup_extension = 46 {
    optional int32 a = 47;
  }

  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;

  optional int32    default_int32_extension    = 81 [default =  81    ];
  optional int64    default_int64_extension    = 82 [default =  82    ];
  optional uint32   default_uint32_extension   = 83 [default =  83    ];
  optional uint64   default_uint64_extension   = 84 [default =  84    ];
  optional sint32   default_sint32_extension   = 85 [default = -85    ];
  optional sint64   default_sint64_extension   = 86 [default =  86    ];
  optional fixed32  default_fixed32_extension  = 87 [default =  87    ];
  optional fixed64  default_fixed64_extension  = 88 [default =  88    ];
  optional sfixed32 default_sfixed32_extension = 89 [default =  89    ];
  optional sfixed64 default_sfixed64_extension = 80 [default = -90    ];
  optional float    default_float_extension    = 91 [default =  91.5  ];
  optional double   default_double_extension   = 92 [default =  92e3  ];
  optional bool     default_bool_extension     = 93 [default = true   ];
  optional string   default_string_extension   = 94 [default = "hello"];
  optional bytes    default_bytes_extension    = 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 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_extension    =  90 [packed = true];
  repeated    int64 packed_int64_extension    =  91 [packed = true];
  repeated   uint32 packed_uint32_extension   =  92 [packed = true];
  repeated   uint64 packed_uint64_extension   =  93 [packed = true];
  repeated   sint32 packed_sint32_extension   =  94 [packed = true];
  repeated   sint64 packed_sint64_extension   =  95 [packed = true];
  repeated  fixed32 packed_fixed32_extension  =  96 [packed = true];
  repeated  fixed64 packed_fixed64_extension  =  97 [packed = true];
  repeated sfixed32 packed_sfixed32_extension =  98 [packed = true];
  repeated sfixed64 packed_sfixed64_extension =  99 [packed = true];
  repeated    float packed_float_extension    = 100 [packed = true];
  repeated   double packed_double_extension   = 101 [packed = true];
  repeated     bool packed_bool_extension     = 102 [packed = true];
  repeated ForeignEnum packed_enum_extension  = 103 [packed = true];
}

message TestUnpackedExtensions {
  extensions 1 to max;
}

extend TestUnpackedExtensions {
  repeated    int32 unpacked_int32_extension    =  90 [packed = false];
  repeated    int64 unpacked_int64_extension    =  91 [packed = false];
  repeated   uint32 unpacked_uint32_extension   =  92 [packed = false];
  repeated   uint64 unpacked_uint64_extension   =  93 [packed = false];
  repeated   sint32 unpacked_sint32_extension   =  94 [packed = false];
  repeated   sint64 unpacked_sint64_extension   =  95 [packed = false];
  repeated  fixed32 unpacked_fixed32_extension  =  96 [packed = false];
  repeated  fixed64 unpacked_fixed64_extension  =  97 [packed = false];
  repeated sfixed32 unpacked_sfixed32_extension =  98 [packed = false];
  repeated sfixed64 unpacked_sfixed64_extension =  99 [packed = false];
  repeated    float unpacked_float_extension    = 100 [packed = false];
  repeated   double unpacked_double_extension   = 101 [packed = false];
  repeated     bool unpacked_bool_extension     = 102 [packed = false];
  repeated ForeignEnum unpacked_enum_extension  = 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;
  }
}
