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

406 Views Asked by At

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?

1

There are 1 best solutions below

3
On BEST ANSWER

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)


}