// 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.protoc.fieldnames;

option go_package = "google.golang.org/protobuf/cmd/protoc-gen-go/testdata/fieldnames";

// Assorted edge cases in field name conflict resolution.
//
// Not all (or possibly any) of these behave in an easily-understood fashion.
// This exists to demonstrate the current behavior and catch unintended
// changes in it.
message Message {
  // Various CamelCase conversions.
  optional string field_one = 1;
  optional string FieldTwo = 2;
  optional string fieldThree = 3;
  optional string field__four = 4;

  // Field names that conflict with standard methods on the message struct.
  optional string descriptor = 10;
  optional string marshal = 11;
  optional string unmarshal = 12;
  optional string proto_message = 13;

  // Field names that conflict with each other after CamelCasing.
  optional string CamelCase = 20;
  optional string CamelCase_ = 21;
  optional string camel_case = 22; // conflicts with 20, 21
  optional string CamelCase__ = 23; // conflicts with 21, 21, renamed 22

  // Field with a getter that conflicts with another field.
  optional string get_name = 30;
  optional string name = 31;

  // Oneof that conflicts with its first field: The oneof is renamed.
  oneof oneof_conflict_a {
    string OneofConflictA = 40;
  }

  // Oneof that conflicts with its second field: The field is renamed.
  oneof oneof_conflict_b {
    string oneof_no_conflict = 50;
    string OneofConflictB = 51;
  }

  // Oneof with a field name that conflicts with a nested message.
  oneof oneof_conflict_c {
    string oneof_message_conflict = 60;
  }
  message OneofMessageConflict {}
}
