summaryrefslogblamecommitdiff
path: root/contrib/bloop/src/mill.contrib.bloop/CirceCompat.scala
blob: bfd88e07a1e79c60e62aa2e163c2f42aaeb2e774 (plain) (tree)






















                                                                        
package mill.contrib.bloop

import io.circe.{Decoder, Encoder, Json}
import upickle.core.Visitor
import upickle.default

trait CirceCompat {

  // Converts from a Circe encoder to a uPickle one
  implicit def circeWriter[T: Encoder]: default.Writer[T] =
    new default.Writer[T] {
      override def write0[V](out: Visitor[_, V], v: T) =
        ujson.circe.CirceJson.transform(Encoder[T].apply(v), out)
    }

  // Converts from a Circe decoder to a uPickle one
  implicit def circeReader[T: Decoder]: default.Reader[T] =
    new default.Reader.Delegate[Json, T](
      ujson.circe.CirceJson.map(Decoder[T].decodeJson).map(_.right.get))

}

object CirceCompat extends CirceCompat