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  }