aboutsummaryrefslogtreecommitdiff
path: root/circe/src/main
diff options
context:
space:
mode:
authorBjørn Madsen <bm@aeons.dk>2017-08-06 00:28:33 +0200
committerBjørn Madsen <bm@aeons.dk>2017-08-06 00:28:33 +0200
commit060cd745cdaa72ef433720fa09845c1132a516d8 (patch)
tree391629ed92d1973b048c84159df375dac391b26f /circe/src/main
parentff76a1737bb88c2664927db309d196e677ba3e98 (diff)
downloadsttp-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.scala32
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])
+
+}