Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: IntDecMode float64 and json.Number modes (encoding/json compatibility) #439

Open
extemporalgenome opened this issue Nov 13, 2023 · 0 comments

Comments

@extemporalgenome
Copy link

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 as float64 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 as json.Number. This would not be especially efficient, but would provide excellent compatibility with encoding/json for existing applications needing arbitrary-precision number support. Internally, this could just use behave like IntDecConvertNone with a post-process call to strconv.FormatInt, strconv.FormatUint, or (*big.Int).String, depending on the underlying type; or some specialized binary-to-decimal converter.
  • Optional: JSONCompatDecOptions and JSONNumberDecOptions (or similar) functions, which set these options, as well as setting DefaultMapType to map[string]any.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant