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 }