forked from TrueCloudLab/frostfs-sdk-go
[#139] object: Deprecate RawObject
type and everything related
From now `Object` type should be used directly. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
529c4d1c2a
commit
70c3644e2b
8 changed files with 559 additions and 681 deletions
|
@ -393,7 +393,7 @@ func GetFullObject(ctx context.Context, c *Client, idCnr cid.ID, idObj oid.ID) (
|
||||||
return nil, fmt.Errorf("read payload: %w", err)
|
return nil, fmt.Errorf("read payload: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
object.NewRawFrom(&obj).SetPayload(payload)
|
obj.SetPayload(payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := rdr.Close()
|
res, err := rdr.Close()
|
||||||
|
@ -445,10 +445,10 @@ func (x *ResObjectHead) ReadHeader(dst *object.Object) bool {
|
||||||
objv2.SetHeader(x.hdr.GetHeader())
|
objv2.SetHeader(x.hdr.GetHeader())
|
||||||
objv2.SetSignature(x.hdr.GetSignature())
|
objv2.SetSignature(x.hdr.GetSignature())
|
||||||
|
|
||||||
raw := object.NewRawFromV2(&objv2)
|
obj := object.NewFromV2(&objv2)
|
||||||
raw.SetID(&x.idObj)
|
obj.SetID(&x.idObj)
|
||||||
|
|
||||||
*dst = *raw.Object()
|
*dst = *obj
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ func CalculatePayloadChecksum(payload []byte) *checksum.Checksum {
|
||||||
|
|
||||||
// CalculateAndSetPayloadChecksum calculates checksum of current
|
// CalculateAndSetPayloadChecksum calculates checksum of current
|
||||||
// object payload and writes it to the object.
|
// object payload and writes it to the object.
|
||||||
func CalculateAndSetPayloadChecksum(obj *RawObject) {
|
func CalculateAndSetPayloadChecksum(obj *Object) {
|
||||||
obj.SetPayloadChecksum(
|
obj.SetPayloadChecksum(
|
||||||
CalculatePayloadChecksum(obj.Payload()),
|
CalculatePayloadChecksum(obj.Payload()),
|
||||||
)
|
)
|
||||||
|
@ -60,8 +60,8 @@ func CalculateID(obj *Object) (*oid.ID, error) {
|
||||||
|
|
||||||
// CalculateAndSetID calculates identifier for the object
|
// CalculateAndSetID calculates identifier for the object
|
||||||
// and writes the result to it.
|
// and writes the result to it.
|
||||||
func CalculateAndSetID(obj *RawObject) error {
|
func CalculateAndSetID(obj *Object) error {
|
||||||
id, err := CalculateID(obj.Object())
|
id, err := CalculateID(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ func CalculateIDSignature(key *ecdsa.PrivateKey, id *oid.ID) (*signature.Signatu
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func CalculateAndSetSignature(key *ecdsa.PrivateKey, obj *RawObject) error {
|
func CalculateAndSetSignature(key *ecdsa.PrivateKey, obj *Object) error {
|
||||||
sig, err := CalculateIDSignature(key, obj.ID())
|
sig, err := CalculateIDSignature(key, obj.ID())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -115,7 +115,7 @@ func VerifyIDSignature(obj *Object) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetIDWithSignature sets object identifier and signature.
|
// SetIDWithSignature sets object identifier and signature.
|
||||||
func SetIDWithSignature(key *ecdsa.PrivateKey, obj *RawObject) error {
|
func SetIDWithSignature(key *ecdsa.PrivateKey, obj *Object) error {
|
||||||
if err := CalculateAndSetID(obj); err != nil {
|
if err := CalculateAndSetID(obj); err != nil {
|
||||||
return fmt.Errorf("could not set identifier: %w", err)
|
return fmt.Errorf("could not set identifier: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ func SetIDWithSignature(key *ecdsa.PrivateKey, obj *RawObject) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetVerificationFields calculates and sets all verification fields of the object.
|
// SetVerificationFields calculates and sets all verification fields of the object.
|
||||||
func SetVerificationFields(key *ecdsa.PrivateKey, obj *RawObject) error {
|
func SetVerificationFields(key *ecdsa.PrivateKey, obj *Object) error {
|
||||||
CalculateAndSetPayloadChecksum(obj)
|
CalculateAndSetPayloadChecksum(obj)
|
||||||
|
|
||||||
return SetIDWithSignature(key, obj)
|
return SetIDWithSignature(key, obj)
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestVerificationFields(t *testing.T) {
|
func TestVerificationFields(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
payload := make([]byte, 10)
|
payload := make([]byte, 10)
|
||||||
_, _ = rand.Read(payload)
|
_, _ = rand.Read(payload)
|
||||||
|
@ -21,7 +21,7 @@ func TestVerificationFields(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, SetVerificationFields(&p.PrivateKey, obj))
|
require.NoError(t, SetVerificationFields(&p.PrivateKey, obj))
|
||||||
|
|
||||||
require.NoError(t, CheckVerificationFields(obj.Object()))
|
require.NoError(t, CheckVerificationFields(obj))
|
||||||
|
|
||||||
items := []struct {
|
items := []struct {
|
||||||
corrupt func()
|
corrupt func()
|
||||||
|
@ -72,10 +72,10 @@ func TestVerificationFields(t *testing.T) {
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
item.corrupt()
|
item.corrupt()
|
||||||
|
|
||||||
require.Error(t, CheckVerificationFields(obj.Object()))
|
require.Error(t, CheckVerificationFields(obj))
|
||||||
|
|
||||||
item.restore()
|
item.restore()
|
||||||
|
|
||||||
require.NoError(t, CheckVerificationFields(obj.Object()))
|
require.NoError(t, CheckVerificationFields(obj))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
479
object/object.go
479
object/object.go
|
@ -2,24 +2,24 @@ package object
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/object"
|
"github.com/nspcc-dev/neofs-api-go/v2/object"
|
||||||
|
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
||||||
|
"github.com/nspcc-dev/neofs-sdk-go/checksum"
|
||||||
|
cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
|
||||||
|
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
|
||||||
|
"github.com/nspcc-dev/neofs-sdk-go/owner"
|
||||||
|
"github.com/nspcc-dev/neofs-sdk-go/session"
|
||||||
|
"github.com/nspcc-dev/neofs-sdk-go/signature"
|
||||||
|
"github.com/nspcc-dev/neofs-sdk-go/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Object represents v2-compatible NeoFS object that provides
|
// Object represents v2-compatible NeoFS object that provides
|
||||||
// a convenient interface for working in isolation
|
// a convenient interface for working in isolation
|
||||||
// from the internal structure of an object.
|
// from the internal structure of an object.
|
||||||
//
|
type Object object.Object
|
||||||
// Object allows to work with the object in read-only
|
|
||||||
// mode as a reflection of the immutability of objects
|
|
||||||
// in the system.
|
|
||||||
type Object struct {
|
|
||||||
*rwObject
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewFromV2 wraps v2 Object message to Object.
|
// NewFromV2 wraps v2 Object message to Object.
|
||||||
func NewFromV2(oV2 *object.Object) *Object {
|
func NewFromV2(oV2 *object.Object) *Object {
|
||||||
return &Object{
|
return (*Object)(oV2)
|
||||||
rwObject: (*rwObject)(oV2),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates and initializes blank Object.
|
// New creates and initializes blank Object.
|
||||||
|
@ -31,15 +31,462 @@ func New() *Object {
|
||||||
|
|
||||||
// ToV2 converts Object to v2 Object message.
|
// ToV2 converts Object to v2 Object message.
|
||||||
func (o *Object) ToV2() *object.Object {
|
func (o *Object) ToV2() *object.Object {
|
||||||
if o != nil {
|
return (*object.Object)(o)
|
||||||
return (*object.Object)(o.rwObject)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalHeaderJSON marshals object's header
|
// MarshalHeaderJSON marshals object's header
|
||||||
// into JSON format.
|
// into JSON format.
|
||||||
func (o *Object) MarshalHeaderJSON() ([]byte, error) {
|
func (o *Object) MarshalHeaderJSON() ([]byte, error) {
|
||||||
return (*object.Object)(o.rwObject).GetHeader().MarshalJSON()
|
return (*object.Object)(o).GetHeader().MarshalJSON()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) setHeaderField(setter func(*object.Header)) {
|
||||||
|
obj := (*object.Object)(o)
|
||||||
|
h := obj.GetHeader()
|
||||||
|
|
||||||
|
if h == nil {
|
||||||
|
h = new(object.Header)
|
||||||
|
obj.SetHeader(h)
|
||||||
|
}
|
||||||
|
|
||||||
|
setter(h)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) setSplitFields(setter func(*object.SplitHeader)) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
split := h.GetSplit()
|
||||||
|
if split == nil {
|
||||||
|
split = new(object.SplitHeader)
|
||||||
|
h.SetSplit(split)
|
||||||
|
}
|
||||||
|
|
||||||
|
setter(split)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ID returns object identifier.
|
||||||
|
func (o *Object) ID() *oid.ID {
|
||||||
|
return oid.NewIDFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetObjectID(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetID sets object identifier.
|
||||||
|
func (o *Object) SetID(v *oid.ID) {
|
||||||
|
(*object.Object)(o).
|
||||||
|
SetObjectID(v.ToV2())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signature returns signature of the object identifier.
|
||||||
|
func (o *Object) Signature() *signature.Signature {
|
||||||
|
return signature.NewFromV2(
|
||||||
|
(*object.Object)(o).GetSignature())
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSignature sets signature of the object identifier.
|
||||||
|
func (o *Object) SetSignature(v *signature.Signature) {
|
||||||
|
(*object.Object)(o).SetSignature(v.ToV2())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Payload returns payload bytes.
|
||||||
|
func (o *Object) Payload() []byte {
|
||||||
|
return (*object.Object)(o).GetPayload()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPayload sets payload bytes.
|
||||||
|
func (o *Object) SetPayload(v []byte) {
|
||||||
|
(*object.Object)(o).SetPayload(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Version returns version of the object.
|
||||||
|
func (o *Object) Version() *version.Version {
|
||||||
|
return version.NewFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetVersion(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetVersion sets version of the object.
|
||||||
|
func (o *Object) SetVersion(v *version.Version) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetVersion(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PayloadSize returns payload length of the object.
|
||||||
|
func (o *Object) PayloadSize() uint64 {
|
||||||
|
return (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetPayloadLength()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPayloadSize sets payload length of the object.
|
||||||
|
func (o *Object) SetPayloadSize(v uint64) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetPayloadLength(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainerID returns identifier of the related container.
|
||||||
|
func (o *Object) ContainerID() *cid.ID {
|
||||||
|
return cid.NewFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetContainerID(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerID sets identifier of the related container.
|
||||||
|
func (o *Object) SetContainerID(v *cid.ID) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetContainerID(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// OwnerID returns identifier of the object owner.
|
||||||
|
func (o *Object) OwnerID() *owner.ID {
|
||||||
|
return owner.NewIDFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetOwnerID(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOwnerID sets identifier of the object owner.
|
||||||
|
func (o *Object) SetOwnerID(v *owner.ID) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetOwnerID(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreationEpoch returns epoch number in which object was created.
|
||||||
|
func (o *Object) CreationEpoch() uint64 {
|
||||||
|
return (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetCreationEpoch()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCreationEpoch sets epoch number in which object was created.
|
||||||
|
func (o *Object) SetCreationEpoch(v uint64) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetCreationEpoch(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PayloadChecksum returns checksum of the object payload.
|
||||||
|
func (o *Object) PayloadChecksum() *checksum.Checksum {
|
||||||
|
return checksum.NewFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetPayloadHash(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPayloadChecksum sets checksum of the object payload.
|
||||||
|
func (o *Object) SetPayloadChecksum(v *checksum.Checksum) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetPayloadHash(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PayloadHomomorphicHash returns homomorphic hash of the object payload.
|
||||||
|
func (o *Object) PayloadHomomorphicHash() *checksum.Checksum {
|
||||||
|
return checksum.NewFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetHomomorphicHash(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPayloadHomomorphicHash sets homomorphic hash of the object payload.
|
||||||
|
func (o *Object) SetPayloadHomomorphicHash(v *checksum.Checksum) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetHomomorphicHash(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attributes returns object attributes.
|
||||||
|
func (o *Object) Attributes() []*Attribute {
|
||||||
|
attrs := (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetAttributes()
|
||||||
|
|
||||||
|
res := make([]*Attribute, 0, len(attrs))
|
||||||
|
|
||||||
|
for i := range attrs {
|
||||||
|
res = append(res, NewAttributeFromV2(attrs[i]))
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAttributes sets object attributes.
|
||||||
|
func (o *Object) SetAttributes(v ...*Attribute) {
|
||||||
|
attrs := make([]*object.Attribute, 0, len(v))
|
||||||
|
|
||||||
|
for i := range v {
|
||||||
|
attrs = append(attrs, v[i].ToV2())
|
||||||
|
}
|
||||||
|
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetAttributes(attrs)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PreviousID returns identifier of the previous sibling object.
|
||||||
|
func (o *Object) PreviousID() *oid.ID {
|
||||||
|
return oid.NewIDFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSplit().
|
||||||
|
GetPrevious(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPreviousID sets identifier of the previous sibling object.
|
||||||
|
func (o *Object) SetPreviousID(v *oid.ID) {
|
||||||
|
o.setSplitFields(func(split *object.SplitHeader) {
|
||||||
|
split.SetPrevious(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Children return list of the identifiers of the child objects.
|
||||||
|
func (o *Object) Children() []*oid.ID {
|
||||||
|
ids := (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSplit().
|
||||||
|
GetChildren()
|
||||||
|
|
||||||
|
res := make([]*oid.ID, 0, len(ids))
|
||||||
|
|
||||||
|
for i := range ids {
|
||||||
|
res = append(res, oid.NewIDFromV2(ids[i]))
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetChildren sets list of the identifiers of the child objects.
|
||||||
|
func (o *Object) SetChildren(v ...*oid.ID) {
|
||||||
|
ids := make([]*refs.ObjectID, 0, len(v))
|
||||||
|
|
||||||
|
for i := range v {
|
||||||
|
ids = append(ids, v[i].ToV2())
|
||||||
|
}
|
||||||
|
|
||||||
|
o.setSplitFields(func(split *object.SplitHeader) {
|
||||||
|
split.SetChildren(ids)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotificationInfo groups information about object notification
|
||||||
|
// that can be written to object.
|
||||||
|
//
|
||||||
|
// Topic is an optional field.
|
||||||
|
type NotificationInfo struct {
|
||||||
|
ni object.NotificationInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// Epoch returns object notification tick
|
||||||
|
// epoch.
|
||||||
|
func (n NotificationInfo) Epoch() uint64 {
|
||||||
|
return n.ni.Epoch()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEpoch sets object notification tick
|
||||||
|
// epoch.
|
||||||
|
func (n *NotificationInfo) SetEpoch(epoch uint64) {
|
||||||
|
n.ni.SetEpoch(epoch)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Topic return optional object notification
|
||||||
|
// topic.
|
||||||
|
func (n NotificationInfo) Topic() string {
|
||||||
|
return n.ni.Topic()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetTopic sets optional object notification
|
||||||
|
// topic.
|
||||||
|
func (n *NotificationInfo) SetTopic(topic string) {
|
||||||
|
n.ni.SetTopic(topic)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotificationInfo returns notification info
|
||||||
|
// read from the object structure.
|
||||||
|
// Returns any error that appeared during notification
|
||||||
|
// information parsing.
|
||||||
|
func (o *Object) NotificationInfo() (*NotificationInfo, error) {
|
||||||
|
ni, err := object.GetNotificationInfo((*object.Object)(o))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &NotificationInfo{
|
||||||
|
ni: *ni,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNotification writes NotificationInfo to the object structure.
|
||||||
|
func (o *Object) SetNotification(ni NotificationInfo) {
|
||||||
|
object.WriteNotificationInfo((*object.Object)(o), ni.ni)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SplitID return split identity of split object. If object is not split
|
||||||
|
// returns nil.
|
||||||
|
func (o *Object) SplitID() *SplitID {
|
||||||
|
return NewSplitIDFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSplit().
|
||||||
|
GetSplitID(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSplitID sets split identifier for the split object.
|
||||||
|
func (o *Object) SetSplitID(id *SplitID) {
|
||||||
|
o.setSplitFields(func(split *object.SplitHeader) {
|
||||||
|
split.SetSplitID(id.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParentID returns identifier of the parent object.
|
||||||
|
func (o *Object) ParentID() *oid.ID {
|
||||||
|
return oid.NewIDFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSplit().
|
||||||
|
GetParent(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetParentID sets identifier of the parent object.
|
||||||
|
func (o *Object) SetParentID(v *oid.ID) {
|
||||||
|
o.setSplitFields(func(split *object.SplitHeader) {
|
||||||
|
split.SetParent(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parent returns parent object w/o payload.
|
||||||
|
func (o *Object) Parent() *Object {
|
||||||
|
h := (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSplit()
|
||||||
|
|
||||||
|
parSig := h.GetParentSignature()
|
||||||
|
parHdr := h.GetParentHeader()
|
||||||
|
|
||||||
|
if parSig == nil && parHdr == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
oV2 := new(object.Object)
|
||||||
|
oV2.SetObjectID(h.GetParent())
|
||||||
|
oV2.SetSignature(parSig)
|
||||||
|
oV2.SetHeader(parHdr)
|
||||||
|
|
||||||
|
return NewFromV2(oV2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetParent sets parent object w/o payload.
|
||||||
|
func (o *Object) SetParent(v *Object) {
|
||||||
|
o.setSplitFields(func(split *object.SplitHeader) {
|
||||||
|
split.SetParent((*object.Object)(v).GetObjectID())
|
||||||
|
split.SetParentSignature((*object.Object)(v).GetSignature())
|
||||||
|
split.SetParentHeader((*object.Object)(v).GetHeader())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) initRelations() {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetSplit(new(object.SplitHeader))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) resetRelations() {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetSplit(nil)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SessionToken returns token of the session
|
||||||
|
// within which object was created.
|
||||||
|
func (o *Object) SessionToken() *session.Token {
|
||||||
|
return session.NewTokenFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSessionToken(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSessionToken sets token of the session
|
||||||
|
// within which object was created.
|
||||||
|
func (o *Object) SetSessionToken(v *session.Token) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetSessionToken(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type returns type of the object.
|
||||||
|
func (o *Object) Type() Type {
|
||||||
|
return TypeFromV2(
|
||||||
|
(*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetObjectType(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetType sets type of the object.
|
||||||
|
func (o *Object) SetType(v Type) {
|
||||||
|
o.setHeaderField(func(h *object.Header) {
|
||||||
|
h.SetObjectType(v.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CutPayload returns Object w/ empty payload.
|
||||||
|
//
|
||||||
|
// Changes of non-payload fields affect source object.
|
||||||
|
func (o *Object) CutPayload() *Object {
|
||||||
|
ov2 := new(object.Object)
|
||||||
|
*ov2 = *(*object.Object)(o)
|
||||||
|
ov2.SetPayload(nil)
|
||||||
|
|
||||||
|
return (*Object)(ov2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Object) HasParent() bool {
|
||||||
|
return (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSplit() != nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResetRelations removes all fields of links with other objects.
|
||||||
|
func (o *Object) ResetRelations() {
|
||||||
|
o.resetRelations()
|
||||||
|
}
|
||||||
|
|
||||||
|
// InitRelations initializes relation field.
|
||||||
|
func (o *Object) InitRelations() {
|
||||||
|
o.initRelations()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Marshal marshals object into a protobuf binary form.
|
||||||
|
func (o *Object) Marshal() ([]byte, error) {
|
||||||
|
return (*object.Object)(o).StableMarshal(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal unmarshals protobuf binary representation of object.
|
||||||
|
func (o *Object) Unmarshal(data []byte) error {
|
||||||
|
return (*object.Object)(o).Unmarshal(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON encodes object to protobuf JSON format.
|
||||||
|
func (o *Object) MarshalJSON() ([]byte, error) {
|
||||||
|
return (*object.Object)(o).MarshalJSON()
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes object from protobuf JSON format.
|
||||||
|
func (o *Object) UnmarshalJSON(data []byte) error {
|
||||||
|
return (*object.Object)(o).UnmarshalJSON(data)
|
||||||
}
|
}
|
||||||
|
|
170
object/raw.go
170
object/raw.go
|
@ -2,167 +2,39 @@ package object
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/object"
|
"github.com/nspcc-dev/neofs-api-go/v2/object"
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/checksum"
|
|
||||||
cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
|
|
||||||
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/owner"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/session"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/signature"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/version"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// RawObject represents v2-compatible NeoFS object that provides
|
// RawObject represents v2-compatible NeoFS object that provides
|
||||||
// a convenient interface to fill in the fields of
|
// a convenient interface to fill in the fields of
|
||||||
// an object in isolation from its internal structure.
|
// an object in isolation from its internal structure.
|
||||||
type RawObject struct {
|
|
||||||
*rwObject
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewRawFromV2 wraps v2 Object message to RawObject.
|
|
||||||
func NewRawFromV2(oV2 *object.Object) *RawObject {
|
|
||||||
return &RawObject{
|
|
||||||
rwObject: (*rwObject)(oV2),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewRawFrom wraps Object instance to RawObject.
|
|
||||||
func NewRawFrom(obj *Object) *RawObject {
|
|
||||||
return NewRawFromV2(obj.ToV2())
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewRaw creates and initializes blank RawObject.
|
|
||||||
//
|
//
|
||||||
// Works similar as NewRawFromV2(new(Object)).
|
// Deprecated: use Object type instead.
|
||||||
func NewRaw() *RawObject {
|
type RawObject = Object
|
||||||
return NewRawFromV2(new(object.Object))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Object returns read-only object instance.
|
// NewRawFromV2 wraps v2 Object message to Object.
|
||||||
func (o *RawObject) Object() *Object {
|
|
||||||
if o != nil {
|
|
||||||
return &Object{
|
|
||||||
rwObject: o.rwObject,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetID sets object identifier.
|
|
||||||
func (o *RawObject) SetID(v *oid.ID) {
|
|
||||||
o.setID(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetSignature sets signature of the object identifier.
|
|
||||||
func (o *RawObject) SetSignature(v *signature.Signature) {
|
|
||||||
o.setSignature(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetPayload sets payload bytes.
|
|
||||||
func (o *RawObject) SetPayload(v []byte) {
|
|
||||||
o.setPayload(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetVersion sets version of the object.
|
|
||||||
func (o *RawObject) SetVersion(v *version.Version) {
|
|
||||||
o.setVersion(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetPayloadSize sets payload length of the object.
|
|
||||||
func (o *RawObject) SetPayloadSize(v uint64) {
|
|
||||||
o.setPayloadSize(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetContainerID sets identifier of the related container.
|
|
||||||
func (o *RawObject) SetContainerID(v *cid.ID) {
|
|
||||||
o.setContainerID(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetOwnerID sets identifier of the object owner.
|
|
||||||
func (o *RawObject) SetOwnerID(v *owner.ID) {
|
|
||||||
o.setOwnerID(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetCreationEpoch sets epoch number in which object was created.
|
|
||||||
func (o *RawObject) SetCreationEpoch(v uint64) {
|
|
||||||
o.setCreationEpoch(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetPayloadChecksum sets checksum of the object payload.
|
|
||||||
func (o *RawObject) SetPayloadChecksum(v *checksum.Checksum) {
|
|
||||||
o.setPayloadChecksum(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetPayloadHomomorphicHash sets homomorphic hash of the object payload.
|
|
||||||
func (o *RawObject) SetPayloadHomomorphicHash(v *checksum.Checksum) {
|
|
||||||
o.setPayloadHomomorphicHash(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetAttributes sets object attributes.
|
|
||||||
func (o *RawObject) SetAttributes(v ...*Attribute) {
|
|
||||||
o.setAttributes(v...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetPreviousID sets identifier of the previous sibling object.
|
|
||||||
func (o *RawObject) SetPreviousID(v *oid.ID) {
|
|
||||||
o.setPreviousID(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetChildren sets list of the identifiers of the child objects.
|
|
||||||
func (o *RawObject) SetChildren(v ...*oid.ID) {
|
|
||||||
o.setChildren(v...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetSplitID sets split identifier for the split object.
|
|
||||||
func (o *RawObject) SetSplitID(id *SplitID) {
|
|
||||||
o.setSplitID(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetParentID sets identifier of the parent object.
|
|
||||||
func (o *RawObject) SetParentID(v *oid.ID) {
|
|
||||||
o.setParentID(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetParent sets parent object w/o payload.
|
|
||||||
func (o *RawObject) SetParent(v *Object) {
|
|
||||||
o.setParent(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetSessionToken sets token of the session
|
|
||||||
// within which object was created.
|
|
||||||
func (o *RawObject) SetSessionToken(v *session.Token) {
|
|
||||||
o.setSessionToken(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetType sets type of the object.
|
|
||||||
func (o *RawObject) SetType(v Type) {
|
|
||||||
o.setType(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CutPayload returns RawObject w/ empty payload.
|
|
||||||
//
|
//
|
||||||
// Changes of non-payload fields affect source object.
|
// Deprecated: (v1.0.0) use NewFromV2 function instead.
|
||||||
func (o *RawObject) CutPayload() *RawObject {
|
func NewRawFromV2(oV2 *object.Object) *Object {
|
||||||
if o != nil {
|
return NewFromV2(oV2)
|
||||||
return &RawObject{
|
|
||||||
rwObject: o.rwObject.cutPayload(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResetRelations removes all fields of links with other objects.
|
// NewRawFrom wraps Object instance to Object.
|
||||||
func (o *RawObject) ResetRelations() {
|
//
|
||||||
o.resetRelations()
|
// Deprecated: (v1.0.0) function is no-op.
|
||||||
|
func NewRawFrom(obj *Object) *Object {
|
||||||
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
// InitRelations initializes relation field.
|
// NewRaw creates and initializes blank Object.
|
||||||
func (o *RawObject) InitRelations() {
|
//
|
||||||
o.initRelations()
|
// Deprecated: (v1.0.0) use New instead.
|
||||||
|
func NewRaw() *Object {
|
||||||
|
return New()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetNotification writes NotificationInfo to the object structure.
|
// Object returns object instance.
|
||||||
func (o *RawObject) SetNotification(ni NotificationInfo) {
|
//
|
||||||
o.setNotification(ni)
|
// Deprecated: (v1.0.0) method is no-op, use arg directly.
|
||||||
|
func (o *Object) Object() *Object {
|
||||||
|
return o
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,8 +37,8 @@ func randTZChecksum(t *testing.T) (cs [64]byte) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetID(t *testing.T) {
|
func TestObject_SetID(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
id := randID(t)
|
id := randID(t)
|
||||||
|
|
||||||
|
@ -47,8 +47,8 @@ func TestRawObject_SetID(t *testing.T) {
|
||||||
require.Equal(t, id, obj.ID())
|
require.Equal(t, id, obj.ID())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetSignature(t *testing.T) {
|
func TestObject_SetSignature(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
sig := signature.New()
|
sig := signature.New()
|
||||||
sig.SetKey([]byte{1, 2, 3})
|
sig.SetKey([]byte{1, 2, 3})
|
||||||
|
@ -59,8 +59,8 @@ func TestRawObject_SetSignature(t *testing.T) {
|
||||||
require.Equal(t, sig, obj.Signature())
|
require.Equal(t, sig, obj.Signature())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetPayload(t *testing.T) {
|
func TestObject_SetPayload(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
payload := make([]byte, 10)
|
payload := make([]byte, 10)
|
||||||
_, _ = rand.Read(payload)
|
_, _ = rand.Read(payload)
|
||||||
|
@ -70,8 +70,8 @@ func TestRawObject_SetPayload(t *testing.T) {
|
||||||
require.Equal(t, payload, obj.Payload())
|
require.Equal(t, payload, obj.Payload())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetVersion(t *testing.T) {
|
func TestObject_SetVersion(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
ver := version.New()
|
ver := version.New()
|
||||||
ver.SetMajor(1)
|
ver.SetMajor(1)
|
||||||
|
@ -82,8 +82,8 @@ func TestRawObject_SetVersion(t *testing.T) {
|
||||||
require.Equal(t, ver, obj.Version())
|
require.Equal(t, ver, obj.Version())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetPayloadSize(t *testing.T) {
|
func TestObject_SetPayloadSize(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
sz := uint64(133)
|
sz := uint64(133)
|
||||||
obj.SetPayloadSize(sz)
|
obj.SetPayloadSize(sz)
|
||||||
|
@ -91,8 +91,8 @@ func TestRawObject_SetPayloadSize(t *testing.T) {
|
||||||
require.Equal(t, sz, obj.PayloadSize())
|
require.Equal(t, sz, obj.PayloadSize())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetContainerID(t *testing.T) {
|
func TestObject_SetContainerID(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
cid := cidtest.ID()
|
cid := cidtest.ID()
|
||||||
|
|
||||||
|
@ -101,8 +101,8 @@ func TestRawObject_SetContainerID(t *testing.T) {
|
||||||
require.Equal(t, cid, obj.ContainerID())
|
require.Equal(t, cid, obj.ContainerID())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetOwnerID(t *testing.T) {
|
func TestObject_SetOwnerID(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
ownerID := ownertest.ID()
|
ownerID := ownertest.ID()
|
||||||
|
|
||||||
|
@ -111,17 +111,17 @@ func TestRawObject_SetOwnerID(t *testing.T) {
|
||||||
require.Equal(t, ownerID, obj.OwnerID())
|
require.Equal(t, ownerID, obj.OwnerID())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetCreationEpoch(t *testing.T) {
|
func TestObject_SetCreationEpoch(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
creat := uint64(228)
|
creat := uint64(228)
|
||||||
obj.setCreationEpoch(creat)
|
obj.SetCreationEpoch(creat)
|
||||||
|
|
||||||
require.Equal(t, creat, obj.CreationEpoch())
|
require.Equal(t, creat, obj.CreationEpoch())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetPayloadChecksum(t *testing.T) {
|
func TestObject_SetPayloadChecksum(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
cs := checksum.New()
|
cs := checksum.New()
|
||||||
cs.SetSHA256(randSHA256Checksum(t))
|
cs.SetSHA256(randSHA256Checksum(t))
|
||||||
|
|
||||||
|
@ -130,8 +130,8 @@ func TestRawObject_SetPayloadChecksum(t *testing.T) {
|
||||||
require.Equal(t, cs, obj.PayloadChecksum())
|
require.Equal(t, cs, obj.PayloadChecksum())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetPayloadHomomorphicHash(t *testing.T) {
|
func TestObject_SetPayloadHomomorphicHash(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
cs := checksum.New()
|
cs := checksum.New()
|
||||||
cs.SetTillichZemor(randTZChecksum(t))
|
cs.SetTillichZemor(randTZChecksum(t))
|
||||||
|
@ -141,8 +141,8 @@ func TestRawObject_SetPayloadHomomorphicHash(t *testing.T) {
|
||||||
require.Equal(t, cs, obj.PayloadHomomorphicHash())
|
require.Equal(t, cs, obj.PayloadHomomorphicHash())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetAttributes(t *testing.T) {
|
func TestObject_SetAttributes(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
a1 := NewAttribute()
|
a1 := NewAttribute()
|
||||||
a1.SetKey("key1")
|
a1.SetKey("key1")
|
||||||
|
@ -157,8 +157,8 @@ func TestRawObject_SetAttributes(t *testing.T) {
|
||||||
require.Equal(t, []*Attribute{a1, a2}, obj.Attributes())
|
require.Equal(t, []*Attribute{a1, a2}, obj.Attributes())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetPreviousID(t *testing.T) {
|
func TestObject_SetPreviousID(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
prev := randID(t)
|
prev := randID(t)
|
||||||
|
|
||||||
|
@ -167,8 +167,8 @@ func TestRawObject_SetPreviousID(t *testing.T) {
|
||||||
require.Equal(t, prev, obj.PreviousID())
|
require.Equal(t, prev, obj.PreviousID())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetChildren(t *testing.T) {
|
func TestObject_SetChildren(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
id1 := randID(t)
|
id1 := randID(t)
|
||||||
id2 := randID(t)
|
id2 := randID(t)
|
||||||
|
@ -178,8 +178,8 @@ func TestRawObject_SetChildren(t *testing.T) {
|
||||||
require.Equal(t, []*oid.ID{id1, id2}, obj.Children())
|
require.Equal(t, []*oid.ID{id1, id2}, obj.Children())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetSplitID(t *testing.T) {
|
func TestObject_SetSplitID(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
require.Nil(t, obj.SplitID())
|
require.Nil(t, obj.SplitID())
|
||||||
|
|
||||||
|
@ -189,34 +189,32 @@ func TestRawObject_SetSplitID(t *testing.T) {
|
||||||
require.Equal(t, obj.SplitID(), splitID)
|
require.Equal(t, obj.SplitID(), splitID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetParent(t *testing.T) {
|
func TestObject_SetParent(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
require.Nil(t, obj.Parent())
|
require.Nil(t, obj.Parent())
|
||||||
|
|
||||||
par := NewRaw()
|
par := New()
|
||||||
par.SetID(randID(t))
|
par.SetID(randID(t))
|
||||||
par.SetContainerID(cidtest.ID())
|
par.SetContainerID(cidtest.ID())
|
||||||
par.SetSignature(signature.New())
|
par.SetSignature(signature.New())
|
||||||
|
|
||||||
parObj := par.Object()
|
obj.SetParent(par)
|
||||||
|
|
||||||
obj.SetParent(parObj)
|
require.Equal(t, par, obj.Parent())
|
||||||
|
|
||||||
require.Equal(t, parObj, obj.Parent())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_ToV2(t *testing.T) {
|
func TestObject_ToV2(t *testing.T) {
|
||||||
objV2 := new(object.Object)
|
objV2 := new(object.Object)
|
||||||
objV2.SetPayload([]byte{1, 2, 3})
|
objV2.SetPayload([]byte{1, 2, 3})
|
||||||
|
|
||||||
obj := NewRawFromV2(objV2)
|
obj := NewFromV2(objV2)
|
||||||
|
|
||||||
require.Equal(t, objV2, obj.ToV2())
|
require.Equal(t, objV2, obj.ToV2())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetSessionToken(t *testing.T) {
|
func TestObject_SetSessionToken(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
tok := sessiontest.Token()
|
tok := sessiontest.Token()
|
||||||
|
|
||||||
|
@ -225,8 +223,8 @@ func TestRawObject_SetSessionToken(t *testing.T) {
|
||||||
require.Equal(t, tok, obj.SessionToken())
|
require.Equal(t, tok, obj.SessionToken())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetType(t *testing.T) {
|
func TestObject_SetType(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
typ := TypeStorageGroup
|
typ := TypeStorageGroup
|
||||||
|
|
||||||
|
@ -235,8 +233,8 @@ func TestRawObject_SetType(t *testing.T) {
|
||||||
require.Equal(t, typ, obj.Type())
|
require.Equal(t, typ, obj.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_CutPayload(t *testing.T) {
|
func TestObject_CutPayload(t *testing.T) {
|
||||||
o1 := NewRaw()
|
o1 := New()
|
||||||
|
|
||||||
p1 := []byte{12, 3}
|
p1 := []byte{12, 3}
|
||||||
o1.SetPayload(p1)
|
o1.SetPayload(p1)
|
||||||
|
@ -262,17 +260,17 @@ func TestRawObject_CutPayload(t *testing.T) {
|
||||||
require.Equal(t, p1, o1.Payload())
|
require.Equal(t, p1, o1.Payload())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_SetParentID(t *testing.T) {
|
func TestObject_SetParentID(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
id := randID(t)
|
id := randID(t)
|
||||||
obj.setParentID(id)
|
obj.SetParentID(id)
|
||||||
|
|
||||||
require.Equal(t, id, obj.ParentID())
|
require.Equal(t, id, obj.ParentID())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRawObject_ResetRelations(t *testing.T) {
|
func TestObject_ResetRelations(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
obj.SetPreviousID(randID(t))
|
obj.SetPreviousID(randID(t))
|
||||||
|
|
||||||
|
@ -281,8 +279,8 @@ func TestRawObject_ResetRelations(t *testing.T) {
|
||||||
require.Nil(t, obj.PreviousID())
|
require.Nil(t, obj.PreviousID())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRwObject_HasParent(t *testing.T) {
|
func TestObject_HasParent(t *testing.T) {
|
||||||
obj := NewRaw()
|
obj := New()
|
||||||
|
|
||||||
obj.InitRelations()
|
obj.InitRelations()
|
||||||
|
|
||||||
|
@ -293,15 +291,15 @@ func TestRwObject_HasParent(t *testing.T) {
|
||||||
require.False(t, obj.HasParent())
|
require.False(t, obj.HasParent())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRWObjectEncoding(t *testing.T) {
|
func TestObjectEncoding(t *testing.T) {
|
||||||
o := NewRaw()
|
o := New()
|
||||||
o.SetID(randID(t))
|
o.SetID(randID(t))
|
||||||
|
|
||||||
t.Run("binary", func(t *testing.T) {
|
t.Run("binary", func(t *testing.T) {
|
||||||
data, err := o.Marshal()
|
data, err := o.Marshal()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
o2 := NewRaw()
|
o2 := New()
|
||||||
require.NoError(t, o2.Unmarshal(data))
|
require.NoError(t, o2.Unmarshal(data))
|
||||||
|
|
||||||
require.Equal(t, o, o2)
|
require.Equal(t, o, o2)
|
||||||
|
@ -311,7 +309,7 @@ func TestRWObjectEncoding(t *testing.T) {
|
||||||
data, err := o.MarshalJSON()
|
data, err := o.MarshalJSON()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
o2 := NewRaw()
|
o2 := New()
|
||||||
require.NoError(t, o2.UnmarshalJSON(data))
|
require.NoError(t, o2.UnmarshalJSON(data))
|
||||||
|
|
||||||
require.Equal(t, o, o2)
|
require.Equal(t, o, o2)
|
||||||
|
|
440
object/rw.go
440
object/rw.go
|
@ -1,440 +0,0 @@
|
||||||
package object
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/object"
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/checksum"
|
|
||||||
cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
|
|
||||||
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/owner"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/session"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/signature"
|
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/version"
|
|
||||||
)
|
|
||||||
|
|
||||||
// wrapper over v2 Object that provides
|
|
||||||
// public getter and private setters.
|
|
||||||
type rwObject object.Object
|
|
||||||
|
|
||||||
// ToV2 converts Object to v2 Object message.
|
|
||||||
func (o *rwObject) ToV2() *object.Object {
|
|
||||||
return (*object.Object)(o)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setHeaderField(setter func(*object.Header)) {
|
|
||||||
obj := (*object.Object)(o)
|
|
||||||
h := obj.GetHeader()
|
|
||||||
|
|
||||||
if h == nil {
|
|
||||||
h = new(object.Header)
|
|
||||||
obj.SetHeader(h)
|
|
||||||
}
|
|
||||||
|
|
||||||
setter(h)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setSplitFields(setter func(*object.SplitHeader)) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
split := h.GetSplit()
|
|
||||||
if split == nil {
|
|
||||||
split = new(object.SplitHeader)
|
|
||||||
h.SetSplit(split)
|
|
||||||
}
|
|
||||||
|
|
||||||
setter(split)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ID returns object identifier.
|
|
||||||
func (o *rwObject) ID() *oid.ID {
|
|
||||||
return oid.NewIDFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetObjectID(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setID(v *oid.ID) {
|
|
||||||
(*object.Object)(o).
|
|
||||||
SetObjectID(v.ToV2())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Signature returns signature of the object identifier.
|
|
||||||
func (o *rwObject) Signature() *signature.Signature {
|
|
||||||
return signature.NewFromV2(
|
|
||||||
(*object.Object)(o).GetSignature())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setSignature(v *signature.Signature) {
|
|
||||||
(*object.Object)(o).SetSignature(v.ToV2())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Payload returns payload bytes.
|
|
||||||
func (o *rwObject) Payload() []byte {
|
|
||||||
return (*object.Object)(o).GetPayload()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setPayload(v []byte) {
|
|
||||||
(*object.Object)(o).SetPayload(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Version returns version of the object.
|
|
||||||
func (o *rwObject) Version() *version.Version {
|
|
||||||
return version.NewFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetVersion(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setVersion(v *version.Version) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetVersion(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// PayloadSize returns payload length of the object.
|
|
||||||
func (o *rwObject) PayloadSize() uint64 {
|
|
||||||
return (*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetPayloadLength()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setPayloadSize(v uint64) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetPayloadLength(v)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContainerID returns identifier of the related container.
|
|
||||||
func (o *rwObject) ContainerID() *cid.ID {
|
|
||||||
return cid.NewFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetContainerID(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setContainerID(v *cid.ID) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetContainerID(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// OwnerID returns identifier of the object owner.
|
|
||||||
func (o *rwObject) OwnerID() *owner.ID {
|
|
||||||
return owner.NewIDFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetOwnerID(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setOwnerID(v *owner.ID) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetOwnerID(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreationEpoch returns epoch number in which object was created.
|
|
||||||
func (o *rwObject) CreationEpoch() uint64 {
|
|
||||||
return (*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetCreationEpoch()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setCreationEpoch(v uint64) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetCreationEpoch(v)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// PayloadChecksum returns checksum of the object payload.
|
|
||||||
func (o *rwObject) PayloadChecksum() *checksum.Checksum {
|
|
||||||
return checksum.NewFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetPayloadHash(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setPayloadChecksum(v *checksum.Checksum) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetPayloadHash(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// PayloadHomomorphicHash returns homomorphic hash of the object payload.
|
|
||||||
func (o *rwObject) PayloadHomomorphicHash() *checksum.Checksum {
|
|
||||||
return checksum.NewFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetHomomorphicHash(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setPayloadHomomorphicHash(v *checksum.Checksum) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetHomomorphicHash(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attributes returns object attributes.
|
|
||||||
func (o *rwObject) Attributes() []*Attribute {
|
|
||||||
attrs := (*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetAttributes()
|
|
||||||
|
|
||||||
res := make([]*Attribute, 0, len(attrs))
|
|
||||||
|
|
||||||
for i := range attrs {
|
|
||||||
res = append(res, NewAttributeFromV2(attrs[i]))
|
|
||||||
}
|
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setAttributes(v ...*Attribute) {
|
|
||||||
attrs := make([]*object.Attribute, 0, len(v))
|
|
||||||
|
|
||||||
for i := range v {
|
|
||||||
attrs = append(attrs, v[i].ToV2())
|
|
||||||
}
|
|
||||||
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetAttributes(attrs)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// PreviousID returns identifier of the previous sibling object.
|
|
||||||
func (o *rwObject) PreviousID() *oid.ID {
|
|
||||||
return oid.NewIDFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetSplit().
|
|
||||||
GetPrevious(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setPreviousID(v *oid.ID) {
|
|
||||||
o.setSplitFields(func(split *object.SplitHeader) {
|
|
||||||
split.SetPrevious(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Children return list of the identifiers of the child objects.
|
|
||||||
func (o *rwObject) Children() []*oid.ID {
|
|
||||||
ids := (*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetSplit().
|
|
||||||
GetChildren()
|
|
||||||
|
|
||||||
res := make([]*oid.ID, 0, len(ids))
|
|
||||||
|
|
||||||
for i := range ids {
|
|
||||||
res = append(res, oid.NewIDFromV2(ids[i]))
|
|
||||||
}
|
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setChildren(v ...*oid.ID) {
|
|
||||||
ids := make([]*refs.ObjectID, 0, len(v))
|
|
||||||
|
|
||||||
for i := range v {
|
|
||||||
ids = append(ids, v[i].ToV2())
|
|
||||||
}
|
|
||||||
|
|
||||||
o.setSplitFields(func(split *object.SplitHeader) {
|
|
||||||
split.SetChildren(ids)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// NotificationInfo groups information about object notification
|
|
||||||
// that can be written to object.
|
|
||||||
//
|
|
||||||
// Topic is an optional field.
|
|
||||||
type NotificationInfo struct {
|
|
||||||
ni object.NotificationInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
// Epoch returns object notification tick
|
|
||||||
// epoch.
|
|
||||||
func (n NotificationInfo) Epoch() uint64 {
|
|
||||||
return n.ni.Epoch()
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetEpoch sets object notification tick
|
|
||||||
// epoch.
|
|
||||||
func (n *NotificationInfo) SetEpoch(epoch uint64) {
|
|
||||||
n.ni.SetEpoch(epoch)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Topic return optional object notification
|
|
||||||
// topic.
|
|
||||||
func (n NotificationInfo) Topic() string {
|
|
||||||
return n.ni.Topic()
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetTopic sets optional object notification
|
|
||||||
// topic.
|
|
||||||
func (n *NotificationInfo) SetTopic(topic string) {
|
|
||||||
n.ni.SetTopic(topic)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NotificationInfo returns notification info
|
|
||||||
// read from the object structure.
|
|
||||||
// Returns any error that appeared during notification
|
|
||||||
// information parsing.
|
|
||||||
func (o *rwObject) NotificationInfo() (*NotificationInfo, error) {
|
|
||||||
ni, err := object.GetNotificationInfo((*object.Object)(o))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &NotificationInfo{
|
|
||||||
ni: *ni,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setNotification(ni NotificationInfo) {
|
|
||||||
object.WriteNotificationInfo((*object.Object)(o), ni.ni)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SplitID return split identity of split object. If object is not split
|
|
||||||
// returns nil.
|
|
||||||
func (o *rwObject) SplitID() *SplitID {
|
|
||||||
return NewSplitIDFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetSplit().
|
|
||||||
GetSplitID(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setSplitID(id *SplitID) {
|
|
||||||
o.setSplitFields(func(split *object.SplitHeader) {
|
|
||||||
split.SetSplitID(id.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParentID returns identifier of the parent object.
|
|
||||||
func (o *rwObject) ParentID() *oid.ID {
|
|
||||||
return oid.NewIDFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetSplit().
|
|
||||||
GetParent(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setParentID(v *oid.ID) {
|
|
||||||
o.setSplitFields(func(split *object.SplitHeader) {
|
|
||||||
split.SetParent(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parent returns parent object w/o payload.
|
|
||||||
func (o *rwObject) Parent() *Object {
|
|
||||||
h := (*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetSplit()
|
|
||||||
|
|
||||||
parSig := h.GetParentSignature()
|
|
||||||
parHdr := h.GetParentHeader()
|
|
||||||
|
|
||||||
if parSig == nil && parHdr == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
oV2 := new(object.Object)
|
|
||||||
oV2.SetObjectID(h.GetParent())
|
|
||||||
oV2.SetSignature(parSig)
|
|
||||||
oV2.SetHeader(parHdr)
|
|
||||||
|
|
||||||
return NewFromV2(oV2)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setParent(v *Object) {
|
|
||||||
o.setSplitFields(func(split *object.SplitHeader) {
|
|
||||||
split.SetParent((*object.Object)(v.rwObject).GetObjectID())
|
|
||||||
split.SetParentSignature((*object.Object)(v.rwObject).GetSignature())
|
|
||||||
split.SetParentHeader((*object.Object)(v.rwObject).GetHeader())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) initRelations() {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetSplit(new(object.SplitHeader))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) resetRelations() {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetSplit(nil)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// SessionToken returns token of the session
|
|
||||||
// within which object was created.
|
|
||||||
func (o *rwObject) SessionToken() *session.Token {
|
|
||||||
return session.NewTokenFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetSessionToken(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setSessionToken(v *session.Token) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetSessionToken(v.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Type returns type of the object.
|
|
||||||
func (o *rwObject) Type() Type {
|
|
||||||
return TypeFromV2(
|
|
||||||
(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetObjectType(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) setType(t Type) {
|
|
||||||
o.setHeaderField(func(h *object.Header) {
|
|
||||||
h.SetObjectType(t.ToV2())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) cutPayload() *rwObject {
|
|
||||||
ov2 := new(object.Object)
|
|
||||||
*ov2 = *(*object.Object)(o)
|
|
||||||
ov2.SetPayload(nil)
|
|
||||||
|
|
||||||
return (*rwObject)(ov2)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *rwObject) HasParent() bool {
|
|
||||||
return (*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetSplit() != nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Marshal marshals object into a protobuf binary form.
|
|
||||||
func (o *rwObject) Marshal() ([]byte, error) {
|
|
||||||
return (*object.Object)(o).StableMarshal(nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unmarshal unmarshals protobuf binary representation of object.
|
|
||||||
func (o *rwObject) Unmarshal(data []byte) error {
|
|
||||||
return (*object.Object)(o).Unmarshal(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarshalJSON encodes object to protobuf JSON format.
|
|
||||||
func (o *rwObject) MarshalJSON() ([]byte, error) {
|
|
||||||
return (*object.Object)(o).MarshalJSON()
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalJSON decodes object from protobuf JSON format.
|
|
||||||
func (o *rwObject) UnmarshalJSON(data []byte) error {
|
|
||||||
return (*object.Object)(o).UnmarshalJSON(data)
|
|
||||||
}
|
|
|
@ -42,8 +42,8 @@ func SplitID() *object.SplitID {
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateRaw(withParent bool) *object.RawObject {
|
func generate(withParent bool) *object.Object {
|
||||||
x := object.NewRaw()
|
x := object.New()
|
||||||
|
|
||||||
x.SetID(oidtest.ID())
|
x.SetID(oidtest.ID())
|
||||||
x.SetSessionToken(sessiontest.Token())
|
x.SetSessionToken(sessiontest.Token())
|
||||||
|
@ -64,20 +64,21 @@ func generateRaw(withParent bool) *object.RawObject {
|
||||||
x.SetSignature(sigtest.Signature())
|
x.SetSignature(sigtest.Signature())
|
||||||
|
|
||||||
if withParent {
|
if withParent {
|
||||||
x.SetParent(generateRaw(false).Object())
|
x.SetParent(generate(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
// Raw returns random object.RawObject.
|
// Raw returns random object.Object.
|
||||||
func Raw() *object.RawObject {
|
// Deprecated: (v1.0.0) use Object instead.
|
||||||
return generateRaw(true)
|
func Raw() *object.Object {
|
||||||
|
return Object()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Object returns random object.Object.
|
// Object returns random object.Object.
|
||||||
func Object() *object.Object {
|
func Object() *object.Object {
|
||||||
return Raw().Object()
|
return generate(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tombstone returns random object.Tombstone.
|
// Tombstone returns random object.Tombstone.
|
||||||
|
|
Loading…
Reference in a new issue