def apply[A]()

in riff-raff/app/controllers/api.scala [89:131]


    def apply[A](
        authenticatedRequest: ApiRequest[A]
    )(f: ApiRequest[A] => JsValue): Result = {
      val jsonpCallback =
        authenticatedRequest.queryString.get("callback").map(_.head)

      val response =
        try {
          f(authenticatedRequest)
        } catch {
          case t: Throwable =>
            toJson(
              Map(
                "response" -> toJson(
                  Map(
                    "status" -> toJson("error"),
                    "message" -> toJson(t.getMessage),
                    "stacktrace" -> toJson(t.getStackTrace.map(_.toString))
                  )
                )
              )
            )
        }

      val responseObject = response match {
        case jso: JsObject => jso
        case jsv: JsValue  => JsObject(Seq(("value", jsv)))
      }

      jsonpCallback map { callback =>
        Ok(s"$callback(${responseObject.toString})")
          .as("application/javascript")
      } getOrElse {
        response \ "response" \ "status" match {
          case JsDefined(JsString("ok"))    => Ok(responseObject)
          case JsDefined(JsString("error")) => BadRequest(responseObject)
          case _ =>
            throw new IllegalStateException(
              "Response status missing or invalid"
            )
        }
      }
    }