status-im/status-go

View on GitHub
protocol/storenodes/models.go

Summary

Maintainability
A
0 mins
Test Coverage
A
97%
package storenodes

import (
    "github.com/multiformats/go-multiaddr"

    "github.com/status-im/status-go/eth-node/types"
    "github.com/status-im/status-go/protocol/protobuf"
    "github.com/status-im/status-go/services/mailservers"
)

// Storenode is a struct that represents a storenode, it is very closely related to `mailservers.Mailserver`
type Storenode struct {
    CommunityID types.HexBytes      `json:"community_id"`
    StorenodeID string              `json:"storenode_id"`
    Name        string              `json:"name"`
    Address     multiaddr.Multiaddr `json:"address"`
    Fleet       string              `json:"fleet"`
    Version     uint                `json:"version"`
    Clock       uint64              `json:"-"` // used to sync
    Removed     bool                `json:"-"`
    DeletedAt   int64               `json:"-"`
}

type Storenodes []Storenode

func (m Storenodes) ToProtobuf() []*protobuf.Storenode {
    result := make([]*protobuf.Storenode, 0, len(m))
    for _, n := range m {

        result = append(result, &protobuf.Storenode{
            CommunityId: n.CommunityID,
            StorenodeId: n.StorenodeID,
            Name:        n.Name,
            Address:     n.Address.String(),
            Fleet:       n.Fleet,
            Version:     uint32(n.Version),
            Removed:     n.Removed,
            DeletedAt:   n.DeletedAt,
        })
    }
    return result
}

func FromProtobuf(storenodes []*protobuf.Storenode, clock uint64) Storenodes {
    result := make(Storenodes, 0, len(storenodes))
    for _, s := range storenodes {
        sAddress, err := multiaddr.NewMultiaddr(s.Address)
        if err != nil {
            continue
        }
        result = append(result, Storenode{
            CommunityID: s.CommunityId,
            StorenodeID: s.StorenodeId,
            Name:        s.Name,
            Address:     sAddress,
            Fleet:       s.Fleet,
            Version:     uint(s.Version),
            Removed:     s.Removed,
            DeletedAt:   s.DeletedAt,
            Clock:       clock,
        })
    }
    return result
}

func toMailserver(m Storenode) mailservers.Mailserver {
    return mailservers.Mailserver{
        ID:     m.StorenodeID,
        Name:   m.Name,
        Custom: true,
        Addr:   &m.Address,
        Fleet:  m.Fleet,
    }
}