// Copyright 2020 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 testretention;

import "cmd/protoc-gen-go/testdata/retention/options_message.proto";
import "google/protobuf/descriptor.proto";

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

option (imported_plain_option) = 1;
option (imported_runtime_retention_option) = 2;
option (imported_source_retention_option) = 3;

// Retention attributes set directly on custom options
extend google.protobuf.FileOptions {
  optional int32 plain_option = 505092806;
  optional int32 runtime_retention_option = 505039132
      [retention = RETENTION_RUNTIME];
  optional int32 source_retention_option = 504878676
      [retention = RETENTION_SOURCE];
}

option (plain_option) = 1;
option (runtime_retention_option) = 2;
option (source_retention_option) = 3;

option (file_option) = {
  plain_field: 1
  runtime_retention_field: 2
  source_retention_field: 3
};

// Retention attribute nested inside a repeated message field
extend google.protobuf.FileOptions {
  repeated OptionsMessage repeated_options = 504823570;
}

option (repeated_options) = {
  plain_field: 1
  runtime_retention_field: 2
  source_retention_field: 3
};

extend google.protobuf.ExtensionRangeOptions {
  optional OptionsMessage extension_range_option = 504822148;
}

extend google.protobuf.MessageOptions {
  optional OptionsMessage message_option = 504820819;
}

extend google.protobuf.FieldOptions {
  optional OptionsMessage field_option = 504589219;
}

extend google.protobuf.OneofOptions {
  optional OptionsMessage oneof_option = 504479153;
}

extend google.protobuf.EnumOptions {
  optional OptionsMessage enum_option = 504451567;
}

extend google.protobuf.EnumValueOptions {
  optional OptionsMessage enum_entry_option = 504450522;
}

extend google.protobuf.ServiceOptions {
  optional OptionsMessage service_option = 504387709;
}

extend google.protobuf.MethodOptions {
  optional OptionsMessage method_option = 504349420;
}

message Extendee {
  extensions 1, 2;
}

extend Extendee {
  optional int32 i = 1 [(field_option) = {
    plain_field: 1
    runtime_retention_field: 2
    source_retention_field: 3
  }];
}

message TopLevelMessage {
  option (message_option) = {
    plain_field: 1
    runtime_retention_field: 2
    source_retention_field: 3
  };

  message NestedMessage {
    option (message_option) = {
      plain_field: 1
      runtime_retention_field: 2
      source_retention_field: 3
    };
  }

  enum NestedEnum {
    option (enum_option) = {
      plain_field: 1
      runtime_retention_field: 2
      source_retention_field: 3
    };

    NESTED_UNKNOWN = 0;
  }

  optional float f = 1 [(field_option) = {
    plain_field: 1
    runtime_retention_field: 2
    source_retention_field: 3
  }];

  oneof o {
    option (oneof_option) = {
      plain_field: 1
      runtime_retention_field: 2
      source_retention_field: 3
    };

    int64 i = 2;
  }

  extensions 10 to 100 [(extension_range_option) = {
    plain_field: 1
    runtime_retention_field: 2
    source_retention_field: 3
  }];

  extend Extendee {
    optional string s = 2 [(field_option) = {
      plain_field: 1
      runtime_retention_field: 2
      source_retention_field: 3
    }];
  }
}

enum TopLevelEnum {
  option (enum_option) = {
    plain_field: 1
    runtime_retention_field: 2
    source_retention_field: 3
  };

  TOP_LEVEL_UNKNOWN = 0 [(enum_entry_option) = {
    plain_field: 1
    runtime_retention_field: 2
    source_retention_field: 3
  }];
}

service Service {
  option (service_option) = {
    plain_field: 1
    runtime_retention_field: 2
    source_retention_field: 3
  };

  rpc DoStuff(TopLevelMessage) returns (TopLevelMessage) {
    option (method_option) = {
      plain_field: 1
      runtime_retention_field: 2
      source_retention_field: 3
    };
  }
}