2020-08-17 10:41:09 +00:00
|
|
|
package refs
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/nspcc-dev/neofs-api-go/util/proto"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2020-08-18 07:42:47 +00:00
|
|
|
ownerIDValField = 1
|
2020-08-17 10:41:09 +00:00
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
containerIDValField = 1
|
2020-08-17 10:41:09 +00:00
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
objectIDValField = 1
|
2020-08-17 10:41:09 +00:00
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
addressContainerField = 1
|
|
|
|
addressObjectField = 2
|
2020-08-20 07:59:45 +00:00
|
|
|
|
|
|
|
checksumTypeField = 1
|
|
|
|
checksumValueField = 2
|
2020-08-17 10:41:09 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func (o *OwnerID) StableMarshal(buf []byte) ([]byte, error) {
|
|
|
|
if o == nil {
|
|
|
|
return []byte{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
if buf == nil {
|
|
|
|
buf = make([]byte, o.StableSize())
|
|
|
|
}
|
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
_, err := proto.BytesMarshal(ownerIDValField, buf, o.val)
|
2020-08-17 10:41:09 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (o *OwnerID) StableSize() int {
|
|
|
|
if o == nil {
|
|
|
|
return 0
|
|
|
|
}
|
2020-08-18 07:42:47 +00:00
|
|
|
|
|
|
|
return proto.BytesSize(ownerIDValField, o.val)
|
2020-08-17 10:41:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (c *ContainerID) StableMarshal(buf []byte) ([]byte, error) {
|
|
|
|
if c == nil {
|
|
|
|
return []byte{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
if buf == nil {
|
|
|
|
buf = make([]byte, c.StableSize())
|
|
|
|
}
|
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
_, err := proto.BytesMarshal(containerIDValField, buf, c.val)
|
2020-08-17 10:41:09 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *ContainerID) StableSize() int {
|
|
|
|
if c == nil {
|
|
|
|
return 0
|
|
|
|
}
|
2020-08-18 07:42:47 +00:00
|
|
|
|
|
|
|
return proto.BytesSize(containerIDValField, c.val)
|
2020-08-17 10:41:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (o *ObjectID) StableMarshal(buf []byte) ([]byte, error) {
|
|
|
|
if o == nil {
|
|
|
|
return []byte{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
if buf == nil {
|
|
|
|
buf = make([]byte, o.StableSize())
|
|
|
|
}
|
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
_, err := proto.BytesMarshal(objectIDValField, buf, o.val)
|
2020-08-17 10:41:09 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (o *ObjectID) StableSize() int {
|
|
|
|
if o == nil {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
return proto.BytesSize(objectIDValField, o.val)
|
2020-08-17 10:41:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (a *Address) StableMarshal(buf []byte) ([]byte, error) {
|
|
|
|
if a == nil {
|
|
|
|
return []byte{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
if buf == nil {
|
|
|
|
buf = make([]byte, a.StableSize())
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
offset, n int
|
|
|
|
err error
|
|
|
|
)
|
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
n, err = proto.NestedStructureMarshal(addressContainerField, buf[offset:], a.cid)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
2020-08-17 10:41:09 +00:00
|
|
|
}
|
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
offset += n
|
2020-08-17 10:41:09 +00:00
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
_, err = proto.NestedStructureMarshal(addressObjectField, buf[offset:], a.oid)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
2020-08-17 10:41:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return buf, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (a *Address) StableSize() (size int) {
|
|
|
|
if a == nil {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
size += proto.NestedStructureSize(addressContainerField, a.cid)
|
2020-08-17 10:41:09 +00:00
|
|
|
|
2020-08-18 07:42:47 +00:00
|
|
|
size += proto.NestedStructureSize(addressObjectField, a.oid)
|
2020-08-17 10:41:09 +00:00
|
|
|
|
|
|
|
return size
|
|
|
|
}
|
2020-08-20 07:59:45 +00:00
|
|
|
|
|
|
|
func (c *Checksum) StableMarshal(buf []byte) ([]byte, error) {
|
|
|
|
if c == nil {
|
|
|
|
return []byte{}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
if buf == nil {
|
|
|
|
buf = make([]byte, c.StableSize())
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
offset, n int
|
|
|
|
err error
|
|
|
|
)
|
|
|
|
|
|
|
|
n, err = proto.EnumMarshal(checksumTypeField, buf[offset:], int32(c.typ))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
offset += n
|
|
|
|
|
|
|
|
_, err = proto.BytesMarshal(checksumValueField, buf[offset:], c.sum)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Checksum) StableSize() (size int) {
|
|
|
|
if c == nil {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
size += proto.EnumSize(checksumTypeField, int32(c.typ))
|
|
|
|
size += proto.BytesSize(checksumValueField, c.sum)
|
|
|
|
|
|
|
|
return size
|
|
|
|
}
|