syntax = "proto2";

package protobuf_unittest_extra;

option csharp_namespace = "Google.ProtocolBuffers.TestProtos";
option optimize_for = LITE_RUNTIME;
option java_package = "com.google.protobuf";

message TestRequiredLite {
  required int32 d = 1;
  required ExtraEnum en = 2 [default = DEFAULT];
}

enum ExtraEnum {
  DEFAULT = 10;
  EXLITE_FOO = 7;
  EXLITE_BAR = 8;
  EXLITE_BAZ = 9;
}

message TestInteropPersonLite {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
  repeated int32 codes = 10 [packed=true];

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
  
  repeated group Addresses = 5 {
    required string address = 1;
    optional string address2 = 2;
    required string city = 3;
    required string state = 4;
    required fixed32 zip = 5;
  }

  extensions 100 to 199;
}

message  TestInteropEmployeeIdLite {
  required string number = 1;
}
  
extend TestInteropPersonLite {
  // Note: changed from required to optional, as required fields are not
  // permitted in extensions. (The fact that this was allowed in protogen
  // before was almost certainly a bug.)
  optional TestInteropEmployeeIdLite employee_id_lite = 126;
}

/* Removed from unittest_lite.proto and added back here */

message TestUnpackedExtensionsLite {
  extensions 1 to max;
}

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

extend TestUnpackedExtensionsLite {
  repeated    int32 unpacked_int32_extension_lite    =  90;
  repeated    int64 unpacked_int64_extension_lite    =  91;
  repeated   uint32 unpacked_uint32_extension_lite   =  92;
  repeated   uint64 unpacked_uint64_extension_lite   =  93;
  repeated   sint32 unpacked_sint32_extension_lite   =  94;
  repeated   sint64 unpacked_sint64_extension_lite   =  95;
  repeated  fixed32 unpacked_fixed32_extension_lite  =  96;
  repeated  fixed64 unpacked_fixed64_extension_lite  =  97;
  repeated sfixed32 unpacked_sfixed32_extension_lite =  98;
  repeated sfixed64 unpacked_sfixed64_extension_lite =  99;
  repeated    float unpacked_float_extension_lite    = 100;
  repeated   double unpacked_double_extension_lite   = 101;
  repeated     bool unpacked_bool_extension_lite     = 102;
  repeated UnpackedTypesForeignEnumLite unpacked_enum_extension_lite = 103;
}

enum UnpackedTypesForeignEnumLite {
  FOREIGN_LITE_FOO = 4;
  FOREIGN_LITE_BAR = 5;
  FOREIGN_LITE_BAZ = 6;
}

message BucketOfBytes {
    optional bytes value = 1;
    
}
message BucketOfBytesEx {
    optional bytes value = 1;
    optional bytes value2 = 255;
}