Ability to parse maps.

This commit is contained in:
2020-04-02 06:45:19 +05:00
parent 2290a3ee58
commit 94234816c5
2 changed files with 52 additions and 0 deletions

View File

@@ -19,6 +19,31 @@ func composeTree(value reflect.Value, prefix string) {
}
}
// Resolve Ptrs if any.
for {
if value.Kind() == reflect.Ptr {
value = value.Elem()
typeOf = value.Type()
} else {
break
}
}
if value.Kind() != reflect.Struct {
f := &field{
Name: typeOf.Name(),
EnvVar: curPrefix + strings.ToUpper(typeOf.Name()),
Pointer: value,
Kind: value.Kind(),
}
parsedTree = append(parsedTree, f)
printDebug("Field data constructed: %+v", f)
return
}
for i := 0; i < value.NumField(); i++ {
fieldToProcess := value.Field(i)
fieldToProcessType := typeOf.Field(i)
@@ -79,6 +104,16 @@ func composeTree(value reflect.Value, prefix string) {
newElementPrefix = strings.ToUpper(newElementPrefix + typeOf.Field(i).Name)
}
composeTree(fieldToProcess, newElementPrefix)
} else if fieldToProcess.Kind() == reflect.Map {
newElementPrefix := curPrefix
if !fieldToProcessType.Anonymous {
newElementPrefix = strings.ToUpper(newElementPrefix + typeOf.Field(i).Name)
}
mapIter := fieldToProcess.MapRange()
for mapIter.Next() {
composeTree(mapIter.Value().Elem(), newElementPrefix+"_"+strings.ToUpper(mapIter.Key().String()))
}
} else {
f := &field{
Name: typeOf.Field(i).Name,