// Protocol Buffers - Google's data interchange format // Copyright 2023 Google LLC. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd // LINT: LEGACY_NAMES // The purpose of this file is to be hostile on field/message/enum naming and // ensure that it works (e.g. collisions between names and language keywords, // collisions between two different field's accessor's names). syntax = "proto2"; // Note: Ideally this test could be 'package type.if.else.true.false' // which would work in Rust but would break the C++ codegen. package type.type; message Self { optional int32 for = 1; optional Self self = 2; optional bool true = 3; optional string false = 4; } message Pub { enum Self { enum = 0; } } message enum {} message Ref { oneof self { .type.type.Pub.Self const = 3; } } // A message where the accessors would collide that should still work. Note that // not all collisions problems are avoided, not least because C++ Proto does not // avoid all possible collisions (eg a field `x` and `clear_x` will often not // compile on C++). message AccessorsCollide { message X {} message SetX {} optional SetX set_x = 2; optional X x = 3; oneof o { bool x_mut = 5; } }