Created
January 16, 2015 17:40
-
-
Save tindzk/51f800c07633e875f917 to your computer and use it in GitHub Desktop.
uPickle implicits for Response
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed trait Response[+T] | |
object Response { | |
case class Failure(error: String) extends Response[Nothing] | |
case class Success[+T](value: T) extends Response[T] | |
} | |
object Picklers { | |
import Response._ | |
import upickle.Js | |
import upickle.Aliases._ | |
implicit def FailureR: R[Failure] = R[Failure] { | |
case Js.Arr(Js.Num(0), x) => Failure(upickle.readJs[String](x)) | |
} | |
implicit def SuccessR[T: R]: R[Success[T]] = R[Success[T]] { | |
case Js.Arr(Js.Num(1), x) => Success(upickle.readJs[T](x)) | |
} | |
implicit def ResponseR[T: R]: R[Response[T]] = R[Response[T]]( | |
SuccessR[T].read orElse FailureR.read | |
) | |
implicit def FailureW[T: W]: W[Failure] = W[Failure](ResponseW[T].write) | |
implicit def SuccessW[T: W]: W[Success[T]] = W[Success[T]](ResponseW[T].write) | |
implicit def ResponseW[T: W]: W[Response[T]] = W[Response[T]] { | |
case Failure(s) => Js.Arr(Js.Num(0), upickle.writeJs(s)) | |
case Success(t) => Js.Arr(Js.Num(1), upickle.writeJs(t)) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment