0
Получаем следующую ошибку для приведенного ниже кода. Любые идеи очень ценятся. Не совсем уверен, что вызывает это, поскольку у меня есть достаточно других пользовательских типов во всем приложении, которые не вызвали такого поведения.Scala Type Variances Ошибка с сериализатором JSON в phantom-dsl с json4s
Дайте мне знать, если вам нужна дополнительная информация, чтобы иметь возможность предложить рекомендации/предложения.
[error] /Users/dan_mi_sun/projects/openblockchain/src/main/scala/org/dyne/danielsan/openblockchain/data/model/GenericVinModel.scala:35: type mismatch;
[error] found : org.dyne.danielsan.openblockchain.data.model.VinsModel
[error] required: com.websudos.phantom.CassandraTable[org.dyne.danielsan.openblockchain.data.model.VinsModel,org.dyne.danielsan.openblockchain.data.entity.Vin]
[error] Note: org.dyne.danielsan.openblockchain.data.model.ConcreteVinsModel <: org.dyne.danielsan.openblockchain.data.model.VinsModel (and org.dyne.danielsan.openblockchain.data.model.VinsModel <: com.websudos.phantom.CassandraTable[org.dyne.danielsan.openblockchain.data.model.ConcreteVinsModel,org.dyne.danielsan.openblockchain.data.entity.Vin]), but class CassandraTable is invariant in type T.
[error] You may wish to define T as +T instead. (SLS 4.5)
[error] object scriptsig extends JsonListColumn[VinsModel, Vin, ScriptSig](this) {
[error] ^
[error] one error found
import com.websudos.phantom.CassandraTable
import com.websudos.phantom.dsl._
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization
import org.json4s.jackson.Serialization.write
import scala.concurrent.Future
case class ScriptSig(asm: String,
hex: String)
case class Vin(txid: String,
vout: Int,
scriptSig: List[ScriptSig],
sequence: Int)
sealed class VinsModel extends CassandraTable[ConcreteVinsModel, Vin] {
implicit val formats = Serialization.formats(NoTypeHints)
override def fromRow(row: Row): Vin = {
Vin(
txid(row),
vout(row),
scriptSig(row),
sequence(row)
)
}
object txid extends StringColumn(this)
object vout extends IntColumn(this)
object scriptSig extends JsonListColumn[VinsModel, Vin, ScriptSig](this) {
override def fromJson(obj: String): ScriptSig = {
parse(obj).extract[ScriptSig]
}
override def toJson(obj: ScriptSig): String = {
write(obj)
}
}
object sequence extends IntColumn(this)
}
abstract class ConcreteVinsModel extends VinsModel with RootConnector {
override val tableName = "vins"
def insertNew(v: Vin): Future[ResultSet] = insertNewVin(v).future()
def insertNewVin(v: Vin) = {
insert
.value(_.txid, v.txid)
.value(_.vout, v.vout)
.value(_.scriptSig, v.scriptSig)
.value(_.sequence, v.sequence)
}
}
Что JSON Lib вы используете? пожалуйста, поделитесь импортом –
В более поздних версиях фантома вам больше не нужно указывать три аргумента в 'JsonListColumn', должно быть достаточно. Даже если это не так, то, что вам не хватает, заключается в том, что вам нужно поставить 'ConcreteVinsModel' внутри' JsonListColumn' – flavian