package impl
import (
)
type mergeOptions struct{}
func ( mergeOptions) (, proto.Message) {
proto.Merge(, )
}
func ( *MessageInfo) ( protoiface.MergeInput) protoiface.MergeOutput {
, := .getPointer(.Destination)
if ! {
return protoiface.MergeOutput{}
}
, := .getPointer(.Source)
if ! {
return protoiface.MergeOutput{}
}
.mergePointer(, , mergeOptions{})
return protoiface.MergeOutput{Flags: protoiface.MergeComplete}
}
func ( *MessageInfo) (, pointer, mergeOptions) {
.init()
if .IsNil() {
panic(fmt.Sprintf("invalid value: merging into nil message"))
}
if .IsNil() {
return
}
for , := range .orderedCoderFields {
if .funcs.merge == nil {
continue
}
:= .Apply(.offset)
if .isPointer && .Elem().IsNil() {
continue
}
.funcs.merge(.Apply(.offset), , , )
}
if .extensionOffset.IsValid() {
:= .Apply(.extensionOffset).Extensions()
:= .Apply(.extensionOffset).Extensions()
if * == nil {
* = make(map[int32]ExtensionField)
}
for , := range * {
:= .Type()
:= getExtensionFieldInfo()
if .funcs.merge == nil {
continue
}
:= (*)[]
var protoreflect.Value
if .Type() == .Type() {
= .Value()
}
if !.IsValid() && .unmarshalNeedsValue {
= .New()
}
= .funcs.merge(, .Value(), )
.Set(.Type(), )
(*)[] =
}
}
if .unknownOffset.IsValid() {
:= .getUnknownBytes()
if != nil && len(*) > 0 {
:= .mutableUnknownBytes()
* = append(*, *...)
}
}
}
func (, protoreflect.Value, mergeOptions) protoreflect.Value {
return
}
func (, protoreflect.Value, mergeOptions) protoreflect.Value {
return protoreflect.ValueOfBytes(append(emptyBuf[:], .Bytes()...))
}
func (, protoreflect.Value, mergeOptions) protoreflect.Value {
:= .List()
:= .List()
for , := 0, .Len(); < ; ++ {
.Append(.Get())
}
return
}
func (, protoreflect.Value, mergeOptions) protoreflect.Value {
:= .List()
:= .List()
for , := 0, .Len(); < ; ++ {
:= .Get().Bytes()
:= append(emptyBuf[:], ...)
.Append(protoreflect.ValueOfBytes())
}
return
}
func (, protoreflect.Value, mergeOptions) protoreflect.Value {
:= .List()
:= .List()
for , := 0, .Len(); < ; ++ {
:= .Get().Message()
:= proto.Clone(.Interface()).ProtoReflect()
.Append(protoreflect.ValueOfMessage())
}
return
}
func (, protoreflect.Value, mergeOptions) protoreflect.Value {
.Merge(.Message().Interface(), .Message().Interface())
return
}
func (, pointer, *coderFieldInfo, mergeOptions) {
if .mi != nil {
if .Elem().IsNil() {
.SetPointer(pointerOfValue(reflect.New(.mi.GoReflectType.Elem())))
}
.mi.mergePointer(.Elem(), .Elem(), )
} else {
:= .AsValueOf(.ft).Elem()
:= .AsValueOf(.ft).Elem()
if .IsNil() {
.Set(reflect.New(.ft.Elem()))
}
.Merge(asMessage(), asMessage())
}
}
func (, pointer, *coderFieldInfo, mergeOptions) {
for , := range .PointerSlice() {
:= reflect.New(.ft.Elem().Elem())
if .mi != nil {
.mi.mergePointer(pointerOfValue(), , )
} else {
.Merge(asMessage(), asMessage(.AsValueOf(.ft.Elem().Elem())))
}
.AppendPointerSlice(pointerOfValue())
}
}
func (, pointer, *coderFieldInfo, mergeOptions) {
*.Bytes() = append(emptyBuf[:], *.Bytes()...)
}
func (, pointer, *coderFieldInfo, mergeOptions) {
:= *.Bytes()
if len() > 0 {
*.Bytes() = append(emptyBuf[:], ...)
}
}
func (, pointer, *coderFieldInfo, mergeOptions) {
:= .BytesSlice()
for , := range *.BytesSlice() {
* = append(*, append(emptyBuf[:], ...))
}
}