func storeValuesInContainerRecursive()

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")
}