diff options
author | Bjørn Madsen <bm@aeons.dk> | 2017-08-06 00:28:33 +0200 |
---|---|---|
committer | Bjørn Madsen <bm@aeons.dk> | 2017-08-06 00:28:33 +0200 |
commit | 060cd745cdaa72ef433720fa09845c1132a516d8 (patch) | |
tree | 391629ed92d1973b048c84159df375dac391b26f /circe/src/main | |
parent | ff76a1737bb88c2664927db309d196e677ba3e98 (diff) | |
download | sttp-060cd745cdaa72ef433720fa09845c1132a516d8.tar.gz sttp-060cd745cdaa72ef433720fa09845c1132a516d8.tar.bz2 sttp-060cd745cdaa72ef433720fa09845c1132a516d8.zip |
Add circe support module
Diffstat (limited to 'circe/src/main')
-rw-r--r-- | circe/src/main/scala/com/softwaremill/sttp/circe/circe.scala | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/circe/src/main/scala/com/softwaremill/sttp/circe/circe.scala b/circe/src/main/scala/com/softwaremill/sttp/circe/circe.scala new file mode 100644 index 0000000..0233f08 --- /dev/null +++ b/circe/src/main/scala/com/softwaremill/sttp/circe/circe.scala @@ -0,0 +1,32 @@ +package com.softwaremill.sttp + +import com.softwaremill.sttp.model.{ + RequestBody, + ResponseAs, + SerializableBody, + StringBody +} +import io.circe.parser._ +import io.circe.{Decoder, Encoder} + +import scala.language.higherKinds + +package object circe { + private[sttp] val ApplicationJsonContentType = "application/json" + + private def serializeBody[B](body: B)( + implicit encoder: Encoder[B]): RequestBody[Nothing] = + SerializableBody((b: B) => StringBody(encoder(b).noSpaces, Utf8), body) + + implicit final class CirceRequestTOps[U[_], T, +S](val req: RequestT[U, T, S]) + extends AnyVal { + def jsonBody[B: Encoder](body: B): RequestT[U, T, S] = + req + .setContentTypeIfMissing(ApplicationJsonContentType) + .copy(body = serializeBody(body)) + } + + def asJson[B: Decoder]: ResponseAs[Either[io.circe.Error, B], Nothing] = + asString(Utf8).map(decode[B]) + +} |