Merge pull request #4499 from vishh/issue_4041

Update yaml library.
This commit is contained in:
Nikhil Jindal 2015-02-17 13:53:14 -08:00
commit 3dd7c4481b
3 changed files with 17 additions and 4 deletions

2
Godeps/Godeps.json generated
View File

@ -103,7 +103,7 @@
},
{
"ImportPath": "github.com/ghodss/yaml",
"Rev": "3bc1590d16074751993dd3b1a76e7a8d1a916a11"
"Rev": "588cb435e59ee8b6c2795482887755841ad67207"
},
{
"ImportPath": "github.com/golang/glog",

View File

@ -46,7 +46,12 @@ func Unmarshal(y []byte, o interface{}) error {
func JSONToYAML(j []byte) ([]byte, error) {
// Convert the JSON to an object.
var jsonObj interface{}
err := json.Unmarshal(j, &jsonObj)
// We are using yaml.Unmarshal here (instead of json.Unmarshal) because the
// Go JSON library doesn't try to pick the right number type (int, float,
// etc.) when unmarshling to interface{}, it just picks float64
// universally. go-yaml does go through the effort of picking the right
// number type, so we can preserve number type throughout this process.
err := yaml.Unmarshal(j, &jsonObj)
if err != nil {
return nil, err
}

View File

@ -1,17 +1,25 @@
package yaml
import (
"fmt"
"math"
"reflect"
"strconv"
"testing"
)
type MarshalTest struct {
A string
B int64
// Would like to test float64, but it's not supported in go-yaml.
// (See https://github.com/go-yaml/yaml/issues/83.)
C float32
}
func TestMarshal(t *testing.T) {
s := MarshalTest{"a"}
e := []byte("A: a\n")
f32String := strconv.FormatFloat(math.MaxFloat32, 'g', -1, 32)
s := MarshalTest{"a", math.MaxInt64, math.MaxFloat32}
e := []byte(fmt.Sprintf("A: a\nB: %d\nC: %s\n", math.MaxInt64, f32String))
y, err := Marshal(s)
if err != nil {