Skip to content

Commit 6435f93

Browse files
committed
replace interface{} with any to be more go1.18-ish
1 parent 944829e commit 6435f93

File tree

18 files changed

+64
-56
lines changed

18 files changed

+64
-56
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ require (
2020
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
2121
github.com/pmezard/go-difflib v1.0.0 // indirect
2222
github.com/stretchr/objx v0.1.0 // indirect
23+
golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d // indirect
2324
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81 // indirect
2425
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
2526
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
3737
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3838
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
3939
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
40+
golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d h1:vtUKgx8dahOomfFzLREU8nSv25YHnTgLBn4rDnWZdU0=
41+
golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
4042
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81 h1:00VmoueYNlNz/aHIilyyQz/MHSqGoWJzpFv/HW8xpzI=
4143
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
4244
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

internal/bitread/bitread.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (r *BitReader) ReadUBitInt() uint {
9090
}
9191

9292
var bitReaderPool = sync.Pool{
93-
New: func() interface{} {
93+
New: func() any {
9494
return new(BitReader)
9595
},
9696
}
@@ -123,7 +123,7 @@ func newBitReader(underlying io.Reader, buffer *[]byte) *BitReader {
123123
}
124124

125125
var smallBufferPool = sync.Pool{
126-
New: func() interface{} {
126+
New: func() any {
127127
b := make([]byte, smallBuffer)
128128
return &b
129129
},

pkg/demoinfocs/debug_on.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func debugGameEvent(d *msg.CSVCMsg_GameEventListDescriptorT, ge *msg.CSVCMsg_Gam
4040

4141
if debugGameEvents == yes {
4242
// Map only the relevant data for each type
43-
data := make(map[string]interface{})
43+
data := make(map[string]any)
4444

4545
for k, v := range mapGameEventData(d, ge) {
4646
switch v.Type {

pkg/demoinfocs/demoinfocs_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func TestDemoInfoCs(t *testing.T) {
6262
})
6363

6464
var actual bytes.Buffer
65-
p.RegisterEventHandler(func(e interface{}) {
65+
p.RegisterEventHandler(func(e any) {
6666
actual.WriteString(fmt.Sprintf("%#v\n", e))
6767
})
6868

pkg/demoinfocs/fake/parser.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
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().
7475
func 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) {
165166
func (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

pkg/demoinfocs/fake/parser_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ func TestParseNextFrameEvents(t *testing.T) {
3434
p := fake.NewParser()
3535
p.On("ParseNextFrame").Return(true, nil)
3636

37-
expected := []interface{}{kill(common.EqAK47), kill(common.EqScout)}
37+
expected := []any{kill(common.EqAK47), kill(common.EqScout)}
3838
p.MockEvents(expected...)
3939

4040
// Kill on second frame that shouldn't be dispatched during the first frame
4141
p.MockEvents(kill(common.EqAUG))
4242

43-
var actual []interface{}
43+
var actual []any
4444
p.RegisterEventHandler(func(e events.Kill) {
4545
actual = append(actual, e)
4646
})
@@ -64,11 +64,11 @@ func kill(wepType common.EquipmentType) events.Kill {
6464
func TestParseToEndEvents(t *testing.T) {
6565
p := fake.NewParser()
6666
p.On("ParseToEnd").Return(nil)
67-
expected := []interface{}{kill(common.EqAK47), kill(common.EqScout), kill(common.EqAUG)}
67+
expected := []any{kill(common.EqAK47), kill(common.EqScout), kill(common.EqAUG)}
6868
p.MockEvents(expected[:1]...)
6969
p.MockEvents(expected[1:]...)
7070

71-
var actual []interface{}
71+
var actual []any
7272
p.RegisterEventHandler(func(e events.Kill) {
7373
actual = append(actual, e)
7474
})
@@ -82,7 +82,7 @@ func TestParseToEndEvents(t *testing.T) {
8282
func TestParseNextFrameNetMessages(t *testing.T) {
8383
p := fake.NewParser()
8484
p.On("ParseNextFrame").Return(true, nil)
85-
expected := []interface{}{
85+
expected := []any{
8686
cmdKey(1, 2, 3),
8787
cmdKey(100, 255, 8),
8888
}
@@ -91,8 +91,8 @@ func TestParseNextFrameNetMessages(t *testing.T) {
9191
// Message on second frame that shouldn't be dispatched during the first frame
9292
p.MockNetMessages(msg.CSVCMsg_Menu{DialogType: proto.Int32(1), MenuKeyValues: []byte{1, 55, 99}})
9393

94-
var actual []interface{}
95-
p.RegisterNetMessageHandler(func(message interface{}) {
94+
var actual []any
95+
p.RegisterNetMessageHandler(func(message any) {
9696
actual = append(actual, message)
9797
})
9898

@@ -106,7 +106,7 @@ func TestParseNextFrameNetMessages(t *testing.T) {
106106
func TestParseToEndNetMessages(t *testing.T) {
107107
p := fake.NewParser()
108108
p.On("ParseToEnd").Return(nil)
109-
expected := []interface{}{
109+
expected := []any{
110110
cmdKey(1, 2, 3),
111111
cmdKey(100, 255, 8),
112112
msg.CSVCMsg_Menu{DialogType: proto.Int32(1), MenuKeyValues: []byte{1, 55, 99}},
@@ -115,8 +115,8 @@ func TestParseToEndNetMessages(t *testing.T) {
115115
p.MockNetMessages(expected[:1]...)
116116
p.MockNetMessages(expected[1:]...)
117117

118-
var actual []interface{}
119-
p.RegisterNetMessageHandler(func(message interface{}) {
118+
var actual []any
119+
p.RegisterNetMessageHandler(func(message any) {
120120
actual = append(actual, message)
121121
})
122122

pkg/demoinfocs/game_events.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ type gameEventHandler struct {
6060
ignoreBombsiteIndexNotFound bool // see https://github.com/markus-wa/demoinfocs-golang/issues/314
6161
}
6262

63-
func (geh gameEventHandler) dispatch(event interface{}) {
63+
func (geh gameEventHandler) dispatch(event any) {
6464
geh.parser.eventDispatcher.Dispatch(event)
6565
}
6666

pkg/demoinfocs/parser.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ type parser struct {
5151
bitReader *bit.BitReader
5252
stParser *st.SendTableParser
5353
additionalNetMessageCreators map[int]NetMessageCreator // Map of net-message-IDs to NetMessageCreators (for parsing custom net-messages)
54-
msgQueue chan interface{} // Queue of net-messages
54+
msgQueue chan any // Queue of net-messages
5555
msgDispatcher *dp.Dispatcher // Net-message dispatcher
5656
gameEventHandler gameEventHandler
5757
userMessageHandler userMessageHandler
@@ -194,19 +194,19 @@ func (p *parser) Progress() float32 {
194194
RegisterEventHandler registers a handler for game events.
195195
196196
The handler must be of type func(<EventType>) where EventType is the kind of event to be handled.
197-
To catch all events func(interface{}) can be used.
197+
To catch all events func(any) can be used.
198198
199199
Example:
200200
201201
parser.RegisterEventHandler(func(e events.WeaponFired) {
202202
fmt.Printf("%s fired his %s\n", e.Shooter.Name, e.Weapon.Type)
203203
})
204204
205-
Parameter handler has to be of type interface{} because lolnogenerics.
205+
Parameter handler has to be of type any because Go generics only work on functions, not methods.
206206
207-
Returns a identifier with which the handler can be removed via UnregisterEventHandler().
207+
Returns an identifier with which the handler can be removed via UnregisterEventHandler().
208208
*/
209-
func (p *parser) RegisterEventHandler(handler interface{}) dp.HandlerIdentifier {
209+
func (p *parser) RegisterEventHandler(handler any) dp.HandlerIdentifier {
210210
return p.eventDispatcher.RegisterHandler(handler)
211211
}
212212

@@ -222,11 +222,13 @@ RegisterNetMessageHandler registers a handler for net-messages.
222222
223223
The handler must be of type func(*<MessageType>) where MessageType is the kind of net-message to be handled.
224224
225-
Returns a identifier with which the handler can be removed via UnregisterNetMessageHandler().
225+
Parameter handler has to be of type any because Go generics only work on functions, not methods.
226+
227+
Returns an identifier with which the handler can be removed via UnregisterNetMessageHandler().
226228
227229
See also: RegisterEventHandler()
228230
*/
229-
func (p *parser) RegisterNetMessageHandler(handler interface{}) dp.HandlerIdentifier {
231+
func (p *parser) RegisterNetMessageHandler(handler any) dp.HandlerIdentifier {
230232
return p.msgDispatcher.RegisterHandler(handler)
231233
}
232234

@@ -350,7 +352,7 @@ func NewParserWithConfig(demostream io.Reader, config ParserConfig) Parser {
350352
p.decryptionKey = config.NetMessageDecryptionKey
351353

352354
dispatcherCfg := dp.Config{
353-
PanicHandler: func(v interface{}) {
355+
PanicHandler: func(v any) {
354356
p.setError(fmt.Errorf("%v\nstacktrace:\n%s", v, debug.Stack()))
355357
},
356358
}
@@ -380,7 +382,7 @@ func NewParserWithConfig(demostream io.Reader, config ParserConfig) Parser {
380382
}
381383

382384
func (p *parser) initMsgQueue(buf int) {
383-
p.msgQueue = make(chan interface{}, buf)
385+
p.msgQueue = make(chan any, buf)
384386
p.msgDispatcher.AddQueues(p.msgQueue)
385387
}
386388

pkg/demoinfocs/parser_interface.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ package demoinfocs
55
import (
66
"time"
77

8+
dp "github.com/markus-wa/godispatch"
9+
810
common "github.com/markus-wa/demoinfocs-golang/v2/pkg/demoinfocs/common"
911
st "github.com/markus-wa/demoinfocs-golang/v2/pkg/demoinfocs/sendtables"
10-
dp "github.com/markus-wa/godispatch"
1112
)
1213

1314
// Parser is an auto-generated interface for Parser, intended to be used when mockability is needed.
@@ -68,19 +69,19 @@ type Parser interface {
6869
RegisterEventHandler registers a handler for game events.
6970
7071
The handler must be of type func(<EventType>) where EventType is the kind of event to be handled.
71-
To catch all events func(interface{}) can be used.
72+
To catch all events func(any) can be used.
7273
7374
Example:
7475
7576
parser.RegisterEventHandler(func(e events.WeaponFired) {
7677
fmt.Printf("%s fired his %s\n", e.Shooter.Name, e.Weapon.Type)
7778
})
7879
79-
Parameter handler has to be of type interface{} because lolnogenerics.
80+
Parameter handler has to be of type any because Go generics only work on functions, not methods.
8081
8182
Returns a identifier with which the handler can be removed via UnregisterEventHandler().
8283
*/
83-
RegisterEventHandler(handler interface{}) dp.HandlerIdentifier
84+
RegisterEventHandler(handler any) dp.HandlerIdentifier
8485
// UnregisterEventHandler removes a game event handler via identifier.
8586
//
8687
// The identifier is returned at registration by RegisterEventHandler().
@@ -94,7 +95,7 @@ type Parser interface {
9495
9596
See also: RegisterEventHandler()
9697
*/
97-
RegisterNetMessageHandler(handler interface{}) dp.HandlerIdentifier
98+
RegisterNetMessageHandler(handler any) dp.HandlerIdentifier
9899
// UnregisterNetMessageHandler removes a net-message handler via identifier.
99100
//
100101
// The identifier is returned at registration by RegisterNetMessageHandler().

0 commit comments

Comments
 (0)