Decode: convert table key to correct type (#741)

Fixes #740.
This commit is contained in:
Gregory Oschwald
2022-03-02 06:24:01 -08:00
committed by GitHub
parent 3f5d8a6b06
commit 3229a0abfb
2 changed files with 26 additions and 3 deletions
+3 -3
View File
@@ -412,9 +412,10 @@ func (d *decoder) handleKeyPart(key ast.Iterator, v reflect.Value, nextFn handle
elem = v.Elem()
return d.handleKeyPart(key, elem, nextFn, makeFn)
case reflect.Map:
vt := v.Type()
// Create the key for the map element. For now assume it's a string.
mk := reflect.ValueOf(string(key.Node().Data))
// Create the key for the map element. Convert to key type.
mk := reflect.ValueOf(string(key.Node().Data)).Convert(vt.Key())
// If the map does not exist, create it.
if v.IsNil() {
@@ -431,7 +432,6 @@ func (d *decoder) handleKeyPart(key ast.Iterator, v reflect.Value, nextFn handle
// map[string]interface{} or a []interface{} depending on whether
// this is the last part of the array table key.
vt := v.Type()
t := vt.Elem()
if t.Kind() == reflect.Interface {
mv = makeFn()