Не могу найти кодек для класса cats.data.Chain $ Wrap - PullRequest
0 голосов
/ 09 мая 2019

Я использую https://doc.akka.io/docs/alpakka/current/mongodb.html API для связи с MongoDB следующим образом:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.alpakka.mongodb.scaladsl.MongoSink
import akka.stream.scaladsl.Source
import cats.data.Chain
import com.mongodb.reactivestreams.client.MongoClients
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
import org.mongodb.scala.bson.codecs.Macros._
import org.bson.codecs.configuration._

import scala.util.{Failure, Success}

object Main extends App {
  implicit val system = ActorSystem()
  implicit val mat = ActorMaterializer()
  implicit val executor = system.dispatcher

  val preFailure = MsgPreFailure("Hello", Chain("Foo", "Too"))
  val codecRegistry = CodecRegistries
    .fromRegistries(CodecRegistries.fromProviders(classOf[MsgPreFailure]), DEFAULT_CODEC_REGISTRY)

  private val client = MongoClients.create("mongodb://localhost:27017")
  private val db = client.getDatabase("test")
  private val preFailureColl = db
    .getCollection("msg", classOf[MsgPreFailure])
    .withCodecRegistry(codecRegistry)

  val conn = Source
    .single(preFailure)
    .runWith(MongoSink.insertOne(preFailureColl))

  conn.onComplete {
    case Success(value) =>
      println(value)
    case Failure(ex) =>
      println(ex.getMessage)
  }

} 

В качестве сообщения об ошибке я получил:

Can't find a codec for class cats.data.Chain$Wrap.  

Как написать кодек?

...