github.com/HaswinVidanage/gqlgen@v0.8.1-0.20220609041233-69528c1bf712/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 } 37 38 func MarshalIntID(i int) Marshaler { 39 return WriterFunc(func(w io.Writer) { 40 writeQuotedString(w, strconv.Itoa(i)) 41 }) 42 } 43 44 func UnmarshalIntID(v interface{}) (int, error) { 45 switch v := v.(type) { 46 case string: 47 return strconv.Atoi(v) 48 case int: 49 return v, nil 50 case int64: 51 return int(v), nil 52 case json.Number: 53 return strconv.Atoi(string(v)) 54 default: 55 return 0, fmt.Errorf("%T is not an int", v) 56 } 57 }