Redesign the configurability of the derived serializers #36
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.
This PR changes the way the derived marshallers can be configured.
Before, the PR, a
DerivedReads[A]
had a methoddef reads(typeTagReads: TypeTagReads): Reads[A]
that was using thetypeTagReads
parameter to customize the resultingReads[A]
.With this PR, the configuration is retrieved from implicit parameters, during the derivation process. This makes it possible to use type-directed mechanisms for configuring field names, as in #33. With the previous design, this was harder to achieve with the same efficiency.
However, I still think that the design proposed by this PR has some drawbacks:
The first point is the one that bothers me the most. The last point could be solved by not having a default configuration: users would be forced to import one configuration for their code to compile, and, if two configurations were imported, that would result in an ambiguous implicit values error.