github.com/status-im/status-go@v1.1.0/protocol/storenodes/models.go (about)

     1  package storenodes
     2  
     3  import (
     4  	"github.com/multiformats/go-multiaddr"
     5  
     6  	"github.com/status-im/status-go/eth-node/types"
     7  	"github.com/status-im/status-go/protocol/protobuf"
     8  	"github.com/status-im/status-go/services/mailservers"
     9  )
    10  
    11  // Storenode is a struct that represents a storenode, it is very closely related to `mailservers.Mailserver`
    12  type Storenode struct {
    13  	CommunityID types.HexBytes      `json:"community_id"`
    14  	StorenodeID string              `json:"storenode_id"`
    15  	Name        string              `json:"name"`
    16  	Address     multiaddr.Multiaddr `json:"address"`
    17  	Fleet       string              `json:"fleet"`
    18  	Version     uint                `json:"version"`
    19  	Clock       uint64              `json:"-"` // used to sync
    20  	Removed     bool                `json:"-"`
    21  	DeletedAt   int64               `json:"-"`
    22  }
    23  
    24  type Storenodes []Storenode
    25  
    26  func (m Storenodes) ToProtobuf() []*protobuf.Storenode {
    27  	result := make([]*protobuf.Storenode, 0, len(m))
    28  	for _, n := range m {
    29  
    30  		result = append(result, &protobuf.Storenode{
    31  			CommunityId: n.CommunityID,
    32  			StorenodeId: n.StorenodeID,
    33  			Name:        n.Name,
    34  			Address:     n.Address.String(),
    35  			Fleet:       n.Fleet,
    36  			Version:     uint32(n.Version),
    37  			Removed:     n.Removed,
    38  			DeletedAt:   n.DeletedAt,
    39  		})
    40  	}
    41  	return result
    42  }
    43  
    44  func FromProtobuf(storenodes []*protobuf.Storenode, clock uint64) Storenodes {
    45  	result := make(Storenodes, 0, len(storenodes))
    46  	for _, s := range storenodes {
    47  		sAddress, err := multiaddr.NewMultiaddr(s.Address)
    48  		if err != nil {
    49  			continue
    50  		}
    51  		result = append(result, Storenode{
    52  			CommunityID: s.CommunityId,
    53  			StorenodeID: s.StorenodeId,
    54  			Name:        s.Name,
    55  			Address:     sAddress,
    56  			Fleet:       s.Fleet,
    57  			Version:     uint(s.Version),
    58  			Removed:     s.Removed,
    59  			DeletedAt:   s.DeletedAt,
    60  			Clock:       clock,
    61  		})
    62  	}
    63  	return result
    64  }
    65  
    66  func toMailserver(m Storenode) mailservers.Mailserver {
    67  	return mailservers.Mailserver{
    68  		ID:     m.StorenodeID,
    69  		Name:   m.Name,
    70  		Custom: true,
    71  		Addr:   &m.Address,
    72  		Fleet:  m.Fleet,
    73  	}
    74  }