package proto
import (
)
func ( MarshalOptions) ( protoreflect.Message) ( int) {
.Range(func( protoreflect.FieldDescriptor, protoreflect.Value) bool {
+= messageset.SizeField(.Number())
+= protowire.SizeTag(messageset.FieldMessage)
+= protowire.SizeBytes(.size(.Message()))
return true
})
+= messageset.SizeUnknown(.GetUnknown())
return
}
func ( MarshalOptions) ( []byte, protoreflect.Message) ([]byte, error) {
if !flags.ProtoLegacy {
return , errors.New("no support for message_set_wire_format")
}
:= order.AnyFieldOrder
if .Deterministic {
= order.NumberFieldOrder
}
var error
order.RangeFields(, , func( protoreflect.FieldDescriptor, protoreflect.Value) bool {
, = .marshalMessageSetField(, , )
return == nil
})
if != nil {
return ,
}
return messageset.AppendUnknown(, .GetUnknown())
}
func ( MarshalOptions) ( []byte, protoreflect.FieldDescriptor, protoreflect.Value) ([]byte, error) {
= messageset.AppendFieldStart(, .Number())
= protowire.AppendTag(, messageset.FieldMessage, protowire.BytesType)
= protowire.AppendVarint(, uint64(.Size(.Message().Interface())))
, := .marshalMessage(, .Message())
if != nil {
return ,
}
= messageset.AppendFieldEnd()
return , nil
}
func ( UnmarshalOptions) ( []byte, protoreflect.Message) error {
if !flags.ProtoLegacy {
return errors.New("no support for message_set_wire_format")
}
return messageset.Unmarshal(, false, func( protowire.Number, []byte) error {
:= .unmarshalMessageSetField(, , )
if == errUnknown {
:= .GetUnknown()
= protowire.AppendTag(, , protowire.BytesType)
= protowire.AppendBytes(, )
.SetUnknown()
return nil
}
return
})
}
func ( UnmarshalOptions) ( protoreflect.Message, protowire.Number, []byte) error {
:= .Descriptor()
if !.ExtensionRanges().Has() {
return errUnknown
}
, := .Resolver.FindExtensionByNumber(.FullName(), )
if == protoregistry.NotFound {
return errUnknown
}
if != nil {
return errors.New("%v: unable to resolve extension %v: %v", .FullName(), , )
}
:= .TypeDescriptor()
if := .unmarshalMessage(, .Mutable().Message()); != nil {
return
}
return nil
}