Change to support creation effect for serializers #142
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, serializers need a creation effect, i.e.
F[Deserializer[F, A]]
orF[Serializer[F, A]]
. One example is the Confluent Avro serializer, which allocates mutable state as part of initialization. Typically, we want one instance per consumer or producer, which means we end up with code similar to the following.This pull request changes
ConsumerSettings
andProducerSettings
to accept serializers with creation effects, which will then be evaluated as part of consumer or producer creation. The above example can now be written as follows.Additionally, we use the
OrElse
construct from Monix to support implicit serializers with and without creation effects. This enables implicit generic derivation of serializers with creation effects. Essentially, this means we can write the example above using implicit serializers, as follows.Note that settings can also be created for serializers without creation effects, just like before.