// Copyright 2024 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.

// This testproto explicitly configures the API level of each message.
//
// This allows creating mixed trees of proto messages on different API levels.

edition = "2023";

package goproto.proto.test;

import "google/protobuf/go_features.proto";

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

message Open {
  option features.(pb.go).api_level = API_OPEN;

  // These fields allow for arbitrary mixing.
  Open open = 1;
  Hybrid hybrid = 2;
  Opaque opaque = 3;

  int32 optional_int32 = 4;
}

message Hybrid {
  option features.(pb.go).api_level = API_HYBRID;

  // These fields allow for arbitrary mixing.
  Open open = 1;
  Hybrid hybrid = 2;
  Opaque opaque = 3;

  int32 optional_int32 = 4;
}

message Opaque {
  option features.(pb.go).api_level = API_OPAQUE;

  // These fields allow for arbitrary mixing.
  Open open = 1;
  Hybrid hybrid = 2;
  Opaque opaque = 3;

  int32 optional_int32 = 4;
}

message OpenLazy {
  option features.(pb.go).api_level = API_OPEN;

  // These fields allow for arbitrary mixing.
  OpenLazy open = 1 [lazy = true];
  HybridLazy hybrid = 2 [lazy = true];
  OpaqueLazy opaque = 3 [lazy = true];

  int32 optional_int32 = 4;
}

message HybridLazy {
  option features.(pb.go).api_level = API_HYBRID;

  // These fields allow for arbitrary mixing.
  OpenLazy open = 1 [lazy = true];
  HybridLazy hybrid = 2 [lazy = true];
  OpaqueLazy opaque = 3 [lazy = true];

  int32 optional_int32 = 4;
}

message OpaqueLazy {
  option features.(pb.go).api_level = API_OPAQUE;

  // These fields allow for arbitrary mixing.
  OpenLazy open = 1 [lazy = true];
  HybridLazy hybrid = 2 [lazy = true];
  OpaqueLazy opaque = 3 [lazy = true];

  int32 optional_int32 = 4;
}
