aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Gonçalves <ruippeixotog@gmail.com>2017-06-21 22:39:26 +0100
committerRui Gonçalves <ruippeixotog@gmail.com>2017-06-21 22:39:26 +0100
commitd3bf8bef81124ef47097d808a0b9299641fe5c7b (patch)
tree85e0b12a38c54e3fdfd5af9b031749dc892407ea
parent0ccdf446c4c7770e60ede55ab712c8a551e36796 (diff)
downloadmagnolia-d3bf8bef81124ef47097d808a0b9299641fe5c7b.tar.gz
magnolia-d3bf8bef81124ef47097d808a0b9299641fe5c7b.tar.bz2
magnolia-d3bf8bef81124ef47097d808a0b9299641fe5c7b.zip
Add ContravariantDerivation for cats.Show
-rw-r--r--examples/src/main/scala/cats.scala23
-rw-r--r--tests/shared/src/main/scala/magnolia/cats.scala17
2 files changed, 40 insertions, 0 deletions
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)
+ }
+}