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  }