-------- foo.bar (*linker.result) --------
syntax = "proto2";
package foo.bar;
import "desc_test_options.proto";
import public "google/protobuf/empty.proto";
option go_package = "github.com/jhump/protoreflect/v2/internal/testprotos";
message AnEmptyMessage {
}
// We need a request for our RPC service below.
message Request {
  option deprecated = true;
  option (.testprotos.mfubar) = true;
  // A field comment
  repeated int32 ids = 1 [
    json_name = "|foo|",
    packed = true,
    (.testprotos.ffubar) = "abc",
    (.testprotos.ffubarb) = "xyz"
  ];
  // label comment
  optional string name = 2 [default = "fubar"];
  // Group comment with emoji 😀 😍 👻 ❤ 💯 💥 🐶 🦂 🥑 🍻 🌍 🚕 🪐
  optional group Extras = 3 {
    option no_standard_descriptor_accessor = false;
    option (.testprotos.mfubar) = false;
    optional double dbl = 1;
    optional float flt = 2;
    // Leading comment...
    optional string str = 3;
  }
  // can be this or that
  oneof abc {
    string this = 4;
    int32 that = 5;
  }
  // can be these or those
  oneof xyz {
    option (.testprotos.oofubar) = "whoops, this has invalid UTF8! \274\377";
    string these = 6;
    int32 those = 7;
  }
  // map field
  map<string, string> things = 8;
  enum MarioCharacters {
    option allow_alias = true;
    option (.testprotos.efubar) = 123;
    option (.testprotos.efubars) = -321;
    SNIFIT = -101;
    MARIO = 1 [
      (.testprotos.evfubar) = 278,
      (.testprotos.evfubars) = -314
    ];
    LUIGI = 2 [
      (.testprotos.evfubaru) = 200,
      (.testprotos.evfubaruf) = 100
    ];
    PEACH = 3;
    BOWSER = 4;
    WARIO = 5;
    WALUIGI = 6;
    HEY_HO = 7;
    SHY_GUY = 7 [(.testprotos.evfubarsf) = 10101];
    KAMEK = 8;
    MAGIKOOPA = 8;
  }
  extensions 100 to 200;
  extensions 201 to 250 [
    (.testprotos.exfubar) = "splat!",
    (.testprotos.exfubarb) = "\000\001\002\003\004\005\006\007"
  ];
  reserved 10 to 20, 30 to 50;
  reserved "bar", "baz", "foo";
}
// Service comment
service RpcService {
  option deprecated = false;
  option (.testprotos.sfubar) = { id: 100, name: "bob" };
  option (.testprotos.sfubare) = VALUE;
  // Method comment
  rpc StreamingRpc ( stream .foo.bar.Request ) returns ( .foo.bar.Request );
  rpc UnaryRpc ( .foo.bar.Request ) returns ( .google.protobuf.Empty ) {
    option deprecated = true;
    option (.testprotos.mtfubar) = 12.340000;
    option (.testprotos.mtfubard) = 123.456000;
  }
}
extend .foo.bar.Request {
  // comment for guid1
  optional uint64 guid1 = 123;
  // ... and a comment for guid2
  optional uint64 guid2 = 124;
}
-------- foo.bar.Request (*linker.msgDescriptor) --------
// We need a request for our RPC service below.
message Request {
  option deprecated = true;
  option (.testprotos.mfubar) = true;
  // A field comment
  repeated int32 ids = 1 [
    json_name = "|foo|",
    packed = true,
    (.testprotos.ffubar) = "abc",
    (.testprotos.ffubarb) = "xyz"
  ];
  // label comment
  optional string name = 2 [default = "fubar"];
  // Group comment with emoji 😀 😍 👻 ❤ 💯 💥 🐶 🦂 🥑 🍻 🌍 🚕 🪐
  optional group Extras = 3 {
    option no_standard_descriptor_accessor = false;
    option (.testprotos.mfubar) = false;
    optional double dbl = 1;
    optional float flt = 2;
    // Leading comment...
    optional string str = 3;
  }
  // can be this or that
  oneof abc {
    string this = 4;
    int32 that = 5;
  }
  // can be these or those
  oneof xyz {
    option (.testprotos.oofubar) = "whoops, this has invalid UTF8! \274\377";
    string these = 6;
    int32 those = 7;
  }
  // map field
  map<string, string> things = 8;
  enum MarioCharacters {
    option allow_alias = true;
    option (.testprotos.efubar) = 123;
    option (.testprotos.efubars) = -321;
    SNIFIT = -101;
    MARIO = 1 [
      (.testprotos.evfubar) = 278,
      (.testprotos.evfubars) = -314
    ];
    LUIGI = 2 [
      (.testprotos.evfubaru) = 200,
      (.testprotos.evfubaruf) = 100
    ];
    PEACH = 3;
    BOWSER = 4;
    WARIO = 5;
    WALUIGI = 6;
    HEY_HO = 7;
    SHY_GUY = 7 [(.testprotos.evfubarsf) = 10101];
    KAMEK = 8;
    MAGIKOOPA = 8;
  }
  extensions 100 to 200;
  extensions 201 to 250 [
    (.testprotos.exfubar) = "splat!",
    (.testprotos.exfubarb) = "\000\001\002\003\004\005\006\007"
  ];
  reserved 10 to 20, 30 to 50;
  reserved "bar", "baz", "foo";
}
-------- foo.bar.Request.ids (*linker.fldDescriptor) --------
// A field comment
repeated int32 ids = 1 [
  json_name = "|foo|",
  packed = true,
  (.testprotos.ffubar) = "abc",
  (.testprotos.ffubarb) = "xyz"
];
-------- foo.bar.Request.name (*linker.fldDescriptor) --------
// label comment
optional string name = 2 [default = "fubar"];
-------- foo.bar.Request.extras (*linker.fldDescriptor) --------
// Group comment with emoji 😀 😍 👻 ❤ 💯 💥 🐶 🦂 🥑 🍻 🌍 🚕 🪐
optional group Extras = 3 {
  option no_standard_descriptor_accessor = false;
  option (.testprotos.mfubar) = false;
  optional double dbl = 1;
  optional float flt = 2;
  // Leading comment...
  optional string str = 3;
}
-------- foo.bar.Request.this (*linker.fldDescriptor) --------
string this = 4;
-------- foo.bar.Request.that (*linker.fldDescriptor) --------
int32 that = 5;
-------- foo.bar.Request.these (*linker.fldDescriptor) --------
string these = 6;
-------- foo.bar.Request.those (*linker.fldDescriptor) --------
int32 those = 7;
-------- foo.bar.Request.things (*linker.fldDescriptor) --------
// map field
map<string, string> things = 8;
-------- foo.bar.Request.abc (*linker.oneofDescriptor) --------
oneof abc {
  string this = 4;
  int32 that = 5;
}
-------- foo.bar.Request.xyz (*linker.oneofDescriptor) --------
oneof xyz {
  option (.testprotos.oofubar) = "whoops, this has invalid UTF8! \274\377";
  string these = 6;
  int32 those = 7;
}
-------- foo.bar.Request.Extras (*linker.msgDescriptor) --------
// Group comment with emoji 😀 😍 👻 ❤ 💯 💥 🐶 🦂 🥑 🍻 🌍 🚕 🪐
message Extras {
  option no_standard_descriptor_accessor = false;
  option (.testprotos.mfubar) = false;
  optional double dbl = 1;
  optional float flt = 2;
  // Leading comment...
  optional string str = 3;
}
-------- foo.bar.Request.Extras.dbl (*linker.fldDescriptor) --------
optional double dbl = 1;
-------- foo.bar.Request.Extras.flt (*linker.fldDescriptor) --------
optional float flt = 2;
-------- foo.bar.Request.Extras.str (*linker.fldDescriptor) --------
// Leading comment...
optional string str = 3;
-------- foo.bar.Request.ThingsEntry (*linker.msgDescriptor) --------
message ThingsEntry {
  option map_entry = true;
  optional string key = 1;
  optional string value = 2;
}
-------- foo.bar.Request.ThingsEntry.key (*linker.fldDescriptor) --------
optional string key = 1;
-------- foo.bar.Request.ThingsEntry.value (*linker.fldDescriptor) --------
optional string value = 2;
-------- foo.bar.Request.MarioCharacters (*linker.enumDescriptor) --------
enum MarioCharacters {
  option allow_alias = true;
  option (.testprotos.efubar) = 123;
  option (.testprotos.efubars) = -321;
  SNIFIT = -101;
  MARIO = 1 [
    (.testprotos.evfubar) = 278,
    (.testprotos.evfubars) = -314
  ];
  LUIGI = 2 [
    (.testprotos.evfubaru) = 200,
    (.testprotos.evfubaruf) = 100
  ];
  PEACH = 3;
  BOWSER = 4;
  WARIO = 5;
  WALUIGI = 6;
  HEY_HO = 7;
  SHY_GUY = 7 [(.testprotos.evfubarsf) = 10101];
  KAMEK = 8;
  MAGIKOOPA = 8;
}
-------- foo.bar.Request.MARIO (*linker.enValDescriptor) --------
MARIO = 1 [
  (.testprotos.evfubar) = 278,
  (.testprotos.evfubars) = -314
];
-------- foo.bar.Request.LUIGI (*linker.enValDescriptor) --------
LUIGI = 2 [
  (.testprotos.evfubaru) = 200,
  (.testprotos.evfubaruf) = 100
];
-------- foo.bar.Request.PEACH (*linker.enValDescriptor) --------
PEACH = 3;
-------- foo.bar.Request.BOWSER (*linker.enValDescriptor) --------
BOWSER = 4;
-------- foo.bar.Request.WARIO (*linker.enValDescriptor) --------
WARIO = 5;
-------- foo.bar.Request.WALUIGI (*linker.enValDescriptor) --------
WALUIGI = 6;
-------- foo.bar.Request.SHY_GUY (*linker.enValDescriptor) --------
SHY_GUY = 7 [(.testprotos.evfubarsf) = 10101];
-------- foo.bar.Request.HEY_HO (*linker.enValDescriptor) --------
HEY_HO = 7;
-------- foo.bar.Request.MAGIKOOPA (*linker.enValDescriptor) --------
MAGIKOOPA = 8;
-------- foo.bar.Request.KAMEK (*linker.enValDescriptor) --------
KAMEK = 8;
-------- foo.bar.Request.SNIFIT (*linker.enValDescriptor) --------
SNIFIT = -101;
-------- foo.bar.AnEmptyMessage (*linker.msgDescriptor) --------
message AnEmptyMessage {
}
-------- foo.bar.guid1 (*linker.extTypeDescriptor) --------
extend .foo.bar.Request {
  // comment for guid1
  optional uint64 guid1 = 123;
}
-------- foo.bar.guid2 (*linker.extTypeDescriptor) --------
extend .foo.bar.Request {
  // ... and a comment for guid2
  optional uint64 guid2 = 124;
}
-------- foo.bar.RpcService (*linker.svcDescriptor) --------
// Service comment
service RpcService {
  option deprecated = false;
  option (.testprotos.sfubar) = { id: 100, name: "bob" };
  option (.testprotos.sfubare) = VALUE;
  // Method comment
  rpc StreamingRpc ( stream .foo.bar.Request ) returns ( .foo.bar.Request );
  rpc UnaryRpc ( .foo.bar.Request ) returns ( .google.protobuf.Empty ) {
    option deprecated = true;
    option (.testprotos.mtfubar) = 12.340000;
    option (.testprotos.mtfubard) = 123.456000;
  }
}
-------- foo.bar.RpcService.StreamingRpc (*linker.mtdDescriptor) --------
// Method comment
rpc StreamingRpc ( stream .foo.bar.Request ) returns ( .foo.bar.Request );
-------- foo.bar.RpcService.UnaryRpc (*linker.mtdDescriptor) --------
rpc UnaryRpc ( .foo.bar.Request ) returns ( .google.protobuf.Empty ) {
  option deprecated = true;
  option (.testprotos.mtfubar) = 12.340000;
  option (.testprotos.mtfubard) = 123.456000;
}
