From d3bf8bef81124ef47097d808a0b9299641fe5c7b Mon Sep 17 00:00:00 2001 From: Rui Gonçalves Date: Wed, 21 Jun 2017 22:39:26 +0100 Subject: Add ContravariantDerivation for cats.Show --- examples/src/main/scala/cats.scala | 23 +++++++++++++++++++++++ tests/shared/src/main/scala/magnolia/cats.scala | 17 +++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 examples/src/main/scala/cats.scala create mode 100644 tests/shared/src/main/scala/magnolia/cats.scala diff --git a/examples/src/main/scala/cats.scala b/examples/src/main/scala/cats.scala new file mode 100644 index 0000000..08690c2 --- /dev/null +++ b/examples/src/main/scala/cats.scala @@ -0,0 +1,23 @@ +package magnolia.examples.cats + +import scala.collection.immutable.ListMap +import scala.language.experimental.macros +import scala.language.higherKinds + +import cats.Show +import magnolia.ContravariantDerivation +import magnolia.Macros + +object instances extends instances1 { + + implicit val showDerivation = new ContravariantDerivation[Show] { + type Return = String + def call[T](show: Show[T], value: T): String = show.show(value) + def construct[T](body: T => String): Show[T] = body(_) + def join(xs: ListMap[String, String]): String = xs.map { case (k, v) => s"$k=$v" }.mkString("{", ", ", "}") + } +} + +trait instances1 { + implicit def genericShow[T]: Show[T] = macro Macros.magnolia[T, Show[_]] +} diff --git a/tests/shared/src/main/scala/magnolia/cats.scala b/tests/shared/src/main/scala/magnolia/cats.scala new file mode 100644 index 0000000..4a1c096 --- /dev/null +++ b/tests/shared/src/main/scala/magnolia/cats.scala @@ -0,0 +1,17 @@ +package magnolia + +import examples.{Address, Branch, Country, Entity, Leaf, Person} +import cats.instances.all._ +import cats.syntax.all._ +import examples.cats.instances._ +import language.experimental.macros + +object CatsMain { + + def main(args: Array[String]): Unit = { + println(Branch(Branch(Leaf(1, "a"), Leaf(2, "b")), Leaf(3, "c")).show) + println(List[Entity](Person("John Smith", + Address(List("1 High Street", "London", "SW1A 1AA"), + Country("UK", "GBR", false)))).show) + } +} -- cgit v1.2.3