frostfs-api-go/pkg/object/raw.go
Leonard Lyubich 1ac6f2eeeb [#145] sdk/object: Refactor logic of field setters
In previous implementation RawObject constructor initialized internal v2
Object structure recursively so that further you can directly set the values
of nested fields. This caused the object created by constructor New to be
different from the object created from the empty object v2.

Remove recursive initialization of v2 Object from New and NewRaw
constructors. Make setters to initialize nested structures on demand.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-09-18 10:45:11 +03:00

110 lines
2.6 KiB
Go

package object
import (
"github.com/nspcc-dev/neofs-api-go/pkg"
"github.com/nspcc-dev/neofs-api-go/pkg/container"
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
"github.com/nspcc-dev/neofs-api-go/v2/object"
)
// RawObject represents v2-compatible NeoFS object that provides
// a convenient interface to fill in the fields of
// 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),
}
}
// NewRaw creates and initializes blank RawObject.
//
// Works similar as NewRawFromV2(new(Object)).
func NewRaw() *RawObject {
return NewRawFromV2(new(object.Object))
}
// Object returns read-only object instance.
func (o *RawObject) Object() *Object {
if o != nil {
return &Object{
rwObject: o.rwObject,
}
}
return nil
}
// SetID sets object identifier.
func (o *RawObject) SetID(v *ID) {
o.setID(v)
}
// SetSignature sets signature of the object identifier.
func (o *RawObject) SetSignature(v *pkg.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 *pkg.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 *container.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 *pkg.Checksum) {
o.setPayloadChecksum(v)
}
// SetPayloadHomomorphicHash sets homomorphic hash of the object payload.
func (o *RawObject) SetPayloadHomomorphicHash(v *pkg.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 *ID) {
o.setPreviousID(v)
}
// SetChildren sets list of the identifiers of the child objects.
func (o *RawObject) SetChildren(v ...*ID) {
o.setChildren(v...)
}
// SetParent sets parent object w/o payload.
func (o *RawObject) SetParent(v *Object) {
o.setParent(v)
}