config-rs
config-rs copied to clipboard
chore: Upgrade to `ron` to `0.9`
Changes
- Clarified that the option value variant dereferences a boxed Ron value.
- Ron
0.9
refactored theNumber
value variant to be lossless, which requires more thorough matching.- 128 integer support in Ron requires feature opt-in via
Cargo.toml
, (asValueKind
supports an equivalent type,config-rs
could opt-in).
- 128 integer support in Ron requires feature opt-in via
- Ron
0.9
also introduces a newBytes
value variant to support rusty byte strings (Vec<u8>
). This was to resolve a roundtrip serialization bug with base64 strings when serdedeserialize_any
is used (which lacks a type hint and would deserialize as a literal string to bytes, instead of base64 decoded string to bytes).
Note
- Ron
0.9
is not yet released, but is expected to be this month.- This PR was prepared / tested via
git
dependency instead ofversion
.
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 Ron0.8
or0.9
release used.- No adjustment is required for
0.9
support there asdeserialize_any
to the untagged enum will fallback to theNil
variant when a variant is unsupported byconfig-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.
- No adjustment is required for
Ron 0.10
will continue to improve on the Value
type, which may be relevant for config-rs
.
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?)