config-rs icon indicating copy to clipboard operation
config-rs copied to clipboard

chore: Upgrade to `ron` to `0.9`

Open polarathene opened this issue 1 year ago • 1 comments

Changes


Note

  • Ron 0.9 is not yet released, but is expected to be this month.
  • This PR was prepared / tested via git dependency instead of version.

Relevance

I've had this sitting around for a while and meaning to push a PR before I forget 😅

This PR is an alternative to https://github.com/mehcode/config-rs/pull/472 and a sibling of https://github.com/mehcode/config-rs/pull/474

In particular Ron 0.9 is intended to be more robust with Value better supporting untagged enums and similar compatibility issues.

  • While support is improved, there are various limitations documented in the README. A maintainer of Ron has implemented thorough fuzzing with this release which has assisted in documenting the known limitations.
  • That was a concern for the proposed approach in https://github.com/mehcode/config-rs/pull/472 , but for config-rs is passing the Ron tests successfully regardless of Ron 0.8 or 0.9 release used.
    • No adjustment is required for 0.9 support there as deserialize_any to the untagged enum will fallback to the Nil variant when a variant is unsupported by config-rs.
    • The drawback is such changes to the Value variants of a supported format is less obvious. Although since config-rs is generic across formats, that's less important so long as functionally the format meets test expectations.

Ron 0.10 will continue to improve on the Value type, which may be relevant for config-rs.

polarathene avatar Oct 17 '23 02:10 polarathene

There is a YAML test with keys that are strings or numbers since the format supports that. Ron also supports this, but no equivalent test is present: https://github.com/mehcode/config-rs/issues/432

The YAML equivalent isn't exactly supported, config-rs just handles converting a number type to a string type for the map key. The same could be handled for Ron (and any other formats that support such), since lossless serialization / roundtripping isn't a goal of the crate, only deserializing into a config struct?

Awareness of the lossy deserialization could probably be better documented 🤷‍♂️ (similar is done for Char into String, number types too, while the new bytes variant isn't likely to be supported?)

polarathene avatar Oct 19 '23 07:10 polarathene