...

Source file src/github.com/99designs/gqlgen/graphql/float.go

Documentation: github.com/99designs/gqlgen/graphql

     1  package graphql
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"io"
     8  	"math"
     9  	"strconv"
    10  )
    11  
    12  func MarshalFloat(f float64) Marshaler {
    13  	return WriterFunc(func(w io.Writer) {
    14  		io.WriteString(w, fmt.Sprintf("%g", f))
    15  	})
    16  }
    17  
    18  func UnmarshalFloat(v interface{}) (float64, error) {
    19  	switch v := v.(type) {
    20  	case string:
    21  		return strconv.ParseFloat(v, 64)
    22  	case int:
    23  		return float64(v), nil
    24  	case int64:
    25  		return float64(v), nil
    26  	case float64:
    27  		return v, nil
    28  	case json.Number:
    29  		return strconv.ParseFloat(string(v), 64)
    30  	default:
    31  		return 0, fmt.Errorf("%T is not an float", v)
    32  	}
    33  }
    34  
    35  func MarshalFloatContext(f float64) ContextMarshaler {
    36  	return ContextWriterFunc(func(ctx context.Context, w io.Writer) error {
    37  		if math.IsInf(f, 0) || math.IsNaN(f) {
    38  			return fmt.Errorf("cannot marshal infinite no NaN float values")
    39  		}
    40  		io.WriteString(w, fmt.Sprintf("%g", f))
    41  		return nil
    42  	})
    43  }
    44  
    45  func UnmarshalFloatContext(ctx context.Context, v interface{}) (float64, error) {
    46  	return UnmarshalFloat(v)
    47  }
    48  

View as plain text