[circe] could not find implicit value for parameter encoder: io.circe.Encoder 해결하기
scala circe 라이브러리를 사용하다 아래와 같은 에러를 만났다.
could not find implicit value for parameter encoder: io.circe.Encoder[Message]
대충 코드는 이렇다. Message case class를 json으로 변경하는 것이다.
object MessageType extends Enumeration {
type MessageType = Value
val DEL = Value
val INSERT = Value
}
case class Message(
val version: String,
val pipelineType: MessageType.Value,
val headers: Map[String, Object],
val createdAt: String
)
scala enumeration은 아래와 같이 처리해 주었는데.. 역시 동일한 에러이다.
implicit val decoder: Decoder[MessageType.Value] = Decoder.enumDecoder(MessageType)
implicit val encoder: Encoder[MessageType.Value] = Encoder.enumEncoder(MessageType)
혹시나 circe는 Map의 value type을 중요하게 본다. 역시 에러다
case class Message(
val version: String,
val pipelineType: MessageType.Value,
val headers: Map[String, Any],
val createdAt: String
)
아래와 같이 value type을 String으로 변경하니 동작한다
case class Message(
val version: String,
val pipelineType: MessageType.Value,
val headers: Map[String, String],
val createdAt: String
)
경험해보니 최대한 간결한 패턴의 case class를 써야 circe가 잘 동작한다.