// 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 "annotation/annotation.proto";
import "test/test.proto";
import weak "test/weak1/test_weak.proto";
import weak "test/weak2/test_weak.proto";

option go_package = "google.golang.org/protobuf/internal/testprotos/fieldtrack";

message TestFieldTrack {
  option (go_annotation.track_field_use) = true;

  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 goproto.proto.test.TestAllTypes.NestedEnum    optional_enum    = 16;
  optional goproto.proto.test.TestAllTypes.NestedMessage optional_message = 17;

  repeated int32    repeated_int32    = 21;
  repeated int64    repeated_int64    = 22;
  repeated uint32   repeated_uint32   = 23;
  repeated uint64   repeated_uint64   = 24;
  repeated sint32   repeated_sint32   = 25;
  repeated sint64   repeated_sint64   = 26;
  repeated fixed32  repeated_fixed32  = 27;
  repeated fixed64  repeated_fixed64  = 28;
  repeated sfixed32 repeated_sfixed32 = 29;
  repeated sfixed64 repeated_sfixed64 = 30;
  repeated float    repeated_float    = 31;
  repeated double   repeated_double   = 32;
  repeated bool     repeated_bool     = 33;
  repeated string   repeated_string   = 34;
  repeated bytes    repeated_bytes    = 35;
  repeated goproto.proto.test.TestAllTypes.NestedEnum    repeated_enum    = 36;
  repeated goproto.proto.test.TestAllTypes.NestedMessage repeated_message = 37;

  map <string, int32>    map_string_int32    = 41;
  map <string, int64>    map_string_int64    = 42;
  map <string, uint32>   map_string_uint32   = 43;
  map <string, uint64>   map_string_uint64   = 44;
  map <string, sint32>   map_string_sint32   = 45;
  map <string, sint64>   map_string_sint64   = 46;
  map <string, fixed32>  map_string_fixed32  = 47;
  map <string, fixed64>  map_string_fixed64  = 48;
  map <string, sfixed32> map_string_sfixed32 = 49;
  map <string, sfixed64> map_string_sfixed64 = 50;
  map <string, float>    map_string_float    = 51;
  map <string, double>   map_string_double   = 52;
  map <string, bool>     map_string_bool     = 53;
  map <string, string>   map_string_string   = 54;
  map <string, bytes>    map_string_bytes    = 55;
  map <string, goproto.proto.test.TestAllTypes.NestedEnum>    map_string_enum    = 56;
  map <string, goproto.proto.test.TestAllTypes.NestedMessage> map_string_message = 57;

  optional goproto.proto.test.weak.WeakImportMessage1 weak_message1 = 100 [weak=true];
  optional goproto.proto.test.weak.WeakImportMessage2 weak_message2 = 101 [weak=true];
}
