mirror of
https://github.com/wader/fq.git
synced 2024-11-30 18:08:16 +03:00
Merge pull request #285 from wader/toyaml-toml
interp: Improve type normalization and use it for toyaml and totoml
This commit is contained in:
commit
fd02df7efc
@ -137,14 +137,33 @@ func ToGoJQValue(v any) (any, bool) {
|
||||
case int:
|
||||
return vv, true
|
||||
case int64:
|
||||
if vv >= math.MinInt && vv <= math.MaxInt {
|
||||
return int(vv), true
|
||||
}
|
||||
return big.NewInt(vv), true
|
||||
case uint64:
|
||||
if vv <= math.MaxInt {
|
||||
return int(vv), true
|
||||
}
|
||||
return new(big.Int).SetUint64(vv), true
|
||||
case float32:
|
||||
return float64(vv), true
|
||||
case float64:
|
||||
return vv, true
|
||||
case *big.Int:
|
||||
if vv.IsInt64() {
|
||||
vv := vv.Int64()
|
||||
if vv >= math.MinInt && vv <= math.MaxInt {
|
||||
return int(vv), true
|
||||
}
|
||||
return vv, true
|
||||
} else if vv.IsUint64() {
|
||||
vv := vv.Uint64()
|
||||
if vv <= math.MaxInt {
|
||||
return int(vv), true
|
||||
}
|
||||
return vv, true
|
||||
}
|
||||
return vv, true
|
||||
case string:
|
||||
return vv, true
|
||||
|
@ -717,7 +717,7 @@ func init() {
|
||||
})
|
||||
|
||||
addFunc("_toyaml", func(c any) any {
|
||||
b, err := yaml.Marshal(c)
|
||||
b, err := yaml.Marshal(norm(c))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -734,7 +734,7 @@ func init() {
|
||||
|
||||
addFunc("_totoml", func(c map[string]any) any {
|
||||
b := &bytes.Buffer{}
|
||||
if err := toml.NewEncoder(b).Encode(c); err != nil {
|
||||
if err := toml.NewEncoder(b).Encode(norm(c)); err != nil {
|
||||
return err
|
||||
}
|
||||
return b.String()
|
||||
|
1
pkg/interp/testdata/encoding/toml.fqtest
vendored
1
pkg/interp/testdata/encoding/toml.fqtest
vendored
@ -1,4 +1,5 @@
|
||||
# toml does not support null in arrays
|
||||
# TODO: add uint64 norm test
|
||||
$ fq -rRs 'fromjson[] | (walk(if type == "array" then map(select(. != null)) end) | try (totoml | ., fromtoml) catch .), "----"' variants.json
|
||||
|
||||
{}
|
||||
|
1
pkg/interp/testdata/encoding/yaml.fqtest
vendored
1
pkg/interp/testdata/encoding/yaml.fqtest
vendored
@ -1,3 +1,4 @@
|
||||
# TODO: add uint64 norm test
|
||||
$ fq -rRs 'fromjson[] | (try (toyaml | ., fromyaml) catch .), "----"' variants.json
|
||||
null
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user