cbor
cbor copied to clipboard
feature: `IntDecMode` `float64` and `json.Number` modes (`encoding/json` compatibility)
Is your feature request related to a problem? Please describe.
encoding/json
's behavior when decoding arbitrary numbers to any
is either float64
, or json.Number
, depending on decoder configuration.
fxamacker/cbor
already has pretty good method-signature compatibility with encoding/json
, but in the case of untyped decoding, requires additional complexity on the calling code in the form of additional types which must be handled: int64
, uint64
, and *big.Int
.
Describe the solution you'd like
- Add an
IntDecMode
value to cause all CBOR integers (including*big.Int
) to be decoded asfloat64
when the destination is*any
. This would, of course, be lossy for values far from zero. - Add an
IntDecMode
value to cause all CBOR integers (including*big.Int
) to be decoded asjson.Number
. This would not be especially efficient, but would provide excellent compatibility withencoding/json
for existing applications needing arbitrary-precision number support. Internally, this could just use behave likeIntDecConvertNone
with a post-process call tostrconv.FormatInt
,strconv.FormatUint
, or(*big.Int).String
, depending on the underlying type; or some specialized binary-to-decimal converter. - Optional:
JSONCompatDecOptions
andJSONNumberDecOptions
(or similar) functions, which set these options, as well as settingDefaultMapType
tomap[string]any
.