All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mellowtech.jsonclient.JsonRequest.scala Maven / Gradle / Ivy

The newest version!
package org.mellowtech.jsonclient

import akka.http.scaladsl.model.{HttpMethods, HttpRequest}
import com.github.plokhotnyuk.jsoniter_scala.core._

import scala.concurrent.{ExecutionContext, Future}

sealed trait JsonClientRequest {
  def jsonClient: JsonClient
  def httpRequest: HttpRequest

  def send(): Future[JsonClientResponse]
  def sendToSring(): Future[StringResponse] = jsonClient.getString(httpRequest)

}

class JsonRequest[A](val httpRequest: HttpRequest, val jsonClient: JsonClient)(implicit ec: ExecutionContext, codec: JsonValueCodec[A])
  extends JsonClientRequest {

  def send(): Future[JsonResponse[A]] = jsonClient.send(httpRequest)

  def sendWithBody[B](body: B)(implicit bodyCodec: JsonValueCodec[B]): Future[JsonResponse[A]] = {
    jsonClient.sendWithBody[A,B](httpRequest, body)
  }

}

class JsonEmptyResponseRequest(val httpRequest: HttpRequest, val jsonClient: JsonClient)(implicit ec: ExecutionContext)
  extends JsonClientRequest {

  def send(): Future[EmptyResponse] = jsonClient.sendNoResponse(httpRequest)

  def sendWithBody[A](body: A)(implicit bodyCodec: JsonValueCodec[A]): Future[EmptyResponse] = {
    jsonClient.sendWithBodyNoResponse[A](httpRequest, body)
  }

}

object JsonRequest {

  def get[A](uri: String)(implicit jsonClient: JsonClient, ec: ExecutionContext, codec: JsonValueCodec[A]) =
    apply(HttpRequest(HttpMethods.GET, uri))

  def post[A](uri: String)(implicit jsonClient: JsonClient, ec: ExecutionContext, codec: JsonValueCodec[A]) =
    apply(HttpRequest(HttpMethods.POST, uri))

  def apply[A](request: HttpRequest)(implicit jsonClient: JsonClient, ec: ExecutionContext, codec: JsonValueCodec[A]) =
    new JsonRequest[A](request, jsonClient)
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy