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

// Test Protobuf definitions with proto3 syntax.
syntax = "proto3";

package pb3;
option go_package = "google.golang.org/protobuf/internal/testprotos/textpb3";

// Scalars contains scalar field types.
message Scalars {
  bool s_bool = 1;
  int32 s_int32 = 2;
  int64 s_int64 = 3;
  uint32 s_uint32 = 4;
  uint64 s_uint64 = 5;
  sint32 s_sint32 = 6;
  sint64 s_sint64 = 7;
  fixed32 s_fixed32 = 8;
  fixed64 s_fixed64 = 9;
  sfixed32 s_sfixed32 = 10;
  sfixed64 s_sfixed64 = 11;

  // Textproto marshal outputs fields in the same order as this proto
  // definition regardless of field number. Following fields are intended to
  // test that assumption.

  float s_float = 20;
  double s_double = 21;

  bytes s_bytes = 14;
  string s_string = 13;
}

enum Enum {
  ZERO = 0;
  ONE = 1;
  TWO = 2;
  TEN = 10;
}

// Message contains enum fields.
message Enums {
  Enum s_enum = 1;

  enum NestedEnum {
  	CERO = 0;
	UNO = 1;
	DOS = 2;
	DIEZ = 10;
  }
  NestedEnum s_nested_enum = 3;
}

// Message contains nested message field.
message Nests {
  Nested s_nested = 2;
}

// Message type used as submessage.
message Nested {
  string s_string = 1;
  Nested s_nested = 2;
}

// Message contains oneof field.
message Oneofs {
  oneof union {
    Enum oneof_enum = 1;
    string oneof_string = 2;
    Nested oneof_nested = 3;
  }
}

// Message contains map fields.
message Maps {
  map<int32, string> int32_to_str = 1;
  map<bool, uint32> bool_to_uint32 = 2;
  map<uint64, Enum> uint64_to_enum = 3;
  map<string, Nested> str_to_nested = 4;
  map<string, Oneofs> str_to_oneofs = 5;
}

// Message for testing json_name option.
message JSONNames {
  string s_string = 1 [json_name = "foo_bar"];
}
