I\'m trying to wrap my head around Circe.
So, here\'s the model I\'ve been given:
object Gender extends Enumeration {
type Gender = Value
val M
Try defining your own encoders and decoders for the enum using:
Decoder.enumDecoder[E <: Enumeration](enum: E)
Encoder.enumEncoder[E <: Enumeration](enum: E)
something like:
object JsonProtocol {
implicit val genderDecoder: Decoder[Gender.Value] = Decoder.enumDecoder(Gender)
implicit val genderEncoder: Encoder[Gender.Value] = Encoder.enumEncoder(Gender)
implicit val productDecoder: Decoder[Product] = deriveDecoder
implicit val productEncoder: Encoder[Product] = deriveEncoder
}
These are needed because the automatic/semiautomatic derivers only work for hierarchies of sealed trait
s and case classes
as far as I know. The reason you see that error is because the derived codecs for Product
will implicitly require encoders/decoders for the types of each of it's parameters. An encoder/decoder for String
is a standard part of Circe, but you'll probably need to create ones for your own enumerations.