package tasks import ( "fmt" "reflect" "strings" ) // TaskResult represents an actual return value of a processed task type TaskResult struct { Type string `bson:"type"` Value interface{} `bson:"value"` } // ReflectTaskResults ... func ReflectTaskResults(taskResults []*TaskResult) ([]reflect.Value, error) { resultValues := make([]reflect.Value, len(taskResults)) for i, taskResult := range taskResults { resultValue, err := ReflectValue(taskResult.Type, taskResult.Value) if err != nil { return nil, err } resultValues[i] = resultValue } return resultValues, nil } // HumanReadableResults ... func HumanReadableResults(results []reflect.Value) string { if len(results) == 1 { return fmt.Sprintf("%v", results[0].Interface()) } readableResults := make([]string, len(results)) for i := 0; i < len(results); i++ { readableResults[i] = fmt.Sprintf("%v", results[i].Interface()) } return fmt.Sprintf("[%s]", strings.Join(readableResults, ", ")) }