in modules/core/src/main/scala/org/scalasteward/core/util/HttpJsonClient.scala [77:99]
private def request_(method: Method, uri: Uri, modify: ModReq): F[Unit] =
requestWithHeaders[Unit](method, uri, modify).void
// adapted from https://github.com/http4s/http4s/blob/c89ebc2d844c5c93dcc1307e5b9361a2c38bfd00/client/shared/src/main/scala/org/http4s/client/DefaultClient.scala#L91-L105
private def requestWithHeaders[A](method: Method, uri: Uri, modify: ModReq)(implicit
d: EntityDecoder[F, A]
): F[(A, Headers)] =
modify(Request[F](method, uri)).flatMap { req =>
val r = Nel
.fromList(d.consumes.toList.map(MediaRangeAndQValue(_)))
.fold(req)(m => req.addHeader(Accept(m)))
client.run(r).use {
case Successful(resp) =>
d.decode(resp, strict = false).value.flatMap {
case Right(a) => F.pure((a, resp.headers))
case Left(failure) =>
handleFailure(resp)(DecodeFailureWithContext(uri, method, _, Some(failure)))
}
case resp =>
handleFailure(resp)(UnexpectedResponse(uri, method, resp.headers, resp.status, _))
}
}