github.com/mstephano/gqlgen-schemagen@v0.0.0-20230113041936-dd2cd4ea46aa/graphql/uint.go (about) 1 package graphql 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 "strconv" 8 ) 9 10 func MarshalUint(i uint) Marshaler { 11 return WriterFunc(func(w io.Writer) { 12 _, _ = io.WriteString(w, strconv.FormatUint(uint64(i), 10)) 13 }) 14 } 15 16 func UnmarshalUint(v interface{}) (uint, error) { 17 switch v := v.(type) { 18 case string: 19 u64, err := strconv.ParseUint(v, 10, 64) 20 return uint(u64), err 21 case int: 22 return uint(v), nil 23 case int64: 24 return uint(v), nil 25 case json.Number: 26 u64, err := strconv.ParseUint(string(v), 10, 64) 27 return uint(u64), err 28 default: 29 return 0, fmt.Errorf("%T is not an uint", v) 30 } 31 } 32 33 func MarshalUint64(i uint64) Marshaler { 34 return WriterFunc(func(w io.Writer) { 35 _, _ = io.WriteString(w, strconv.FormatUint(i, 10)) 36 }) 37 } 38 39 func UnmarshalUint64(v interface{}) (uint64, error) { 40 switch v := v.(type) { 41 case string: 42 return strconv.ParseUint(v, 10, 64) 43 case int: 44 return uint64(v), nil 45 case int64: 46 return uint64(v), nil 47 case json.Number: 48 return strconv.ParseUint(string(v), 10, 64) 49 default: 50 return 0, fmt.Errorf("%T is not an uint", v) 51 } 52 } 53 54 func MarshalUint32(i uint32) Marshaler { 55 return WriterFunc(func(w io.Writer) { 56 _, _ = io.WriteString(w, strconv.FormatUint(uint64(i), 10)) 57 }) 58 } 59 60 func UnmarshalUint32(v interface{}) (uint32, error) { 61 switch v := v.(type) { 62 case string: 63 iv, err := strconv.ParseInt(v, 10, 32) 64 if err != nil { 65 return 0, err 66 } 67 return uint32(iv), nil 68 case int: 69 return uint32(v), nil 70 case int64: 71 return uint32(v), nil 72 case json.Number: 73 iv, err := strconv.ParseUint(string(v), 10, 32) 74 if err != nil { 75 return 0, err 76 } 77 return uint32(iv), nil 78 default: 79 return 0, fmt.Errorf("%T is not an uint", v) 80 } 81 }