package object import ( "github.com/google/uuid" ) // SplitID is a UUIDv4 used as attribute in split objects. type SplitID struct { uuid uuid.UUID } // NewSplitID returns UUID representation of splitID attribute. func NewSplitID() *SplitID { return &SplitID{ uuid: uuid.New(), } } // NewSplitIDFromV2 returns parsed UUID from bytes. // If v is invalid UUIDv4 byte sequence, then function returns nil. // // Nil converts to nil. func NewSplitIDFromV2(v []byte) *SplitID { if v == nil { return nil } id := uuid.New() err := id.UnmarshalBinary(v) if err != nil { return nil } return &SplitID{ uuid: id, } } // Parse converts UUIDv4 string representation into SplitID. func (id *SplitID) Parse(s string) (err error) { id.uuid, err = uuid.Parse(s) if err != nil { return err } return nil } // String returns UUIDv4 string representation of SplitID. func (id *SplitID) String() string { if id == nil { return "" } return id.uuid.String() } // SetUUID sets pre created UUID structure as SplitID. func (id *SplitID) SetUUID(v uuid.UUID) { if id != nil { id.uuid = v } } // ToV2 converts SplitID to a representation of SplitID in neofs-api v2. // // Nil SplitID converts to nil. func (id *SplitID) ToV2() []byte { if id == nil { return nil } data, _ := id.uuid.MarshalBinary() // err is always nil return data }