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