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