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

// Author: trafacz@google.com (Todd Rafacz)
//  Based on original Protocol Buffers design by
//  Sanjay Ghemawat, Jeff Dean, and others.
//
// A proto file we will use for unit testing.

edition = "2023";

import "google/protobuf/unittest_lazy_dependencies_custom_option.proto";

// Some generic_services option(s) added automatically.
// See:  http://go/proto2-generic-services-default
option cc_generic_services = true;    // auto-added
option java_generic_services = true;  // auto-added
option py_generic_services = true;    // auto-added
option cc_enable_arenas = true;

// 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 test_util.h we do "using namespace unittest = protobuf_unittest".
package protobuf_unittest.lazy_imports;

// Protos optimized for SPEED use a strict superset of the generated code
// of equivalent ones optimized for CODE_SIZE, so we should optimize all our
// tests for speed unless explicitly testing code size optimization.
option optimize_for = SPEED;

option java_outer_classname = "UnittestLazyImportsProto";

// The following are used to test that the proto file
// with the definition of the following field types is
// not built when this proto file is built. Then test
// that calling message_type() etc will build the correct
// descriptor lazily and return it.

message ImportedMessage {
  LazyMessage lazy_message = 1;
}

message MessageCustomOption {}

message MessageCustomOption2 {
  option (lazy_enum_option) = LAZY_ENUM_0;
}
