github.com/kubeshop/testkube@v1.17.23/internal/graphql/scalars/maps.go (about) 1 package scalars 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 8 "github.com/99designs/gqlgen/graphql" 9 ) 10 11 // Generic implementation 12 13 func MarshalAnyMapScalar[T interface{}](val map[string]T) graphql.Marshaler { 14 return graphql.WriterFunc(func(w io.Writer) { 15 err := json.NewEncoder(w).Encode(val) 16 if err != nil { 17 panic(err) 18 } 19 }) 20 } 21 22 func UnmarshalAnyMapScalar[T interface{}](v interface{}) (map[string]T, error) { 23 if m, ok := v.(map[string]T); ok { 24 return m, nil 25 } 26 return nil, fmt.Errorf("%T is not a map[string]%T", v, *new(T)) 27 } 28 29 // Specific types 30 31 func MarshalStringMapScalar(val map[string]string) graphql.Marshaler { 32 return MarshalAnyMapScalar(val) 33 } 34 35 func UnmarshalStringMapScalar(v interface{}) (map[string]string, error) { 36 return UnmarshalAnyMapScalar[string](v) 37 }