[#65] object: Fix SetMarshalData for PutSingle request

Allow to reset marshal data

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
Dmitrii Stepanov 2024-02-15 15:38:48 +03:00
parent 2a124b95bc
commit 634e24aba7
2 changed files with 7 additions and 6 deletions

View file

@ -1111,17 +1111,13 @@ func (r *PutSingleRequestBody) StableMarshal(buf []byte) []byte {
// SetMarshalData sets marshal data to reduce memory allocations. // SetMarshalData sets marshal data to reduce memory allocations.
// //
// It is unsafe to modify request data after setting marshal data. // It is unsafe to modify/copy request data after setting marshal data.
func (r *PutSingleRequestBody) SetMarshalData(data []byte) { func (r *PutSingleRequestBody) SetMarshalData(data []byte) {
if r == nil { if r == nil {
return return
} }
if data == nil { r.marshalData = data
r.marshalData = r.StableMarshal(nil)
} else {
r.marshalData = data
}
proto.NestedStructureSetMarshalData(putSingleReqObjectField, r.marshalData, r.object) proto.NestedStructureSetMarshalData(putSingleReqObjectField, r.marshalData, r.object)
} }

View file

@ -287,6 +287,11 @@ func NestedStructureSetMarshalData[T any, M setMarshalData[T]](field int64, pare
return 0 return 0
} }
if parentData == nil {
v.SetMarshalData(nil)
return 0
}
n := v.StableSize() n := v.StableSize()
buf := make([]byte, binary.MaxVarintLen64) buf := make([]byte, binary.MaxVarintLen64)
prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType) prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType)