summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--context.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/context.go b/context.go
index 5c8df51..c574be7 100644
--- a/context.go
+++ b/context.go
@@ -92,6 +92,7 @@ func (ctx *Context) OnCancel(f func()) {
//
// json.RawMessage => interface{}
// []json.RawMessage => []interface{}
+// [][]json.RawMessage => [][]interface{}
// map[string]json.RawMessage => map[string]interface{}
// []map[string]json.RawMessage => []map[string]interface{}
//
@@ -179,6 +180,27 @@ func (ctx Context) LoadModule(structPointer interface{}, fieldName string) (inte
}
result = all
+ } else if typ.Elem().Kind() == reflect.Slice && isJSONRawMessage(typ.Elem().Elem()) {
+ // val is `[][]json.RawMessage`
+
+ if inlineModuleKey == "" {
+ panic("unable to determine module name without inline_key because type is not a ModuleMap")
+ }
+ var all [][]interface{}
+ for i := 0; i < val.Len(); i++ {
+ innerVal := val.Index(i)
+ var allInner []interface{}
+ for j := 0; j < innerVal.Len(); j++ {
+ innerInnerVal, err := ctx.loadModuleInline(inlineModuleKey, moduleNamespace, innerVal.Index(j).Interface().(json.RawMessage))
+ if err != nil {
+ return nil, fmt.Errorf("position %d: %v", j, err)
+ }
+ allInner = append(allInner, innerInnerVal)
+ }
+ all = append(all, allInner)
+ }
+ result = all
+
} else if isModuleMapType(typ.Elem()) {
// val is `[]map[string]json.RawMessage`