def handleRequest()

in formstack-baton-requests/src/main/scala/com/gu/identity/formstackbatonrequests/Handler.scala [55:74]


  def handleRequest(input: InputStream, output: OutputStream, context: Context)(
      implicit decoder: Decoder[Req],
      encoder: Encoder[Res]): Unit = {
    try {
      val response = for {
        request <- decode[Req](Source.fromInputStream(input).mkString)
        _ <- checkFormstackDataProvider(request)
        _ <- checkRequestTypeMatchesRequest(request)
        response <- handle(request, context)
      } yield response

      response match {
        case Left(err) => output.write(err.toString.asJson.printWith(jsonPrinter).getBytes)
        case Right(res) => output.write(res.asJson.printWith(jsonPrinter).getBytes)
      }

    } finally {
      output.close()
    }
  }