Sto cercando di utilizzare spray-json in scala per riconoscere la scelta tra Ec2Provider e OpenstackProvider quando si converte in Json e viceversa. Mi piacerebbe poter dare delle scelte in "Provider", e se quelle scelte non si adattano a quelle disponibili allora non dovrebbero convalidare.Conversione di classi di casi polimorfiche in json e back
Il mio tentativo di questo può essere visto nel seguente codice:
import spray.json._
import DefaultJsonProtocol._
case class Credentials(username: String, password: String)
abstract class Provider
case class Ec2Provider(endpoint: String,credentials: Credentials) extends Provider
case class OpenstackProvider(credentials: Credentials) extends Provider
case class Infrastructure(name: String, provider: Provider, availableInstanceTypes: List[String])
case class InfrastructuresList(infrastructures: List[Infrastructure])
object Infrastructures extends App with DefaultJsonProtocol {
implicit val credFormat = jsonFormat2(Credentials)
implicit val ec2Provider = jsonFormat2(Ec2Provider)
implicit val novaProvider = jsonFormat1(OpenstackProvider)
implicit val infraFormat = jsonFormat3(Infrastructure)
implicit val infrasFormat = jsonFormat1(InfrastructuresList)
println(
InfrastructuresList(
List(
Infrastructure("test", Ec2Provider("nova", Credentials("user","pass")), List("1", "2"))
)
).toJson
)
}
Purtroppo, non riesce perché non riesce a trovare un formattatore per Provider
classe astratta.
test.scala:19: could not find implicit value for evidence parameter of type Infrastructures.JF[Provider]
Qualcuno ha qualche soluzione per questo?
Grazie mille! Questo è esattamente ciò di cui avevo bisogno! – wernerb