Developus
Developus

Reputation: 1462

Scala, ZIO - how to return custom response in zio-http?

do you know how I can return custom object as zio-http response? I created simple class:

final case class CustomerResponse(id: Int, name: String, age: Int)

object CustomerResponse {
      implicit val responseCodec: Codec[CustomerResponse] = deriveCodec[CustomerResponse]
    }

and now I would like to return this CustomerResponse as Http response object:

Http.collect[Request] { case Method.GET -> !! / "customer" => // Response.as CustomerResponse

I tried to use

Response.json(CustomerResponse(1, "a", 1))

but it didnt work. Do you know how should I do it?

Upvotes: 2

Views: 488

Answers (1)

l33tHax0r
l33tHax0r

Reputation: 1721

Great question.

I think you can use ZIO Json to accomplish this. I am using ZIO 2 which seems to mess some things up however

case class CustomerResponse(id: Int, name: String, age: Int)

object CustomerResponse {
  implicit val encoder: JsonEncoder[CustomerResponse] = DeriveJsonEncoder.gen[CustomerResponse]
}

object CustomerServer extends ZIOAppDefault {
  val app: HttpApp[Any, Nothing] = Http.collect[Request] {
    case Method.GET -> !! / "customer" => Response.text(CustomerResponse(1, "w33b", 99).toJson)

  }

  override val run = Server.start(8090, app)


}

Upvotes: 1

Related Questions