forked from crypto-com/chain-indexing
-
Notifications
You must be signed in to change notification settings - Fork 0
/
txs_results_event.go
63 lines (51 loc) · 1.56 KB
/
txs_results_event.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package utils
import (
"github.com/WilliamXieCrypto/chain-indexing/usecase/model"
)
type ParsedTxsResultsEvents struct {
typeIndex map[string][]int
rawEvents []model.BlockResultsEvent
}
func NewParsedTxsResultsEvents(txsResultsEvents []model.BlockResultsEvent) *ParsedTxsResultsEvents {
log := &ParsedTxsResultsEvents{
make(map[string][]int),
txsResultsEvents,
}
for i, event := range txsResultsEvents {
if _, exist := log.typeIndex[event.Type]; !exist {
log.typeIndex[event.Type] = make([]int, 0)
}
log.typeIndex[event.Type] = append(log.typeIndex[event.Type], i)
}
return log
}
func (log *ParsedTxsResultsEvents) HasEvent(t string) bool {
_, ok := log.typeIndex[t]
return ok
}
// Get the last event by type
func (log *ParsedTxsResultsEvents) GetEventByType(t string) *ParsedTxsResultLogEvent {
if !log.HasEvent(t) {
return nil
}
lastIndex := len(log.typeIndex[t]) - 1
return NewParsedTxsResultLogEvent(&log.rawEvents[log.typeIndex[t][lastIndex]])
}
// Get first event by type
func (log *ParsedTxsResultsEvents) GetFirstEventByType(t string) *ParsedTxsResultLogEvent {
if !log.HasEvent(t) {
return nil
}
return NewParsedTxsResultLogEvent(&log.rawEvents[log.typeIndex[t][0]])
}
// Get all events by type
func (log *ParsedTxsResultsEvents) GetEventsByType(t string) []*ParsedTxsResultLogEvent {
if !log.HasEvent(t) {
return nil
}
logEvents := make([]*ParsedTxsResultLogEvent, 0, len(log.typeIndex[t]))
for _, index := range log.typeIndex[t] {
logEvents = append(logEvents, NewParsedTxsResultLogEvent(&log.rawEvents[index]))
}
return logEvents
}