github.com/wabain/gqlgen@v0.7.2/graphql/id.go (about)

     1  package graphql
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io"
     7  	"strconv"
     8  )
     9  
    10  func MarshalID(s string) Marshaler {
    11  	return WriterFunc(func(w io.Writer) {
    12  		io.WriteString(w, strconv.Quote(s))
    13  	})
    14  }
    15  func UnmarshalID(v interface{}) (string, error) {
    16  	switch v := v.(type) {
    17  	case string:
    18  		return v, nil
    19  	case json.Number:
    20  		return string(v), nil
    21  	case int:
    22  		return strconv.Itoa(v), nil
    23  	case float64:
    24  		return fmt.Sprintf("%f", v), nil
    25  	case bool:
    26  		if v {
    27  			return "true", nil
    28  		} else {
    29  			return "false", nil
    30  		}
    31  	case nil:
    32  		return "null", nil
    33  	default:
    34  		return "", fmt.Errorf("%T is not a string", v)
    35  	}
    36  }