Author: Adam <git@apiote.xyz>
load array of maps
main_test.go | 13 +++++++++++++ struct.go | 7 ++++++-
diff --git a/main_test.go b/main_test.go index 08259027601cfa22eefb894ed13a624ba4bc4bc4..588f7d0871070a98b8630a9bc72651607717966b 100644 --- a/main_test.go +++ b/main_test.go @@ -490,5 +490,18 @@ r := strings.NewReader(`(11 22 31)`) s := []int64{} LoadStruct(r, &s) } + +func TestShowLoadMapArray(t *testing.T) { + r := strings.NewReader(`( + ( + ('a' 1) + ('b' 2) + ) + )`) + s := []map[string]int{} + LoadStruct(r, &s) + fmt.Println(s) +} + //todo escapeError, unterminatedError, invalidCharError, invalidCodepointError, constError, commaError //todo syntax errors diff --git a/struct.go b/struct.go index 09dc82631edc6cdabf6be1e6775a9f4d4c7c9152..661ba1d3117d22586eed1ed33588f01b8d6593ce 100644 --- a/struct.go +++ b/struct.go @@ -180,13 +180,18 @@ //fmt.Printf("%+v\n", s) return nil } if kind == reflect.Map { - keyKind := s.Type().Key().Kind() + keyType := s.Type().Key() + keyKind := keyType.Kind() valueType := s.Type().Elem() for _, e := range array { pair := getStructPair(e) k := getStructMapKey(pair, keyKind) v := reflect.New(valueType).Elem() setStructValue(pair[1], v) + if s.IsNil() { + var mapType = reflect.MapOf(keyType, valueType) + s.Set(reflect.MakeMapWithSize(mapType, 0)) + } s.SetMapIndex(k, v) } //fmt.Printf("%+v\n", s)