Expose extraneous fields in error in strict decoding #125
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In some cases it can be necessary to know exactly what extraneous fields where encountered when using strict decoding, but currently the API here only indicates those fields in the
DecodingFailure
error message string (which is really the only thing we can do, given theDecoder
andDecodingFailure
API, which don't let us return additional structured information like this in the result of failure).The change in this PR adds a new
ExtrasDecoder
API that includes adecodeStrict
method (on the model of e.g.decodeAccumulating
) that also returns a list of extraneous field keys in the case of failure.I've added new
deriveExtrasDecoder
, etc. methods that return derived instances statically typed asExtrasDecoder
orExtrasAsObjectCodec
. (I've also includedderiveExtrasEncoder
for consistency, although it's currently identical toderiveConfiguredEncoder
.) We could alternatively just have thederivedConfiguredDecoder
methods return this subtype, but while that would be source-compatible, it would break binary compatibility (which probably doesn't matter much for a macro-oriented project like this, but still). In its current form this PR is verified by MiMa to be binary compatible with the 0.13.0 release.@erwan What do you think?