blob: 13c2f930207b42cb3540a12d39dd4a86d66d293d [file] [log] [blame]
// Copyright 2016 Google LLC.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package gensupport
import (
// JSONFloat64 is a float64 that supports proper unmarshaling of special float
// values in JSON, according to
// Although
// that is a proto-to-JSON spec, it applies to all Google APIs.
// The jsonpb package
// ( has
// similar functionality, but only for direct translation from proto messages
// to JSON.
type JSONFloat64 float64
func (f *JSONFloat64) UnmarshalJSON(data []byte) error {
var ff float64
if err := json.Unmarshal(data, &ff); err == nil {
*f = JSONFloat64(ff)
return nil
var s string
if err := json.Unmarshal(data, &s); err == nil {
switch s {
case "NaN":
ff = math.NaN()
case "Infinity":
ff = math.Inf(1)
case "-Infinity":
ff = math.Inf(-1)
return fmt.Errorf(" bad float string %q", s)
*f = JSONFloat64(ff)
return nil
return errors.New(" data not float or string")