git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/object/splitid.go (about) 1 package object 2 3 import ( 4 "github.com/google/uuid" 5 ) 6 7 // SplitID is a UUIDv4 used as attribute in split objects. 8 type SplitID struct { 9 uuid uuid.UUID 10 } 11 12 // NewSplitID returns UUID representation of splitID attribute. 13 // 14 // Defaults: 15 // - id: random UUID. 16 func NewSplitID() *SplitID { 17 return &SplitID{ 18 uuid: uuid.New(), 19 } 20 } 21 22 // NewSplitIDFromV2 returns parsed UUID from bytes. 23 // If v is invalid UUIDv4 byte sequence, then function returns nil. 24 // 25 // Nil converts to nil. 26 func NewSplitIDFromV2(v []byte) *SplitID { 27 if v == nil { 28 return nil 29 } 30 31 id := uuid.New() 32 33 err := id.UnmarshalBinary(v) 34 if err != nil { 35 return nil 36 } 37 38 return &SplitID{ 39 uuid: id, 40 } 41 } 42 43 // Parse converts UUIDv4 string representation into SplitID. 44 func (id *SplitID) Parse(s string) (err error) { 45 id.uuid, err = uuid.Parse(s) 46 if err != nil { 47 return err 48 } 49 50 return nil 51 } 52 53 // String returns UUIDv4 string representation of SplitID. 54 func (id *SplitID) String() string { 55 if id == nil { 56 return "" 57 } 58 59 return id.uuid.String() 60 } 61 62 // SetUUID sets pre created UUID structure as SplitID. 63 func (id *SplitID) SetUUID(v uuid.UUID) { 64 if id != nil { 65 id.uuid = v 66 } 67 } 68 69 // ToV2 converts SplitID to a representation of SplitID in frostfs-api v2. 70 // 71 // Nil SplitID converts to nil. 72 func (id *SplitID) ToV2() []byte { 73 if id == nil { 74 return nil 75 } 76 77 data, _ := id.uuid.MarshalBinary() // err is always nil 78 79 return data 80 }