// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  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

edition = "2024";

// Treat all fields as implicit present by default (proto3 behavior).
option features.field_presence = IMPLICIT;

// This file contains definitions that have different behavior in proto3.

// We don't put this in a package within proto2 because we need to make sure
// that the generated code doesn't depend on being in the proto2 namespace.
// In map_test_util.h we do "using namespace unittest = proto2_unittest".
package proto3_unittest;

message TestProto3BytesMap {
  map<int32, bytes> map_bytes = 1;
  map<int32, string> map_string = 2;
}

message TestI32StrMap {
  option features.enforce_naming_style = STYLE_LEGACY;

  map<int32, string> m_32_str = 1;
}
