[#340] object: Introduce SplitHeader
type
* Also introduce `SplitHeader` getter and `SetSplitHeader` setter for `Object` type. Signed-off-by: Airat Arifullin <a.arifullin@yadro.com>
This commit is contained in:
parent
603bca7ee3
commit
5205c1ac6d
2 changed files with 150 additions and 0 deletions
|
@ -345,6 +345,32 @@ func (o *Object) SetAttributes(v ...Attribute) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SplitHeader returns split header of the object. If it's set, then split header
|
||||||
|
// defines how the object relates to other objects in a split operation.
|
||||||
|
func (o *Object) SplitHeader() (splitHeader *SplitHeader) {
|
||||||
|
if v2 := (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetSplit(); v2 != nil {
|
||||||
|
splitHeader = NewSplitHeaderFromV2(v2)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSplitHeader sets split header.
|
||||||
|
func (o *Object) SetSplitHeader(v *SplitHeader) {
|
||||||
|
o.setSplitFields(func(sh *object.SplitHeader) {
|
||||||
|
v2 := v.ToV2()
|
||||||
|
|
||||||
|
sh.SetParent(v2.GetParent())
|
||||||
|
sh.SetPrevious(v2.GetPrevious())
|
||||||
|
sh.SetParentHeader(v2.GetParentHeader())
|
||||||
|
sh.SetParentSignature(v2.GetParentSignature())
|
||||||
|
sh.SetChildren(v2.GetChildren())
|
||||||
|
sh.SetSplitID(v2.GetSplitID())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// PreviousID returns identifier of the previous sibling object.
|
// PreviousID returns identifier of the previous sibling object.
|
||||||
func (o *Object) PreviousID() (v oid.ID, isSet bool) {
|
func (o *Object) PreviousID() (v oid.ID, isSet bool) {
|
||||||
v2 := (*object.Object)(o)
|
v2 := (*object.Object)(o)
|
||||||
|
|
124
object/split_header.go
Normal file
124
object/split_header.go
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
package object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
|
||||||
|
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
|
||||||
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SplitHeader is an object's header component that defines the relationship
|
||||||
|
// between this object and other objects if the object is part of a split operation.
|
||||||
|
type SplitHeader object.SplitHeader
|
||||||
|
|
||||||
|
// NewSplitHeaderFromV2 wraps v2 SplitHeader message to SplitHeader.
|
||||||
|
func NewSplitHeaderFromV2(v2 *object.SplitHeader) *SplitHeader {
|
||||||
|
return (*SplitHeader)(v2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewSplitHeader creates blank SplitHeader instance.
|
||||||
|
func NewSplitHeader() *SplitHeader {
|
||||||
|
return NewSplitHeaderFromV2(new(object.SplitHeader))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) ToV2() *object.SplitHeader {
|
||||||
|
return (*object.SplitHeader)(sh)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) ParentID() (v oid.ID, isSet bool) {
|
||||||
|
v2 := (*object.SplitHeader)(sh)
|
||||||
|
if id := v2.GetParent(); id != nil {
|
||||||
|
_ = v.ReadFromV2(*id)
|
||||||
|
isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) SetParentID(v oid.ID) {
|
||||||
|
v2 := new(refs.ObjectID)
|
||||||
|
v.WriteToV2(v2)
|
||||||
|
(*object.SplitHeader)(sh).SetParent(v2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) PreviousID() (v oid.ID, isSet bool) {
|
||||||
|
v2 := (*object.SplitHeader)(sh)
|
||||||
|
if id := v2.GetPrevious(); id != nil {
|
||||||
|
_ = v.ReadFromV2(*id)
|
||||||
|
isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) SetPreviousID(v oid.ID) {
|
||||||
|
v2 := new(refs.ObjectID)
|
||||||
|
v.WriteToV2(v2)
|
||||||
|
(*object.SplitHeader)(sh).SetPrevious(v2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) ParentSignature() *frostfscrypto.Signature {
|
||||||
|
v2 := (*object.SplitHeader)(sh)
|
||||||
|
if parSigV2 := v2.GetParentSignature(); parSigV2 != nil {
|
||||||
|
parSig := new(frostfscrypto.Signature)
|
||||||
|
_ = parSig.ReadFromV2(*parSigV2)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) SetParentSignature(v *frostfscrypto.Signature) {
|
||||||
|
var parSigV2 *refs.Signature
|
||||||
|
|
||||||
|
if v != nil {
|
||||||
|
parSigV2 = new(refs.Signature)
|
||||||
|
v.WriteToV2(parSigV2)
|
||||||
|
}
|
||||||
|
|
||||||
|
(*object.SplitHeader)(sh).SetParentSignature(parSigV2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) ParentHeader() (parentHeader *Object) {
|
||||||
|
v2 := (*object.SplitHeader)(sh)
|
||||||
|
|
||||||
|
if parHdr := v2.GetParentHeader(); parHdr != nil {
|
||||||
|
parentHeader = New()
|
||||||
|
parentHeader.setHeaderField(func(h *object.Header) {
|
||||||
|
*h = *v2.GetParentHeader()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) SetParentHeader(parentHeader *Object) {
|
||||||
|
(*object.SplitHeader)(sh).SetParentHeader(parentHeader.ToV2().GetHeader())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) Children() (res []oid.ID) {
|
||||||
|
v2 := (*object.SplitHeader)(sh)
|
||||||
|
if children := v2.GetChildren(); len(children) > 0 {
|
||||||
|
res = make([]oid.ID, len(children))
|
||||||
|
for i := range children {
|
||||||
|
_ = res[i].ReadFromV2(children[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) SetChildren(children []oid.ID) {
|
||||||
|
v2Children := make([]refs.ObjectID, len(children))
|
||||||
|
for i := range children {
|
||||||
|
children[i].WriteToV2(&v2Children[i])
|
||||||
|
}
|
||||||
|
(*object.SplitHeader)(sh).SetChildren(v2Children)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) SplitID() *SplitID {
|
||||||
|
return NewSplitIDFromV2((*object.SplitHeader)(sh).GetSplitID())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sh *SplitHeader) SetSplitID(v *SplitID) {
|
||||||
|
(*object.SplitHeader)(sh).SetSplitID(v.ToV2())
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue