8 import ( |
8 import ( |
9 "math" |
9 "math" |
10 |
10 |
11 "google.golang.org/protobuf/encoding/protowire" |
11 "google.golang.org/protobuf/encoding/protowire" |
12 "google.golang.org/protobuf/internal/errors" |
12 "google.golang.org/protobuf/internal/errors" |
13 pref "google.golang.org/protobuf/reflect/protoreflect" |
13 "google.golang.org/protobuf/reflect/protoreflect" |
14 ) |
14 ) |
15 |
15 |
16 // The MessageSet wire format is equivalent to a message defined as follows, |
16 // The MessageSet wire format is equivalent to a message defined as follows, |
17 // where each Item defines an extension field with a field number of 'type_id' |
17 // where each Item defines an extension field with a field number of 'type_id' |
18 // and content of 'message'. MessageSet extensions must be non-repeated message |
18 // and content of 'message'. MessageSet extensions must be non-repeated message |
31 ) |
31 ) |
32 |
32 |
33 // ExtensionName is the field name for extensions of MessageSet. |
33 // ExtensionName is the field name for extensions of MessageSet. |
34 // |
34 // |
35 // A valid MessageSet extension must be of the form: |
35 // A valid MessageSet extension must be of the form: |
|
36 // |
36 // message MyMessage { |
37 // message MyMessage { |
37 // extend proto2.bridge.MessageSet { |
38 // extend proto2.bridge.MessageSet { |
38 // optional MyMessage message_set_extension = 1234; |
39 // optional MyMessage message_set_extension = 1234; |
39 // } |
40 // } |
40 // ... |
41 // ... |
41 // } |
42 // } |
42 const ExtensionName = "message_set_extension" |
43 const ExtensionName = "message_set_extension" |
43 |
44 |
44 // IsMessageSet returns whether the message uses the MessageSet wire format. |
45 // IsMessageSet returns whether the message uses the MessageSet wire format. |
45 func IsMessageSet(md pref.MessageDescriptor) bool { |
46 func IsMessageSet(md protoreflect.MessageDescriptor) bool { |
46 xmd, ok := md.(interface{ IsMessageSet() bool }) |
47 xmd, ok := md.(interface{ IsMessageSet() bool }) |
47 return ok && xmd.IsMessageSet() |
48 return ok && xmd.IsMessageSet() |
48 } |
49 } |
49 |
50 |
50 // IsMessageSetExtension reports this field properly extends a MessageSet. |
51 // IsMessageSetExtension reports this field properly extends a MessageSet. |
51 func IsMessageSetExtension(fd pref.FieldDescriptor) bool { |
52 func IsMessageSetExtension(fd protoreflect.FieldDescriptor) bool { |
52 switch { |
53 switch { |
53 case fd.Name() != ExtensionName: |
54 case fd.Name() != ExtensionName: |
54 return false |
55 return false |
55 case !IsMessageSet(fd.ContainingMessage()): |
56 case !IsMessageSet(fd.ContainingMessage()): |
56 return false |
57 return false |