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  }