diff --git a/session/marshal.go b/session/marshal.go index 8632398..cda9579 100644 --- a/session/marshal.go +++ b/session/marshal.go @@ -211,7 +211,7 @@ func (c *ObjectSessionContext) StableMarshal(buf []byte) []byte { } offset := proto.EnumMarshal(objectCtxVerbField, buf, int32(c.verb)) - proto.NestedStructureMarshalUnchecked(objectCtxTargetField, buf[offset:], objectSessionContextTarget{ + proto.NestedStructureMarshal(objectCtxTargetField, buf[offset:], objectSessionContextTarget{ cnr: c.cnr, objs: c.objs, }) @@ -225,7 +225,7 @@ func (c *ObjectSessionContext) StableSize() (size int) { } size += proto.EnumSize(objectCtxVerbField, int32(c.verb)) - size += proto.NestedStructureSizeUnchecked(objectCtxTargetField, objectSessionContextTarget{ + size += proto.NestedStructureSize(objectCtxTargetField, objectSessionContextTarget{ cnr: c.cnr, objs: c.objs, }) diff --git a/util/proto/marshal.go b/util/proto/marshal.go index c4f3a78..606086a 100644 --- a/util/proto/marshal.go +++ b/util/proto/marshal.go @@ -249,21 +249,12 @@ func VarUIntSize(x uint64) int { return (bits.Len64(x|1) + 6) / 7 } -type ptrStableMarshaler[T any] interface { - stableMarshaller - ~*T -} - -func NestedStructureMarshal[T any, M ptrStableMarshaler[T]](field int64, buf []byte, v M) int { - if v == nil { +func NestedStructureMarshal[T stableMarshaller](field int64, buf []byte, v T) int { + n := v.StableSize() + if n == 0 { return 0 } - return NestedStructureMarshalUnchecked(field, buf, v) -} - -func NestedStructureMarshalUnchecked[T stableMarshaller](field int64, buf []byte, v T) int { - n := v.StableSize() prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType) offset := binary.PutUvarint(buf, prefix) offset += binary.PutUvarint(buf[offset:], uint64(n)) @@ -272,17 +263,13 @@ func NestedStructureMarshalUnchecked[T stableMarshaller](field int64, buf []byte return offset + n } -func NestedStructureSize[T any, M ptrStableMarshaler[T]](field int64, v M) (size int) { - if v == nil { +func NestedStructureSize[T stableMarshaller](field int64, v T) (size int) { + n := v.StableSize() + if n == 0 { return 0 } - - return NestedStructureSizeUnchecked(field, v) -} - -func NestedStructureSizeUnchecked[T stableMarshaller](field int64, v T) int { - n := v.StableSize() - return protowire.SizeGroup(protowire.Number(field), protowire.SizeBytes(n)) + size = protowire.SizeGroup(protowire.Number(field), protowire.SizeBytes(n)) + return } func Fixed64Marshal(field int, buf []byte, v uint64) int {