mirror of
https://github.com/aykhans/dodo.git
synced 2025-09-03 18:03:34 +00:00
✨ added random value selection feature to request objects (#19)
This commit is contained in:
54
utils/convert.go
Normal file
54
utils/convert.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func MarshalJSON(v any, maxSliceSize uint) string {
|
||||
rv := reflect.ValueOf(v)
|
||||
if rv.Kind() == reflect.Slice && rv.Len() == 0 {
|
||||
return "[]"
|
||||
}
|
||||
|
||||
data, err := json.MarshalIndent(truncateLists(v, int(maxSliceSize)), "", " ")
|
||||
if err != nil {
|
||||
return "{}"
|
||||
}
|
||||
|
||||
return strings.Replace(string(data), `"..."`, "...", -1)
|
||||
}
|
||||
|
||||
func truncateLists(v interface{}, maxItems int) interface{} {
|
||||
rv := reflect.ValueOf(v)
|
||||
|
||||
switch rv.Kind() {
|
||||
case reflect.Slice, reflect.Array:
|
||||
if rv.Len() > maxItems {
|
||||
newSlice := reflect.MakeSlice(rv.Type(), maxItems, maxItems)
|
||||
reflect.Copy(newSlice, rv.Slice(0, maxItems))
|
||||
newSlice = reflect.Append(newSlice, reflect.ValueOf("..."))
|
||||
return newSlice.Interface()
|
||||
}
|
||||
case reflect.Map:
|
||||
newMap := reflect.MakeMap(rv.Type())
|
||||
for _, key := range rv.MapKeys() {
|
||||
newMap.SetMapIndex(key, reflect.ValueOf(truncateLists(rv.MapIndex(key).Interface(), maxItems)))
|
||||
}
|
||||
return newMap.Interface()
|
||||
case reflect.Struct:
|
||||
newStruct := reflect.New(rv.Type()).Elem()
|
||||
for i := 0; i < rv.NumField(); i++ {
|
||||
newStruct.Field(i).Set(reflect.ValueOf(truncateLists(rv.Field(i).Interface(), maxItems)))
|
||||
}
|
||||
return newStruct.Interface()
|
||||
case reflect.Ptr:
|
||||
if rv.IsNil() {
|
||||
return nil
|
||||
}
|
||||
return truncateLists(rv.Elem().Interface(), maxItems)
|
||||
}
|
||||
|
||||
return v
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
package utils
|
||||
|
||||
func Flatten[T any](nested [][]T) []T {
|
||||
flattened := make([]T, 0)
|
||||
func Flatten[T any](nested [][]*T) []*T {
|
||||
flattened := make([]*T, 0)
|
||||
for _, n := range nested {
|
||||
flattened = append(flattened, n...)
|
||||
}
|
||||
|
Reference in New Issue
Block a user