// 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 = 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;

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

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

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 int32 same_field_number = 16;
    optional TestAllTypes.NestedMessage optional_nested_message = 1000;
  }

  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;
    optional TestAllTypes.NestedMessage optional_nested_message = 1001;
  }

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

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