77
88 dp "github.com/markus-wa/godispatch"
99 mock "github.com/stretchr/testify/mock"
10+ "golang.org/x/exp/constraints"
1011
1112 demoinfocs "github.com/markus-wa/demoinfocs-golang/v2/pkg/demoinfocs"
1213 common "github.com/markus-wa/demoinfocs-golang/v2/pkg/demoinfocs/common"
@@ -22,12 +23,12 @@ type Parser struct {
2223 // List of events to be dispatched by frame.
2324 // ParseToEnd() / ParseNextFrame() will dispatch them accordingly.
2425 // See also: MockEvents() / MockEventsFrame()
25- Events map [int ][]interface {}
26+ Events map [int ][]any
2627
2728 // List of net-messages to be dispatched by frame.
2829 // ParseToEnd() / ParseNextFrame() will dispatch them accordingly.
2930 // See also: MockNetMessages() / MockNetMessagesFrame()
30- NetMessages map [int ][]interface {}
31+ NetMessages map [int ][]any
3132
3233 eventDispatcher dp.Dispatcher
3334 msgDispatcher dp.Dispatcher
@@ -40,15 +41,15 @@ type Parser struct {
4041// in subsequent calls to this or MockNetMessages() is triggered on a separate frame.
4142//
4243// See also: MockEventsFrame()
43- func (p * Parser ) MockEvents (events ... interface {} ) {
44+ func (p * Parser ) MockEvents (events ... any ) {
4445 p .MockEventsFrame (p .mockFrame , events ... )
4546 p .mockFrame ++
4647}
4748
4849// MockEventsFrame adds entries to Events that will be dispatched at the frame indicated by the first parameter.
4950//
5051// See also: MockEvents()
51- func (p * Parser ) MockEventsFrame (frame int , events ... interface {} ) {
52+ func (p * Parser ) MockEventsFrame (frame int , events ... any ) {
5253 p .Events [frame ] = append (p .Events [frame ], events ... )
5354}
5455
@@ -57,24 +58,24 @@ func (p *Parser) MockEventsFrame(frame int, events ...interface{}) {
5758// in subsequent calls to this or MockEvents() is triggered on a separate frame.
5859//
5960// See also: MockNetMessagesFrame()
60- func (p * Parser ) MockNetMessages (messages ... interface {} ) {
61+ func (p * Parser ) MockNetMessages (messages ... any ) {
6162 p .MockNetMessagesFrame (p .mockFrame , messages ... )
6263 p .mockFrame ++
6364}
6465
6566// MockNetMessagesFrame adds entries to NetMessages that will be dispatched at the frame indicated by the first parameter.
6667//
6768// See also: MockNetMessages()
68- func (p * Parser ) MockNetMessagesFrame (frame int , messages ... interface {} ) {
69+ func (p * Parser ) MockNetMessagesFrame (frame int , messages ... any ) {
6970 p .NetMessages [frame ] = append (p .NetMessages [frame ], messages ... )
7071}
7172
7273// NewParser returns a new parser mock with pre-initialized Events and NetMessages.
7374// Pre-mocks RegisterEventHandler() and RegisterNetMessageHandler().
7475func NewParser () * Parser {
7576 p := & Parser {
76- Events : make (map [int ][]interface {} ),
77- NetMessages : make (map [int ][]interface {} ),
77+ Events : make (map [int ][]any ),
78+ NetMessages : make (map [int ][]any ),
7879 }
7980
8081 p .On ("RegisterEventHandler" ).Return ()
@@ -127,7 +128,7 @@ func (p *Parser) Progress() float32 {
127128
128129// RegisterEventHandler is a mock-implementation of Parser.RegisterEventHandler().
129130// Return HandlerIdentifier cannot be mocked (for now).
130- func (p * Parser ) RegisterEventHandler (handler interface {} ) dp.HandlerIdentifier {
131+ func (p * Parser ) RegisterEventHandler (handler any ) dp.HandlerIdentifier {
131132 p .Called ()
132133 return p .eventDispatcher .RegisterHandler (handler )
133134}
@@ -140,7 +141,7 @@ func (p *Parser) UnregisterEventHandler(identifier dp.HandlerIdentifier) {
140141
141142// RegisterNetMessageHandler is a mock-implementation of Parser.RegisterNetMessageHandler().
142143// Return HandlerIdentifier cannot be mocked (for now).
143- func (p * Parser ) RegisterNetMessageHandler (handler interface {} ) dp.HandlerIdentifier {
144+ func (p * Parser ) RegisterNetMessageHandler (handler any ) dp.HandlerIdentifier {
144145 p .Called ()
145146 return p .msgDispatcher .RegisterHandler (handler )
146147}
@@ -165,8 +166,8 @@ func (p *Parser) ParseHeader() (common.DemoHeader, error) {
165166func (p * Parser ) ParseToEnd () (err error ) {
166167 args := p .Called ()
167168
168- maxFrame := max (p .Events )
169- maxNetMessageFrame := max (p .NetMessages )
169+ maxFrame := maxKey (p .Events )
170+ maxNetMessageFrame := maxKey (p .NetMessages )
170171
171172 if maxFrame < maxNetMessageFrame {
172173 maxFrame = maxNetMessageFrame
@@ -210,7 +211,7 @@ func (p *Parser) ParseNextFrame() (b bool, err error) {
210211 return args .Bool (0 ), args .Error (1 )
211212}
212213
213- func max (numbers map [int ][] interface {} ) (maxNumber int ) {
214+ func maxKey [ T any , N constraints. Ordered ] (numbers map [N ] T ) (maxNumber N ) {
214215 for n := range numbers {
215216 if n > maxNumber {
216217 maxNumber = n
0 commit comments