scala - Defining Writes[...] for a Case Class w/ Tuple -
scala - Defining Writes[...] for a Case Class w/ Tuple -
given range class:
case class range(things: (string, string))
i tried implement writes[range]
play json docs illustration on creature
.
implicit val rangewrites: writes[range] = (jspath \ "things").write( (jspath \ "string").write[string] , (jspath \ "string").write[string] tupled )(unlift(range.unapply))
however, got:
[error] jsontest.scala 19 not find implicit value parameter app: play.api.libs.functional. applicative[play.api.libs.json.owrites] [error] (jspath \ "items").write(
how can fill in (jspath \ "items").write(
? in docs' example, there doesn't appear type required.
the issue here similar 1 shows in this question: can't utilize applicative syntax on plain old writes
(or owrites
)—you need builder
.
the solution similar here, instead of map
need contramap
, since writes
contravariant functor, not functor:
implicit val rangewrites: writes[range] = (jspath \ "things").write( (jspath \ "string1").write[string] , (jspath \ "string2").write[string] tupled ).contramap(unlift(range.unapply))
also note i've changed keys string1
, string2
—if utilize same key you're not going expect.
scala playframework-2.0
Comments
Post a Comment