// This is the first detached comment for the syntax.
// This is a second detached comment.
// This is a third.
// Syntax comment...
syntax = "proto2"; // Syntax trailer.
// And now the package declaration
package foo.bar;
// option comments FTW!!!
option go_package = "github.com/jhump/protoreflect/internal/testprotos";
import public "google/protobuf/empty.proto";
import "desc_test_options.proto";
// Multiple white space lines (like above) cannot
// be preserved...
// We need a request for our RPC service below.
message Request {
  option deprecated = true; // deprecated!
  // A field comment
  repeated int32 ids = 1 [packed = true, json_name = "|foo|", (testprotos.ffubar) = "abc", (testprotos.ffubarb) = "xyz"]; // field trailer #1...
  // lead mfubar
  option (testprotos.mfubar) = true; // trailing mfubar
  // some detached comments
  // some detached comments
  // Another field comment
  // label comment
  optional string name = 2 [default = "fubar"];
  extensions 100 to 200;
  extensions 201 to 250 [(testprotos.exfubarb) = "\000\001\002\003\004\005\006\007", (testprotos.exfubar) = "splat!"];
  reserved 10 to 20, 30 to 50;
  reserved "foo", "bar", "baz";
  // Group comment
  optional group Extras = 3 {
    // this is a custom option
    option (testprotos.mfubar) = false;
    optional double dbl = 1;
    optional float flt = 2;
    option no_standard_descriptor_accessor = false;
    // Leading comment...
    optional string str = 3; // Trailing comment...
  }
  enum MarioCharacters {
    // allow_alias comments!
    option allow_alias = true;
    MARIO = 1 [(testprotos.evfubars) = -314, (testprotos.evfubar) = 278];
    LUIGI = 2 [(testprotos.evfubaruf) = 100, (testprotos.evfubaru) = 200];
    PEACH = 3;
    BOWSER = 4;
    option (testprotos.efubars) = -321;
    WARIO = 5;
    WALUIGI = 6;
    SHY_GUY = 7 [(testprotos.evfubarsf) = 10101];
    HEY_HO = 7;
    MAGIKOOPA = 8;
    KAMEK = 8;
    SNIFIT = -101;
    option (testprotos.efubar) = 123;
  }
  // can be this or that
  oneof abc {
    string this = 4;
    int32 that = 5;
  }
  // can be these or those
  oneof xyz {
    string these = 6;
    int32 those = 7;
  }
  // map field
  map<string, string> things = 8;
}
extend Request {
  // comment for guid1
  optional uint64 guid1 = 123;
  // ... and a comment for guid2
  optional uint64 guid2 = 124;
}
message AnEmptyMessage {
}
// Service comment
service RpcService {
  // option that sets field
  option (testprotos.sfubar) = { id:100 name:"bob"  };
  option deprecated = false; // DEPRECATED!
  option (testprotos.sfubare) = VALUE;
  // Method comment
  rpc StreamingRpc ( stream Request ) returns ( Request );
  rpc UnaryRpc ( Request ) returns ( google.protobuf.Empty ) {
    option deprecated = true;
    option (testprotos.mtfubar) = 12.340000;
    option (testprotos.mtfubard) = 123.456000;
  }
}
