/
JsonEntities.scala
40 lines (32 loc) · 1.14 KB
/
JsonEntities.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package endpoints4s.akkahttp.client
import akka.http.scaladsl.model.{ContentTypes, HttpEntity}
import endpoints4s.{Codec, algebra, ujson}
/** Interpreter for [[endpoints4s.algebra.JsonEntitiesFromCodecs]] that encodes JSON requests
* and decodes JSON responses using Akka HTTP.
*
* @group interpreters
*/
trait JsonEntitiesFromCodecs extends algebra.JsonEntitiesFromCodecs with EndpointsWithCustomErrors {
def jsonRequest[A](implicit codec: JsonCodec[A]): RequestEntity[A] = { (a, req) =>
req.withEntity(
HttpEntity(
ContentTypes.`application/json`,
stringCodec(codec).encode(a)
)
)
}
def jsonResponse[A](implicit codec: JsonCodec[A]): ResponseEntity[A] =
stringCodecResponse(stringCodec(codec))
}
/** Interpreter for [[endpoints4s.algebra.JsonEntitiesFromSchemas]] that encodes JSON requests
* and decodes JSON responses using Akka HTTP.
*
* @group interpreters
*/
trait JsonEntitiesFromSchemas
extends algebra.JsonEntitiesFromSchemas
with JsonEntitiesFromCodecs
with ujson.JsonSchemas {
def stringCodec[A](implicit codec: JsonCodec[A]): Codec[String, A] =
codec.stringCodec
}