theiterators / kebs Goto Github PK
View Code? Open in Web Editor NEWScala library to eliminate boilerplate
License: MIT License
Scala library to eliminate boilerplate
License: MIT License
Using lazy format for recursive case class gives StackOverflowError after upgrading to 1.5.2
case class Category(
name: String,
parent: Option[Category]
)
implicit val categoryFormat = jsonFormatRec[Category]
macro expansion has failed: java.lang.StackOverflowError
at scala.reflect.internal.Symbols$TermSymbol.isClassConstructor(Symbols.scala:2817)
at scala.reflect.internal.Symbols$TermSymbol.isConstructor(Symbols.scala:2819)
at scala.tools.nsc.typechecker.Contexts$Context.nextOuter(Contexts.scala:620)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:881)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:904)
at scala.tools.nsc.typechecker.Contexts$Context.withOuter$1(Contexts.scala:884)
at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:901)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1409)
at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:95)
at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:82)
at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:458)
at scala.tools.nsc.typechecker.Implicits.inferImplicitFor(Implicits.scala:40)
at scala.tools.nsc.typechecker.Implicits.inferImplicitFor$(Implicits.scala:39)
at scala.tools.nsc.Global$$anon$1.inferImplicitFor(Global.scala:458)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$applyImplicitArgs$2(Typers.scala:172)
at scala.tools.nsc.typechecker.Typers$Typer.applyImplicitArgs(Typers.scala:165)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:883)
at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:477)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1210)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1207)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit1(Implicits.scala:698)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit0(Implicits.scala:635)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$typedImplicit(Implicits.scala:503)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.rankImplicits(Implicits.scala:954)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.findBest(Implicits.scala:982)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1039)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1409)
at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:95)
at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:82)
at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:458)
at scala.tools.nsc.typechecker.Implicits.$anonfun$inferImplicit$3(Implicits.scala:119)
at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:119)
at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:117)
at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:458)
at scala.reflect.macros.contexts.Typers.inferImplicitValue(Typers.scala:44)
at scala.reflect.macros.contexts.Typers.inferImplicitValue$(Typers.scala:42)
at scala.reflect.macros.contexts.Context.inferImplicitValue(Context.scala:6)
at scala.reflect.macros.contexts.Context.inferImplicitValue(Context.scala:6)
at pl.iterators.kebs.macros.MacroUtils.inferImplicitValue(MacroUtils.scala:34)
at pl.iterators.kebs.json.macros.KebsSprayMacros.$anonfun$materializeRootJsonFormat$1(KebsSprayMacros.scala:31)
at scala.collection.immutable.List.map(List.scala:283)
at pl.iterators.kebs.json.macros.KebsSprayMacros.materializeRootJsonFormat(KebsSprayMacros.scala:31)
at pl.iterators.kebs.json.macros.KebsSprayMacros.materializeRootFormat(KebsSprayMacros.scala:72)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at scala.reflect.macros.runtime.JavaReflectionRuntimes$JavaReflectionResolvers.$anonfun$resolveJavaReflectionRuntime$4(JavaReflectionRuntimes.scala:34)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:772)
Firstly thanks for the great library! ๐
I cannot add kebs-doobie
to my project and it appears to be missing from Maven. Is this expected?
When writing tests you have to generate many dummy case classes for fixtures. It'd be good to have a generator for them and just replace what's important.
Currently logo is awkwardly sized and looks out-of-place. Please change it to something sane :-)
It would be nice if Kebs would provide JSON formats for case classes with more than 22 fields.
Ex. StringColumnExtensionMethods does not work by default for String mapped case classes. It should be relatively easy to provide extensions for all basic types (mapped).
This works fine:
import pl.iterators.kebs.tagged._
import pl.iterators.kebs.tag.meta.tagged
@tagged object Tags {
trait NameTag
trait IdTag[+A]
trait PositiveIntTag
type Name = String @@ NameTag
type Id[A] = Int @@ IdTag[A]
type PositiveInt = Int @@ PositiveIntTag
object PositiveInt {
sealed trait Error
case object Negative extends Error
case object Zero extends Error
def validate(i: Int) = if (i == 0) Left(Zero) else if (i < 0) Left(Negative) else Right(i)
}
}
but if you add type description to validate
, like: def validate(i: Int): Either[Error, Int] = if (i == 0) Left(Zero) else if (i < 0) Left(Negative) else Right(i)
no validation will be executed.
The following test case:
import org.scalatest.{Matchers, WordSpec}
import pl.iterators.kebs.json.KebsSpray
import spray.json.DefaultJsonProtocol
case class Book(name: String, chapters: List[Chapter])
case class Chapter(name: String)
class KebsTest extends WordSpec with Matchers {
import ThingProtocol._
import spray.json._
"Kebs" should {
"work with nested single field objects" in {
val json =
"""
| {
| "name": "Functional Programming in Scala",
| "chapters": [{"name":"first"}, {"name":"second"}]
| }
""".stripMargin
json.parseJson.convertTo[Book] shouldBe Book(
name = "Functional Programming in Scala",
chapters = List(Chapter("first"), Chapter("second"))
)
}
}
}
object ThingProtocol extends DefaultJsonProtocol with KebsSpray
Gives error:
spray.json.DeserializationException: Expected String as JsString, but got {"name":"first"}
spray-json, akka-http, slick modules depend on instances which is, in general, unnecessary, even though most users would probably add instances as a dep.
I think the correct solution would be to push InstanceConverter
trait to macro-utils to sit there together with CaseClass1Rep
or even better, create a thin module core
or base
and have InstanceConverter
and CaseClass1Rep
there.
Using validate
causes compiler warning as the argument arg1
from expanded macro is treated as unused.
TODO paste compiler warning
I'm using enum as parameter with default value. Default value is always used instead of the one I passed to request.
Test case:
import org.scalatest.{Matchers, WordSpec}
import akka.http.scaladsl.testkit.ScalatestRouteTest
import akka.http.scaladsl.server._
import Directives._
import enumeratum.{Enum, EnumEntry}
sealed trait SortOrder extends EnumEntry
object SortOrder extends Enum[SortOrder] {
case object Asc extends SortOrder
case object Desc extends SortOrder
override val values = findValues
}
class KebsTest extends WordSpec with Matchers with ScalatestRouteTest {
import pl.iterators.kebs.unmarshallers._
import enums._
val smallRoute =
get {
path("test_enum") {
parameter('sort.as[SortOrder] ? SortOrder.Desc) { sort =>
complete {
s"Sort was $sort"
}
}
}
}
"Kebs" should {
"work with default enum values" in {
Get("/test_enum?sort=Asc") ~> smallRoute ~> check {
responseAs[String] shouldBe "Sort was Asc"
}
}
}
}
There are several things that the documentation is currently missing and could be helpful to future contributors:
It can be added in form of CONTRIBUTING
guide
If you tag a type that has a Numeric
or Ordering
your tagged type no is an instance of these typeclasses. Example solution for Numeric
:
implicit def taggedNumeric[A: Numeric, Tag]: Numeric[A @@ Tag] = new Numeric[A @@ Tag] {
override def plus(x: A @@ Tag, y: A @@ Tag): A @@ Tag = implicitly[Numeric[A]].plus(x, y).taggedWith[Tag]
override def minus(x: A @@ Tag, y: A @@ Tag): A @@ Tag = implicitly[Numeric[A]].minus(x, y).taggedWith[Tag]
override def times(x: A @@ Tag, y: A @@ Tag): A @@ Tag = implicitly[Numeric[A]].times(x, y).taggedWith[Tag]
override def negate(x: A @@ Tag): A @@ Tag = implicitly[Numeric[A]].negate(x).taggedWith[Tag]
override def fromInt(x: Int): A @@ Tag = implicitly[Numeric[A]].fromInt(x).taggedWith[Tag]
override def parseString(str: String): Option[A @@ Tag] = implicitly[Numeric[A]].parseString(str).map(_.taggedWith[Tag])
override def toInt(x: A @@ Tag): Int = implicitly[Numeric[A]].toInt(x)
override def toLong(x: A @@ Tag): Long = implicitly[Numeric[A]].toLong(x)
override def toFloat(x: A @@ Tag): Float = implicitly[Numeric[A]].toFloat(x)
override def toDouble(x: A @@ Tag): Double = implicitly[Numeric[A]] toDouble (x)
override def compare(x: A @@ Tag, y: A @@ Tag): Int = implicitly[Numeric[A]].compare(x, y)
}
Composite types in slick-pg requires lots of boilerplate (especially tedious extends Struct
which destroys domain class purity). Seems likea good thing for kebs to fix.
object KebsProtocol extends KebsCirce
import KebsProtocol._
@noflat case class F(i: Int)
test("No-flat format - annotation") {
val decoder = implicitly[Decoder[F]]
val encoder = implicitly[Encoder[F]]
decoder.apply(Json.fromFields(Seq("i" -> Json.fromInt(10))).hcursor) shouldBe Right(F(10))
encoder.apply(F(10)) shouldBe Json.fromFields(Seq("i" -> Json.fromInt(10)))
}
Test above results in failure. Currently the support for noflat
works only when NoFlat trait is mixed in.
In order to fix this, the following code should be changed so @noflat is taken into account when only KebsCirce
trait is extended:
trait KebsCirce extends AutoDerivation {
implicit def flatDecoder[T, A](implicit rep: CaseClass1Rep[T, A], decoder: Decoder[A]): Decoder[T] =
decoder.emap(obj => Try(rep.apply(obj)).toEither.left.map(_.getMessage))
implicit def flatEncoder[T, A](implicit rep: CaseClass1Rep[T, A], encoder: Encoder[A]): Encoder[T] =
encoder.contramap(rep.unapply)
}
KebsSpray is already handling this - it's worth taking a look: https://github.com/theiterators/kebs/blob/bb83e41ec2e3a217719c2da083e99e8ca4eee0ba/spray-json/src/main/scala/pl/iterators/kebs/json/KebsSpray.scala
case class Member(id: UUID, name: String)
object Member {
}
class Members(tag: BaseTable.Tag) extends BaseTable[Member](tag, "position") {
import driver.api._
def id: Rep[UUID] = column[UUID]("id")
def name: Rep[String] = column[String]("name")
override def * : ProvenShape[Member] =
(id, name) <> (Member.tupled, Member.unapply)
}
This does not compile for obvious reasons and needs a change to (id, name) <> ((Member.apply _).tupled, Member.unapply)
.
Even worse, let's consider this:
case class MemberCreateRequest(name: String)
case class Member(id: UUID, name: String)
object Member {
def apply(request: MemberCreateRequest): Member = Member(UUID.randomUUID(), request.name)
}
class Members(tag: BaseTable.Tag) extends BaseTable[Member](tag, "position") {
import driver.api._
def id: Rep[UUID] = column[UUID]("id")
def name: Rep[String] = column[String]("name")
override def * : ProvenShape[Member] =
(id, name) <> ((Member.apply _).tupled, Member.unapply)
}
It won't compile again due to ambiguous reference.
Can kebs help with that?
The following code:
import pl.iterators.kebs.json.KebsSpray
import spray.json.{DefaultJsonProtocol, JsonFormat}
class KebsTest {
import ThingProtocol._
case class Thing(thingId: String, parent: Option[Thing])
val t = Thing("child", Some(Thing("parent", None)))
implicitly[JsonFormat[Thing]].write(t)
}
object ThingProtocol extends DefaultJsonProtocol with KebsSpray
Gives error:
[error] (...)/KebsTest.scala:13: diverging implicit expansion for type routers.ThingProtocol.JF[Option[KebsTest.this.Thing]]
[error] starting with macro method jsonFlatFormat in trait KebsSpray
[error] implicitly[JsonFormat[Thing]].write(t)
[error] ^
[error] one error found
We have a little bit of 2.12 code that should be slightly refactored to adjust to practices used in Scala 2.13 - there are about 20+ warnings, this one being the most important:
[warn] /home/pk/Development/iterators/kebs/tagged-meta/src/test/scala/SprayAnnotationTests.scala:8:2: method right in class Either is deprecated (since 2.13.0): Either is now right-biased, use methods directly on Either
[warn] @tagged object SprayTestTags {
[warn] ^
[warn] /home/pk/Development/iterators/kebs/tagged-meta/src/test/scala/SprayAnnotationTests.scala:26:2: method right in class Either is deprecated (since 2.13.0): Either is now right-biased, use methods directly on Either
[warn] @tagged trait SprayTestTagsTrait {
[warn] ^
which is caused by
See how it works in spray-json: https://github.com/theiterators/kebs/tree/master/spray-json/src/test/scala/instances
Create macros to streamline generation of structures for https://github.com/andyglow/scala-jsonschema so they work seamlessly with tagged types/values classes.
import pl.iterators.kebs.tagged._
import json._
implicit def taggedJsonSchema[T, U](implicit base: json.schema.Predef[T]): json.schema.Predef[T @@ U] = base.asInstanceOf[json.schema.Predef[T @@ U]]
implicit def taggedJsonSchema2[T, U](implicit base: json.Schema[T]): json.Schema[T @@ U] = base.asInstanceOf[json.Schema[T @@ U]]
Is a good start but then you still manually need to materialize implicits.
Should be done similarly to https://github.com/theiterators/sealed-monad/pull/126/files
We need to check if kebs-tagged provides no overhead for primitive type. If there's an overhead, consider changing representation. See: https://github.com/estatico/scala-newtype
Enum support in slick-pg needs some boilerplate registration. It'd be great to avoid it:
Nice to have - both for Scala's Enum and enumeratum.
Following code:
test("issue") {
import KebsProtocol._
val jf = implicitly[JsonFormat[Request]]
}
case class Request(region: String, currency: String, date: String, code: String, items: List[RequestItem])
case class RequestItem(itemCode: String, language: String, answers: Option[List[Answer]], requirements: String, travellers: String)
case class Answer(answer: String)
Gives compilation error:
[error] diverging implicit expansion for type spray.json.JsonFormat[SprayValueEnumJsonFormatTests.this.Request]
[error] starting with macro method jsonValueEnumFormat in trait KebsEnumFormats
[error] val jf = implicitly[JsonFormat[Request]]
Using this SBT plugin is recommended: https://github.com/sbt/sbt-projectmatrix
scala 2.12.5/6
sbt 0.13.17
Compiling code that was working fine on 2.12.4 results in the following lengthy stacktrace:
java.lang.AbstractMethodError
at pl.iterators.kebs.macros.MacroUtils.<init>(MacroUtils.scala:8)
at pl.iterators.kebs.avro.macros.AvroKebsMacros.<init>(AvroKebsMacros.scala:8)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at scala.reflect.macros.runtime.JavaReflectionRuntimes$JavaReflectionResolvers.$anonfun$resolveJavaReflectionRuntime$4(JavaReflectionRuntimes.scala:31)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:792)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime$(Macros.scala:768)
at scala.tools.nsc.Global$$anon$1.macroExpandWithRuntime(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:609)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$$anon$4.transform(Macros.scala:931)
at scala.tools.nsc.typechecker.Macros.macroExpandAll(Macros.scala:939)
at scala.tools.nsc.typechecker.Macros.macroExpandAll$(Macros.scala:920)
at scala.tools.nsc.Global$$anon$1.macroExpandAll(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:777)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime$(Macros.scala:768)
at scala.tools.nsc.Global$$anon$1.macroExpandWithRuntime(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:609)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onDelayed(Macros.scala:736)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:623)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1171)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1231)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1204)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1224)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit1(Implicits.scala:706)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit0(Implicits.scala:643)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$typedImplicit(Implicits.scala:511)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.rankImplicits(Implicits.scala:964)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.findBest(Implicits.scala:992)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1049)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1419)
at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:95)
at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:82)
at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:448)
at scala.tools.nsc.typechecker.Implicits.$anonfun$inferImplicit$3(Implicits.scala:127)
at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:127)
at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:125)
at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:448)
at scala.reflect.macros.contexts.Typers.inferImplicitValue(Typers.scala:44)
at scala.reflect.macros.contexts.Typers.inferImplicitValue$(Typers.scala:42)
at scala.reflect.macros.contexts.Context.inferImplicitValue(Context.scala:6)
at scala.reflect.macros.contexts.Context.inferImplicitValue(Context.scala:6)
at shapeless.LazyMacros$DerivationContext$State$.resolveInstance(lazy.scala:301)
at shapeless.LazyMacros$DerivationContext.resolve0(lazy.scala:428)
at shapeless.LazyMacros$DerivationContext.resolve(lazy.scala:420)
at shapeless.LazyMacros$DerivationContext.$anonfun$derive$2(lazy.scala:504)
at scala.util.Either$LeftProjection.flatMap(Either.scala:561)
at shapeless.LazyMacros$DerivationContext.$anonfun$derive$1(lazy.scala:502)
at scala.Option.getOrElse(Option.scala:121)
at shapeless.LazyMacros$DerivationContext.derive(lazy.scala:502)
at shapeless.LazyMacros$DerivationContext$State$.deriveInstance(lazy.scala:334)
at shapeless.LazyMacros$.deriveInstance(lazy.scala:599)
at shapeless.LazyMacros.mkImpl(lazy.scala:213)
at shapeless.LazyMacros.mkLazyImpl(lazy.scala:200)
at shapeless.LazyMacrosRef.mkLazyImpl(lazyref.scala:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at scala.reflect.macros.runtime.JavaReflectionRuntimes$JavaReflectionResolvers.$anonfun$resolveJavaReflectionRuntime$4(JavaReflectionRuntimes.scala:34)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:792)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime$(Macros.scala:768)
at scala.tools.nsc.Global$$anon$1.macroExpandWithRuntime(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:609)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$$anon$4.transform(Macros.scala:931)
at scala.tools.nsc.typechecker.Macros.macroExpandAll(Macros.scala:939)
at scala.tools.nsc.typechecker.Macros.macroExpandAll$(Macros.scala:920)
at scala.tools.nsc.Global$$anon$1.macroExpandAll(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:777)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime$(Macros.scala:768)
at scala.tools.nsc.Global$$anon$1.macroExpandWithRuntime(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:609)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onDelayed(Macros.scala:736)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:623)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1171)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1231)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1204)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1224)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit1(Implicits.scala:706)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit0(Implicits.scala:643)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$typedImplicit(Implicits.scala:511)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.rankImplicits(Implicits.scala:964)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.findBest(Implicits.scala:992)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1049)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1445)
at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:95)
at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:82)
at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:448)
at scala.tools.nsc.typechecker.Implicits.inferImplicitFor(Implicits.scala:40)
at scala.tools.nsc.typechecker.Implicits.inferImplicitFor$(Implicits.scala:39)
at scala.tools.nsc.Global$$anon$1.inferImplicitFor(Global.scala:448)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$applyImplicitArgs$2(Typers.scala:172)
at scala.tools.nsc.typechecker.Typers$Typer.applyImplicitArgs(Typers.scala:165)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$2(Typers.scala:850)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$silent$2(Typers.scala:714)
at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:714)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:849)
at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:477)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1227)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5654)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedArg$1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:477)
at scala.tools.nsc.typechecker.Typers$Typer.typedArgToPoly$1(Typers.scala:3680)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$34(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.handlePolymorphicCall$1(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3699)
at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4773)
at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4801)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5586)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:2476)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$97(Typers.scala:5561)
at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:486)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5596)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedArg$1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:477)
at scala.tools.nsc.typechecker.Typers$Typer.typedArgToPoly$1(Typers.scala:3680)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$34(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.handlePolymorphicCall$1(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3699)
at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4773)
at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4801)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5586)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedArg$1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:477)
at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgWithFormal$1(PatternTypers.scala:108)
at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.$anonfun$typedArgsForFormals$4(PatternTypers.scala:122)
at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgsForFormals(PatternTypers.scala:122)
at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgsForFormals$(PatternTypers.scala:103)
at scala.tools.nsc.typechecker.Typers$Typer.typedArgsForFormals(Typers.scala:111)
at scala.tools.nsc.typechecker.Typers$Typer.handleMonomorphicCall$1(Typers.scala:3635)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$31(Typers.scala:3661)
at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3661)
at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4773)
at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4801)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5586)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedAnnotated$1(Typers.scala:4270)
at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:5570)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5596)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5703)
at scala.tools.nsc.typechecker.Typers$Typer.typedMatch(Typers.scala:2560)
at scala.tools.nsc.typechecker.Typers$Typer.typedVirtualizedMatch$1(Typers.scala:4483)
at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:5565)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5596)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5714)
at scala.tools.nsc.typechecker.Typers$Typer.computeType(Typers.scala:5802)
at scala.tools.nsc.typechecker.Namers$Namer.assignTypeToTree(Namers.scala:1079)
at scala.tools.nsc.typechecker.Namers$Namer.valDefSig(Namers.scala:1629)
at scala.tools.nsc.typechecker.Namers$Namer.memberSig(Namers.scala:1798)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:1763)
at scala.tools.nsc.typechecker.Namers$Namer$MonoTypeCompleter.completeImpl(Namers.scala:842)
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete(Namers.scala:1960)
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete$(Namers.scala:1958)
at scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:1953)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1532)
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1680)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5255)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5703)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3129)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2006)
at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1829)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5552)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5602)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5703)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3129)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:2475)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$97(Typers.scala:5561)
at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:486)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5596)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.$anonfun$onSuccess$1(Macros.scala:664)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.typecheck$1(Macros.scala:664)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onSuccess(Macros.scala:676)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:615)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1171)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1231)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1204)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5654)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:5854)
at scala.tools.nsc.typechecker.Typers$Typer.typedValDefImpl(Typers.scala:2087)
at scala.tools.nsc.typechecker.Typers$Typer.typedValDef(Typers.scala:2043)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5550)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5602)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5703)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3129)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2006)
at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1829)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5552)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5602)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5703)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3129)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:2475)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$97(Typers.scala:5561)
at scala.tools.nsc.typechecker.Typers$Typer.typedOutsidePatternMode$1(Typers.scala:486)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5596)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.$anonfun$onSuccess$1(Macros.scala:664)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.typecheck$1(Macros.scala:664)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onSuccess(Macros.scala:676)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:615)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$$anon$4.transform(Macros.scala:931)
at scala.tools.nsc.typechecker.Macros.macroExpandAll(Macros.scala:939)
at scala.tools.nsc.typechecker.Macros.macroExpandAll$(Macros.scala:920)
at scala.tools.nsc.Global$$anon$1.macroExpandAll(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime(Macros.scala:777)
at scala.tools.nsc.typechecker.Macros.macroExpandWithRuntime$(Macros.scala:768)
at scala.tools.nsc.Global$$anon$1.macroExpandWithRuntime(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:609)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros$DefMacroExpander.onDelayed(Macros.scala:736)
at scala.tools.nsc.typechecker.Macros$MacroExpander.$anonfun$expand$1(Macros.scala:623)
at scala.tools.nsc.Global.withInfoLevel(Global.scala:219)
at scala.tools.nsc.typechecker.Macros$MacroExpander.expand(Macros.scala:602)
at scala.tools.nsc.typechecker.Macros$MacroExpander.apply(Macros.scala:589)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand(Macros.scala:753)
at scala.tools.nsc.typechecker.Macros.standardMacroExpand$(Macros.scala:751)
at scala.tools.nsc.Global$$anon$1.standardMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:432)
at scala.tools.nsc.typechecker.AnalyzerPlugins$$anon$12.default(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.invoke(AnalyzerPlugins.scala:401)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand(AnalyzerPlugins.scala:429)
at scala.tools.nsc.typechecker.AnalyzerPlugins.pluginsMacroExpand$(AnalyzerPlugins.scala:429)
at scala.tools.nsc.Global$$anon$1.pluginsMacroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Macros.macroExpand(Macros.scala:746)
at scala.tools.nsc.typechecker.Macros.macroExpand$(Macros.scala:746)
at scala.tools.nsc.Global$$anon$1.macroExpand(Global.scala:448)
at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1171)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1231)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1204)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1224)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit1(Implicits.scala:706)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit0(Implicits.scala:643)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$typedImplicit(Implicits.scala:511)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.rankImplicits(Implicits.scala:964)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.findBest(Implicits.scala:992)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1049)
at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1445)
at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:95)
at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:82)
at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:448)
at scala.tools.nsc.typechecker.Implicits.inferImplicitFor(Implicits.scala:40)
at scala.tools.nsc.typechecker.Implicits.inferImplicitFor$(Implicits.scala:39)
at scala.tools.nsc.Global$$anon$1.inferImplicitFor(Global.scala:448)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$applyImplicitArgs$2(Typers.scala:172)
at scala.tools.nsc.typechecker.Typers$Typer.applyImplicitArgs(Typers.scala:165)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$2(Typers.scala:850)
at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:700)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:849)
at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:477)
at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1227)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5654)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedArg$1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:477)
at scala.tools.nsc.typechecker.Typers$Typer.typedArgToPoly$1(Typers.scala:3680)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$34(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.handlePolymorphicCall$1(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3699)
at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4773)
at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4801)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5586)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5714)
at scala.tools.nsc.typechecker.Typers$Typer.computeType(Typers.scala:5802)
at scala.tools.nsc.typechecker.Namers$Namer.assignTypeToTree(Namers.scala:1079)
at scala.tools.nsc.typechecker.Namers$Namer.valDefSig(Namers.scala:1629)
at scala.tools.nsc.typechecker.Namers$Namer.memberSig(Namers.scala:1798)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:1763)
at scala.tools.nsc.typechecker.Namers$Namer$ValTypeCompleter.completeImpl(Namers.scala:910)
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete(Namers.scala:1960)
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete$(Namers.scala:1958)
at scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:1953)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1532)
at scala.reflect.internal.Symbols$Symbol.cookJavaRawInfo(Symbols.scala:1707)
at scala.tools.nsc.typechecker.Infer$Inferencer.checkAccessible(Infer.scala:272)
at scala.tools.nsc.typechecker.Typers$Typer.makeAccessible(Typers.scala:579)
at scala.tools.nsc.typechecker.Typers$Typer.typedIdent$2(Typers.scala:5140)
at scala.tools.nsc.typechecker.Typers$Typer.typedIdentOrWildcard$1(Typers.scala:5155)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5584)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedArg$1(Typers.scala:3290)
at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:477)
at scala.tools.nsc.typechecker.Typers$Typer.typedArgToPoly$1(Typers.scala:3680)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$34(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.handlePolymorphicCall$1(Typers.scala:3688)
at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3699)
at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4773)
at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4801)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5586)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5603)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5714)
at scala.tools.nsc.typechecker.Typers$Typer.computeType(Typers.scala:5802)
at scala.tools.nsc.typechecker.Namers$Namer.assignTypeToTree(Namers.scala:1079)
at scala.tools.nsc.typechecker.Namers$Namer.valDefSig(Namers.scala:1629)
at scala.tools.nsc.typechecker.Namers$Namer.memberSig(Namers.scala:1798)
at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:1763)
at scala.tools.nsc.typechecker.Namers$Namer$ValTypeCompleter.completeImpl(Namers.scala:910)
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete(Namers.scala:1960)
at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete$(Namers.scala:1958)
at scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:1953)
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1532)
at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1680)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5255)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5703)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3129)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2006)
at scala.tools.nsc.typechecker.Typers$Typer.typedModuleDef(Typers.scala:1876)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5553)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5602)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5703)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3129)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$10(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3274)
at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5262)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5555)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5602)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5640)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5672)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5613)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5618)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5699)
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.apply(Analyzer.scala:104)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:426)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:419)
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.$anonfun$run$1(Analyzer.scala:94)
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.$anonfun$run$1$adapted(Analyzer.scala:93)
at scala.collection.Iterator.foreach(Iterator.scala:944)
at scala.collection.Iterator.foreach$(Iterator.scala:944)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1432)
at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.run(Analyzer.scala:93)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1446)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1430)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1423)
at scala.tools.nsc.Global$Run.compile(Global.scala:1539)
at xsbt.CachedCompiler0.run(CompilerInterface.scala:116)
at xsbt.CachedCompiler0.run(CompilerInterface.scala:95)
at xsbt.CompilerInterface.run(CompilerInterface.scala:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:107)
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:53)
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:47)
at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply$mcV$sp(MixedAnalyzingCompiler.scala:50)
at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply(MixedAnalyzingCompiler.scala:50)
at sbt.compiler.MixedAnalyzingCompiler$$anonfun$compileScala$1$1.apply(MixedAnalyzingCompiler.scala:50)
at sbt.compiler.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:74)
at sbt.compiler.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:49)
at sbt.compiler.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:64)
at sbt.compiler.IC$$anonfun$compileInternal$1.apply(IncrementalCompiler.scala:160)
at sbt.compiler.IC$$anonfun$compileInternal$1.apply(IncrementalCompiler.scala:160)
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:66)
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:64)
at sbt.inc.IncrementalCommon.cycle(IncrementalCommon.scala:32)
at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:72)
at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:71)
at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:99)
at sbt.inc.Incremental$.compile(Incremental.scala:71)
at sbt.inc.IncrementalCompile$.apply(Compile.scala:54)
at sbt.compiler.IC$.compileInternal(IncrementalCompiler.scala:160)
at sbt.compiler.IC$.incrementalCompile(IncrementalCompiler.scala:138)
at sbt.Compiler$.compile(Compiler.scala:155)
at sbt.Compiler$.compile(Compiler.scala:141)
at sbt.Defaults$.sbt$Defaults$$compileIncrementalTaskImpl(Defaults.scala:927)
at sbt.Defaults$$anonfun$compileIncrementalTask$1.apply(Defaults.scala:918)
at sbt.Defaults$$anonfun$compileIncrementalTask$1.apply(Defaults.scala:916)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
at sbt.std.Transform$$anon$4.work(System.scala:63)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.Execute.work(Execute.scala:237)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[error] (compile:compileIncremental) java.lang.AbstractMethodError
I'll add a code snippet if it'll prove hard to reproduce.
I have this piece of code that converts case class to json:
import pl.iterators.kebs.json.KebsSpray
import spray.json._
object Kebsie extends DefaultJsonProtocol with KebsSpray {
def main(args: Array[String]): Unit = {
implicit val fmt = jsonFormatN[Chest]
println(Chest(Seq("sword", "shield")).toJson.compactPrint)
println(Chest2(Seq("sword", "shield")).toJson.compactPrint)
}
case class Chest(items: Seq[String])
case class Chest2(items: Seq[String])
}
and expect both Chest and Chest2 to yield the same output:
{"items":["sword","shield"]}
however Chest2 json output is:
["sword","shield"]
Spray converts None
values to null
only when NullOptions trait is added but by default it doesn't add those fields to JSON.
When using kebs implicitly[RootJsonFormat[xxx]], it converts None
values to null
. Example of such case: https://scastie.scala-lang.org/myDisconnect/tgnMaqh4QcCdQWDBWQZT5A/7 see f4 field (this is also visible in Kebs tests)
Is it possible to change this behaviour in Kebs and ignore None values?
Note: This seems to be happening when a case class has more than 22 parameters
import org.scalatest.{FunSuite, Matchers}
import pl.iterators.kebs.json.KebsSpray
import pl.iterators.kebs.tag.meta.tagged
import pl.iterators.kebs.tagged._
import spray.json.{DefaultJsonProtocol, JsonFormat}
package object domain extends Domain {}
@tagged trait Domain {
trait SomeTag
type SomeTaggedValue = Int @@ SomeTag
}
object dto {
import domain._
case class SomeDto(opt: Option[SomeTaggedValue])
}
class FailingTests extends FunSuite with Matchers with DefaultJsonProtocol with KebsSpray {
import dto._
test("fail") {
implicitly[JsonFormat[Option[SomeDto]]]
}
}
Results in diverging implicit expansion for type spray.json.JsonFormat[Option[dto.SomeDto]]
. Interestingly, if you delete any Option
it will work.
My prediction is that implicit priorities are somehow wrong (compiler bug?) but I couldn't decide how/why.
Please see failing test case in https://github.com/dbronecki/kebs/commit/b62f6ae44ed16f9a2bb5bce833621f03d672d8e3
It's very common that you paste mappers for types like ZonedDateTime
, UUID
or Currency
from project to project. It'd be nice to have those covered for kebs.
It might be done with typeclasses like Reads
, Writes
and CaseClass1Rep
(or variant). This will allow us to easily write unmarshallers for Akka HTTP matchers and such.
User-facing data, like JSON or PathMatchers need special handling as throwing Exception is not the best idea ex. for spray-json
.
Ping me for more details but:
hstore implicit is too generic - disallows usage of custom Isomorphisms
seq/list implicit is missing instance for tagged type
etc.
It would be nice if Kebs would provide Slick mappers for case classes with more than 22 fields.
Is scala 2.11 still supported ? If yes, builds for it do not seem to be available in maven (for version greater 1.5.0 that is) :
https://mvnrepository.com/artifact/pl.iterators/kebs-avro
They were detected by CI builds. Below are links to their stack traces when compiling for JS and JVM platforms accordingly:
JS: https://github.com/plokhotnyuk/jsoniter-scala/pull/583/checks?check_run_id=1227740075#step:7:826
JVM: https://github.com/plokhotnyuk/jsoniter-scala/pull/583/checks?check_run_id=1227740098#step:7:2743
Sometimes it'd be convenient to have a copy that tries to patch a domain object with request object either by names or by types. Generic copy
is generally fine but it's tedious to write it by hand and what's most important when you're changing request or domain object it's easy to forget to update copy
params.
Should be done similarly to theiterators/sealed-monad#143
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.