Scala function that takes dynamic class as parameter

70 views Asked by At

Alrighty, a realtime example of what I'm trying to do. I am using Scala Sttp as my Http Client. I have bunch of requests, so I wanted to make it more abstract. I wanted to generalise all get requests under abstract function that would look something like:

  def getRequest(
    uri: String,
    queryString: String,
    responseClass: **ANYCLASS**, --> I am unsure how to do this
    trackingId: String,
    component: String = "http-v2-client-get-request",
    numberOfRetries: Int = 0
  ): Either[HttpErrorInfo, **ANYCLASS**] = {

    val request = basicRequest
      .get(uri"$uri")
      .response(asJson[responseClass])
  }
  ...

So my question is how to replace responseClass signature so I can provide any case class so it gets mapped correctly.

Sorry if my question is somewhat bad, I am new to Scala and still learning how to dynamically do things

1

There are 1 answers

0
Dmytro Mitin On BEST ANSWER

Try

  def getRequest[T: Decoder](
    uri: String,
    queryString: String,
    trackingId: String,
    component: String = "http-v2-client-get-request",
    numberOfRetries: Int = 0
  ): Either[HttpErrorInfo, T] = {

    val request = basicRequest
      .get(uri"$uri")
      .response(asJson[T])
  }
  ...

Please notice the context bound : Decoder.