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

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

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