frostfs-api-go/refs/types.go
Evgenii Stratonikov 732dd51b1b [#388] *: Remove nil check from setters
I knew one day `sed` would save me an hour of manual work:
```
sed -i -n -e '
s/) Set/) Set/
p
t setter
b end
:setter
    n
    s/nil/nil/
    t hasif
    p
    b end
    :hasif
        n
        :loop
        p
        n
        s/}/}/
        t end
        b loop
        :end
' $@
goimports -w $@
```

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2022-03-31 11:32:04 +03:00

252 lines
3.6 KiB
Go

package refs
import (
"fmt"
"strconv"
)
type OwnerID struct {
val []byte
}
type ContainerID struct {
val []byte
}
type ObjectID struct {
val []byte
}
type Address struct {
cid *ContainerID
oid *ObjectID
}
type Checksum struct {
typ ChecksumType
sum []byte
}
type ChecksumType uint32
type SignatureScheme uint32
//nolint:revive
const (
ECDSA_SHA512 SignatureScheme = iota
ECDSA_RFC6979_SHA256
)
type Signature struct {
key, sign []byte
scheme SignatureScheme
}
type SubnetID struct {
value uint32
}
type Version struct {
major, minor uint32
}
const (
UnknownChecksum ChecksumType = iota
TillichZemor
SHA256
)
func (o *OwnerID) GetValue() []byte {
if o != nil {
return o.val
}
return nil
}
func (o *OwnerID) SetValue(v []byte) {
o.val = v
}
func (c *ContainerID) GetValue() []byte {
if c != nil {
return c.val
}
return nil
}
func (c *ContainerID) SetValue(v []byte) {
c.val = v
}
func (o *ObjectID) GetValue() []byte {
if o != nil {
return o.val
}
return nil
}
func (o *ObjectID) SetValue(v []byte) {
o.val = v
}
func (a *Address) GetContainerID() *ContainerID {
if a != nil {
return a.cid
}
return nil
}
func (a *Address) SetContainerID(v *ContainerID) {
a.cid = v
}
func (a *Address) GetObjectID() *ObjectID {
if a != nil {
return a.oid
}
return nil
}
func (a *Address) SetObjectID(v *ObjectID) {
a.oid = v
}
func (c *Checksum) GetType() ChecksumType {
if c != nil {
return c.typ
}
return UnknownChecksum
}
func (c *Checksum) SetType(v ChecksumType) {
c.typ = v
}
func (c *Checksum) GetSum() []byte {
if c != nil {
return c.sum
}
return nil
}
func (c *Checksum) SetSum(v []byte) {
c.sum = v
}
func (s *Signature) GetKey() []byte {
if s != nil {
return s.key
}
return nil
}
func (s *Signature) SetKey(v []byte) {
s.key = v
}
func (s *Signature) GetSign() []byte {
if s != nil {
return s.sign
}
return nil
}
func (s *Signature) SetSign(v []byte) {
s.sign = v
}
func (s *Signature) GetScheme() SignatureScheme {
if s != nil {
return s.scheme
}
return 0
}
func (s *Signature) SetScheme(scheme SignatureScheme) {
s.scheme = scheme
}
func (s *SubnetID) SetValue(id uint32) {
s.value = id
}
func (s *SubnetID) GetValue() uint32 {
if s != nil {
return s.value
}
return 0
}
// MarshalText encodes SubnetID into text format according to NeoFS API V2 protocol:
// value in base-10 integer string format.
//
// Implements encoding.TextMarshaler.
func (s *SubnetID) MarshalText() ([]byte, error) {
num := s.GetValue() // NPE safe, returns zero on nil (zero subnet)
return []byte(strconv.FormatUint(uint64(num), 10)), nil
}
// UnmarshalText decodes SubnetID from the text according to NeoFS API V2 protocol:
// should be base-10 integer string format with bitsize = 32.
//
// Returns strconv.ErrRange if integer overflows uint32.
//
// Must not be called on nil.
//
// Implements encoding.TextUnmarshaler.
func (s *SubnetID) UnmarshalText(txt []byte) error {
num, err := strconv.ParseUint(string(txt), 10, 32)
if err != nil {
return fmt.Errorf("invalid numeric value: %w", err)
}
s.value = uint32(num)
return nil
}
// IsZeroSubnet returns true iff the SubnetID refers to zero subnet.
func IsZeroSubnet(id *SubnetID) bool {
return id.GetValue() == 0
}
// MakeZeroSubnet makes the SubnetID to refer to zero subnet.
func MakeZeroSubnet(id *SubnetID) {
id.SetValue(0)
}
func (v *Version) GetMajor() uint32 {
if v != nil {
return v.major
}
return 0
}
func (v *Version) SetMajor(val uint32) {
v.major = val
}
func (v *Version) GetMinor() uint32 {
if v != nil {
return v.minor
}
return 0
}
func (v *Version) SetMinor(val uint32) {
v.minor = val
}