Я сделал простую модификацию приведенного здесь примера: https://circe.github.io/circe/, добавив тип Основы. Почему это не работает?
import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._
class Basics(Name:String,Cached:Boolean)
sealed trait Foo
case class Bar(basics:Basics,xs: Vector[String]) extends Foo
case class Qux(basics:Basics,i: Int, d: Option[Double]) extends Foo
val foo: List[Foo] = List(Qux(new Basics("Cat",true),13, Some(14.0)),Bar(new Basics("Cat",true),Vector("cat")))
val json = foo.asJson.noSpaces
println(json)
val decodedFoo = decode[List[Foo]](json)
println(decodedFoo)
Я специально получаю:
ScalaFiddle.scala:11: error: could not find implicit value for parameter encoder: circe.this.Encoder[List[ScalaFiddle.this.Foo]]
val json = foo.asJson.noSpaces
^
ScalaFiddle.scala:11: error: not enough arguments for method asJson: (implicit encoder: circe.this.Encoder[List[ScalaFiddle.this.Foo]])circe.this.Json.
Unspecified value parameter encoder.
val json = foo.asJson.noSpaces
^
ScalaFiddle.scala:14: error: could not find implicit value for evidence parameter of type circe.this.Decoder[List[ScalaFiddle.this.Foo]]
val decodedFoo = decode[List[Foo]](json)
Дополнительная магия:
sealed trait Bat
case class Basics(name:String,cached:Boolean) extends Bat
исправляет это. Почему?
Как и
case class Basics(name:String,cached:Boolean)