Skip to content

Commit

Permalink
core: Support loading modules from [][]json.RawMessage fields
Browse files Browse the repository at this point in the history
  • Loading branch information
mholt committed May 6, 2020
1 parent 1c17e6c commit 28ab0bf
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions context.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{}
//
Expand Down Expand Up @@ -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`

Expand Down

0 comments on commit 28ab0bf

Please sign in to comment.