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