go-dirty.git

commit e486e7b5cf439f0fdf1d6872cda1c8da7fdf4b2f

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)