Code Monkey home page Code Monkey logo

kebs's Issues

Diverging implicit expansion for specific configuration of 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.

Fix slick's proven shape problems

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?

Spray-json None values are always converted to null. How to change this?

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

kebs-avro does not seem to work with scala 2.12.5 and above (java.lang.AbstractMethodError)

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.

`validate` in tagged won't work if typed

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.

Intelligent `copy`

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.

Circe support - @noflat has no effect when KebsCirce.NoFlat is not used

  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

Dummy class generator

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.

Kebs spray-json can't resolve implicit for particular case class

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]]

Autogeneration of json schema

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.

Remove compiler warnings

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

q"validate($argName).right.map(arg1 => $argName.taggedWith[${tagType.tagName}[..$tagParams]])"

Derive typeclass instances for tagged types

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)
  }

[kebs-spray-json] Lazy formats stopped working in 1.5.2 version

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)

Unmarshalling nested JSON object with single field fails

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"}

Default Enum value is always used instead of the one passed in request

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"
      }
    }
  }
}

Improve docs

There are several things that the documentation is currently missing and could be helpful to future contributors:

  • Explain code organization
  • How to test your code
  • How to debug
  • ...

It can be added in form of CONTRIBUTING guide

Explicitly providing jsonFormatN yields different results than omitting it

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"]

Write missing column extensions for Slick

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).

Compilation error on nested case classes with the same type

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

hstore and array support is a bit messy

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.

Provide mappings for all standard Java types

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.

spray-json, akka-http, slick shouldn't depend on instances

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.