MainClassEncodeJson
以下の方法の何が問題になっていますか?
Scala http://lollyrock.com/articles/scala-implicit-conversion/を使用した暗黙的な JSON 変換の例に従っています
この質問は次のようなものです: Scala Arnautaut を使用してネストされたクラスをエンコードする
違いは、ネスティングの追加レイヤーです。
コンパイラから次のエラーが表示されます。
Cannot resolve reference EncodeJson with such signature
よろしくお願いします。
完全を期すためにエンコーダーとデコーダーを含めました
object ImplicitConversion {
case class MainClass (txid: String,hat: Hat,version: Int,bot: Bot, time: Int, locktime: Int)
case class Hat (value: Float,n: Int,nxt: Nxt)
case class Nxt (typetx: String,reqsigs: Int,addresses: List[Address])
case class Bot (base: String,sequence: Int)
case class Address (address: String)
// implicit conversion with argonaut
implicit def MainClassEncodeJson: EncodeJson[MainClass] =
EncodeJson((m: MainClass) =>
("txid" := m.txid) ->:
("hat" := Json (
("value" := m.hat.value),
("n" := m.hat.n),
("nxt" := Json (
("typetx" := m.hat.nxt.typetx),
("reqsigs" := m.hat.nxt.reqsigs),
("addresses" := m.hat.nxt.addresses)
)
) ->: jEmptyObject
)
) ->: jEmptyObject
("version" := m.version) ->:
("bot" := Json (
("base" := m.bot.base)
("sequence" := m.bot.sequence)
)
) ->: jEmptyObject
("time" := m.time) ->:
("locktime" := m.locktime) ->:
)
implicit def MainClassDecodeJson: DecodeJson[MainClass] =
DecodeJson(c => for {
txid <- (c --\ "txid").as[String]
hat <- (c --\ "hat").as[Json]
version <- (c --\ "version").as[Int]
bot <- (c --\ "bot").as[Json]
time <- (c --\ "time").as[Int]
locktime <- (c --\ "locktime").as[Int]
// extract data from hat
value <- (hat.acursor --\ "value").as[Float]
n <- (hat.acursor --\ "n").as[Int]
nxt <- (hat.acursor --\ "nxt").as[Json]
// extract data from nxt
typetx <- (nxt.acursor --\ "typetx").as[String]
reqsigs <- (nxt.acursor --\ "reqsigs").as[Int]
addresses <- (nxt.acursor --\ "addresses").as[List[Address]]
// extract data from bot
base <- (bot.acursor --\ "base").as[String]
sequence <- (bot.acursor --\ "sequence").as[Int]
} yield MainClass(txid, hat(value, n, Nxt(typetx, reqsigs, addresses)),
version, Bot(base, sequence), time, locktime)
}