github.com/status-im/status-go@v1.1.0/protocol/messages_iterator.go (about) 1 package protocol 2 3 import ( 4 "golang.org/x/exp/maps" 5 6 "github.com/status-im/status-go/eth-node/types" 7 "github.com/status-im/status-go/protocol/transport" 8 ) 9 10 type MessagesIterator interface { 11 HasNext() bool 12 Next() (transport.Filter, []*types.Message) 13 } 14 15 type DefaultMessagesIterator struct { 16 chatWithMessages map[transport.Filter][]*types.Message 17 keys []transport.Filter 18 currentIndex int 19 } 20 21 func NewDefaultMessagesIterator(chatWithMessages map[transport.Filter][]*types.Message) MessagesIterator { 22 return &DefaultMessagesIterator{ 23 chatWithMessages: chatWithMessages, 24 keys: maps.Keys(chatWithMessages), 25 currentIndex: 0, 26 } 27 } 28 29 func (it *DefaultMessagesIterator) HasNext() bool { 30 return it.currentIndex < len(it.keys) 31 } 32 33 func (it *DefaultMessagesIterator) Next() (transport.Filter, []*types.Message) { 34 if it.HasNext() { 35 key := it.keys[it.currentIndex] 36 it.currentIndex++ 37 return key, it.chatWithMessages[key] 38 } 39 return transport.Filter{}, nil 40 }