in pkg/log/structure/structuredata/serializer.go [89:138]
func storeValuesInContainerRecursive(s StructureData, addTo valueContainer, key string) error {
nr, err := s.Value(key)
if err != nil {
return err
}
nrStructure, convertible := nr.(StructureData)
if !convertible {
return fmt.Errorf("unreachable. value result is not a structuredata")
}
ty, err := nrStructure.Type()
if err != nil {
return err
}
if ty == StructuredTypeScalar {
value, err := nrStructure.Value("")
if err != nil {
return err
}
return addTo.Store(key, value)
}
if ty == StructuredTypeMap {
current := newSortedMap()
keys, err := nrStructure.Keys()
if err != nil {
return err
}
for _, key := range keys {
err = storeValuesInContainerRecursive(nrStructure, &mapValueContainer{target: current}, key)
if err != nil {
return err
}
}
return addTo.Store(key, current)
}
if ty == StructuredTypeArray {
keys, err := nrStructure.Keys()
if err != nil {
return err
}
current := make([]any, len(keys))
for _, key := range keys {
err = storeValuesInContainerRecursive(nrStructure, &arrayValueContainer{target: current}, key)
if err != nil {
return err
}
}
return addTo.Store(key, current)
}
return fmt.Errorf("unsupported")
}