From 87299a000fc88d91aa8770f97d8ed2c318b5f892 Mon Sep 17 00:00:00 2001 From: Janecek Jakub Date: Fri, 13 Nov 2020 16:08:46 +0100 Subject: [PATCH 1/5] WIP --- build.sbt | 9 ++++++ .../http4s/client/Http4sJdkClientConfig.scala | 3 ++ .../http4s/client/Http4sJdkClientModule.scala | 28 +++++++++++++++++++ project/Dependencies.scala | 1 + 4 files changed, 41 insertions(+) create mode 100644 http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala create mode 100644 http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala diff --git a/build.sbt b/build.sbt index 0fa9473ba..915cc81ba 100644 --- a/build.sbt +++ b/build.sbt @@ -18,6 +18,7 @@ lazy val root = project grpcServerPureConfig, http4sClientBlaze, http4sClientBlazePureConfig, + http4sClientJdk, http4sClientMonixCatnap, http4sServer, http4sServerBlaze, @@ -238,6 +239,14 @@ lazy val http4sClientBlazePureConfig = project .settings(BuildSettings.common) .settings(name := "sst-http4s-client-blaze-pureconfig") +lazy val http4sClientJdk = project + .in(file("http4s-client-jdk")) + .settings(BuildSettings.common) + .settings( + name := "sst-http4s-client-jdk", + libraryDependencies += Dependencies.http4sJdkHttpClient + ) + lazy val http4sClientMonixCatnap = project .in(file("http4s-client-monix-catnap")) .dependsOn(monixCatnapMicrometer) diff --git a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala new file mode 100644 index 000000000..19e711d89 --- /dev/null +++ b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala @@ -0,0 +1,3 @@ +package com.avast.sst.http4s.client + +final case class Http4sJdkClientConfig() diff --git a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala new file mode 100644 index 000000000..c77e002e3 --- /dev/null +++ b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala @@ -0,0 +1,28 @@ +package com.avast.sst.http4s.client + +import cats.effect.{ConcurrentEffect, Resource} +import javax.net.ssl.SSLContext +import org.http4s.client.Client + +import scala.concurrent.ExecutionContext +import org.http4s.client.jdkhttpclient.JdkHttpClient +import cats.effect.ContextShift +import java.net.http.HttpClient + +object Http4sJdkClientModule { + + /** Makes [[org.http4s.client.Client]] (Blaze) initialized with the given config. + * + * @param executionContext callback handling [[scala.concurrent.ExecutionContext]] + */ + def make[F[_]: ConcurrentEffect: ContextShift]( + config: Http4sJdkClientConfig, + executionContext: ExecutionContext, + sslContext: Option[SSLContext] = None + ): Resource[F, Client[F]] = { + HttpClient.newBuilder() + JdkHttpClient(???) + ??? + } + +} diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 598c0852f..1d22730d1 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,6 +15,7 @@ object Dependencies { val http4sBlazeServer = "org.http4s" %% "http4s-blaze-server" % Versions.http4s val http4sClient = "org.http4s" %% "http4s-client" % Versions.http4s val http4sDsl = "org.http4s" %% "http4s-dsl" % Versions.http4s + val http4sJdkHttpClient = "org.http4s" %% "http4s-jdk-http-client" % "0.3.1" val http4sServer = "org.http4s" %% "http4s-server" % Versions.http4s val jsr305 = "com.google.code.findbugs" % "jsr305" % "3.0.2" val kindProjector = "org.typelevel" % "kind-projector" % "0.11.0" cross CrossVersion.full From 7a5f8c58ba3b2608075d9a7388fdbbb9c2374749 Mon Sep 17 00:00:00 2001 From: Janecek Jakub Date: Fri, 13 Nov 2020 16:08:46 +0100 Subject: [PATCH 2/5] WIP --- build.sbt | 9 ++++++ .../http4s/client/Http4sJdkClientConfig.scala | 3 ++ .../http4s/client/Http4sJdkClientModule.scala | 28 +++++++++++++++++++ project/Dependencies.scala | 1 + 4 files changed, 41 insertions(+) create mode 100644 http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala create mode 100644 http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala diff --git a/build.sbt b/build.sbt index 7e1be84a0..e5bf399f6 100644 --- a/build.sbt +++ b/build.sbt @@ -18,6 +18,7 @@ lazy val root = project grpcServerPureConfig, http4sClientBlaze, http4sClientBlazePureConfig, + http4sClientJdk, http4sClientMonixCatnap, http4sServer, http4sServerBlaze, @@ -241,6 +242,14 @@ lazy val http4sClientBlazePureConfig = project .settings(BuildSettings.common) .settings(name := "sst-http4s-client-blaze-pureconfig") +lazy val http4sClientJdk = project + .in(file("http4s-client-jdk")) + .settings(BuildSettings.common) + .settings( + name := "sst-http4s-client-jdk", + libraryDependencies += Dependencies.http4sJdkHttpClient + ) + lazy val http4sClientMonixCatnap = project .in(file("http4s-client-monix-catnap")) .dependsOn(monixCatnapMicrometer) diff --git a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala new file mode 100644 index 000000000..19e711d89 --- /dev/null +++ b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala @@ -0,0 +1,3 @@ +package com.avast.sst.http4s.client + +final case class Http4sJdkClientConfig() diff --git a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala new file mode 100644 index 000000000..c77e002e3 --- /dev/null +++ b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala @@ -0,0 +1,28 @@ +package com.avast.sst.http4s.client + +import cats.effect.{ConcurrentEffect, Resource} +import javax.net.ssl.SSLContext +import org.http4s.client.Client + +import scala.concurrent.ExecutionContext +import org.http4s.client.jdkhttpclient.JdkHttpClient +import cats.effect.ContextShift +import java.net.http.HttpClient + +object Http4sJdkClientModule { + + /** Makes [[org.http4s.client.Client]] (Blaze) initialized with the given config. + * + * @param executionContext callback handling [[scala.concurrent.ExecutionContext]] + */ + def make[F[_]: ConcurrentEffect: ContextShift]( + config: Http4sJdkClientConfig, + executionContext: ExecutionContext, + sslContext: Option[SSLContext] = None + ): Resource[F, Client[F]] = { + HttpClient.newBuilder() + JdkHttpClient(???) + ??? + } + +} diff --git a/project/Dependencies.scala b/project/Dependencies.scala index d62fa1176..2ee3c6c19 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,6 +15,7 @@ object Dependencies { val http4sBlazeServer = "org.http4s" %% "http4s-blaze-server" % Versions.http4s val http4sClient = "org.http4s" %% "http4s-client" % Versions.http4s val http4sDsl = "org.http4s" %% "http4s-dsl" % Versions.http4s + val http4sJdkHttpClient = "org.http4s" %% "http4s-jdk-http-client" % "0.3.1" val http4sServer = "org.http4s" %% "http4s-server" % Versions.http4s val jacksonDatabind = "com.fasterxml.jackson.core" % "jackson-databind" % "2.12.1" val jsr305 = "com.google.code.findbugs" % "jsr305" % "3.0.2" From f4a41902a410b0e4d23f734120f9673093079483 Mon Sep 17 00:00:00 2001 From: Janecek Jakub Date: Sun, 28 Feb 2021 19:34:38 +0100 Subject: [PATCH 3/5] feat: Add jdk-http-client and jdk-http-client-pureconfig subprojects build: Switch to JDK 11 for building but set target version to JDK 1.8 --- .github/workflows/build.yml | 4 +-- .github/workflows/pull.yml | 4 +-- .github/workflows/release.yml | 4 +-- build.sbt | 27 ++++++++++----- .../http4s/client/Http4sJdkClientConfig.scala | 3 -- .../http4s/client/Http4sJdkClientModule.scala | 28 --------------- .../httpclient/pureconfig/ConfigReaders.scala | 30 ++++++++++++++++ .../jdk/httpclient/pureconfig/implicits.scala | 20 +++++++++++ .../jdk/httpclient/JdkHttpClientConfig.scala | 11 ++++++ .../jdk/httpclient/JdkHttpClientModule.scala | 34 +++++++++++++++++++ project/BuildSettings.scala | 2 +- project/Dependencies.scala | 1 - 12 files changed, 120 insertions(+), 48 deletions(-) delete mode 100644 http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala delete mode 100644 http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala create mode 100644 jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala create mode 100644 jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/implicits.scala create mode 100644 jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientConfig.scala create mode 100644 jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1a99af042..f0b61ea22 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,10 +9,10 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - - name: Set up JDK 1.8 + - name: Set up JDK 11 uses: actions/setup-java@v1 with: - java-version: 1.8 + java-version: 11 - uses: coursier/cache-action@v5 with: extraKey: ${{ secrets.BUILD_CACHE_VERSION }} diff --git a/.github/workflows/pull.yml b/.github/workflows/pull.yml index b4e2f93d1..de567356e 100644 --- a/.github/workflows/pull.yml +++ b/.github/workflows/pull.yml @@ -6,10 +6,10 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - - name: Set up JDK 1.8 + - name: Set up JDK 11 uses: actions/setup-java@v1 with: - java-version: 1.8 + java-version: 11 - uses: coursier/cache-action@v5 with: extraKey: pr-${GITHUB_HEAD_REF} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 72e602d49..b2d6bde42 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,10 +8,10 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - - name: Set up JDK 1.8 + - name: Set up JDK 11 uses: actions/setup-java@v1 with: - java-version: 1.8 + java-version: 11 - uses: coursier/cache-action@v5 - name: Check/Compile/Test run: sbt check diff --git a/build.sbt b/build.sbt index e5bf399f6..6872675f4 100644 --- a/build.sbt +++ b/build.sbt @@ -18,12 +18,13 @@ lazy val root = project grpcServerPureConfig, http4sClientBlaze, http4sClientBlazePureConfig, - http4sClientJdk, http4sClientMonixCatnap, http4sServer, http4sServerBlaze, http4sServerBlazePureConfig, http4sServerMicrometer, + jdkHttpClient, + jdkHttpClientPureConfig, jvm, jvmMicrometer, jvmPureConfig, @@ -242,14 +243,6 @@ lazy val http4sClientBlazePureConfig = project .settings(BuildSettings.common) .settings(name := "sst-http4s-client-blaze-pureconfig") -lazy val http4sClientJdk = project - .in(file("http4s-client-jdk")) - .settings(BuildSettings.common) - .settings( - name := "sst-http4s-client-jdk", - libraryDependencies += Dependencies.http4sJdkHttpClient - ) - lazy val http4sClientMonixCatnap = project .in(file("http4s-client-monix-catnap")) .dependsOn(monixCatnapMicrometer) @@ -306,6 +299,22 @@ lazy val http4sServerMicrometer = project ) ) +lazy val jdkHttpClient = project + .in(file("jdk-http-client")) + .settings(BuildSettings.common) + .settings( + name := "sst-jdk-http-client" + ) + +lazy val jdkHttpClientPureConfig = project + .in(file("jdk-http-client-pureconfig")) + .dependsOn(jdkHttpClient) + .settings(BuildSettings.common) + .settings( + name := "sst-jdk-http-client-pureconfig", + libraryDependencies += Dependencies.pureConfig + ) + lazy val jvm = project .in(file("jvm")) .settings(BuildSettings.common) diff --git a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala deleted file mode 100644 index 19e711d89..000000000 --- a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientConfig.scala +++ /dev/null @@ -1,3 +0,0 @@ -package com.avast.sst.http4s.client - -final case class Http4sJdkClientConfig() diff --git a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala b/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala deleted file mode 100644 index c77e002e3..000000000 --- a/http4s-client-jdk/src/main/scala/com/avast/sst/http4s/client/Http4sJdkClientModule.scala +++ /dev/null @@ -1,28 +0,0 @@ -package com.avast.sst.http4s.client - -import cats.effect.{ConcurrentEffect, Resource} -import javax.net.ssl.SSLContext -import org.http4s.client.Client - -import scala.concurrent.ExecutionContext -import org.http4s.client.jdkhttpclient.JdkHttpClient -import cats.effect.ContextShift -import java.net.http.HttpClient - -object Http4sJdkClientModule { - - /** Makes [[org.http4s.client.Client]] (Blaze) initialized with the given config. - * - * @param executionContext callback handling [[scala.concurrent.ExecutionContext]] - */ - def make[F[_]: ConcurrentEffect: ContextShift]( - config: Http4sJdkClientConfig, - executionContext: ExecutionContext, - sslContext: Option[SSLContext] = None - ): Resource[F, Client[F]] = { - HttpClient.newBuilder() - JdkHttpClient(???) - ??? - } - -} diff --git a/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala b/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala new file mode 100644 index 000000000..37b2b7e71 --- /dev/null +++ b/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala @@ -0,0 +1,30 @@ +package com.avast.sst.jdk.httpclient.pureconfig + +import com.avast.sst.jdk.httpclient.JdkHttpClientConfig +import pureconfig.ConfigReader +import pureconfig.error.CannotConvert +import pureconfig.generic.ProductHint +import pureconfig.generic.semiauto.deriveReader + +import java.net.http.HttpClient + +trait ConfigReaders { + + implicit protected def hint[T]: ProductHint[T] = ProductHint.default + + implicit val jdkHttpClientVersionConfigReader: ConfigReader[HttpClient.Version] = ConfigReader.stringConfigReader.emap { + case "HTTP_1_1" => Right(HttpClient.Version.HTTP_1_1) + case "HTTP_2" => Right(HttpClient.Version.HTTP_2) + case value => Left(CannotConvert(value, "java.net.http.HttpClient.Version", "")) + } + + implicit val jdkHttpClientRedirectConfigReader: ConfigReader[HttpClient.Redirect] = ConfigReader.stringConfigReader.emap { + case "NEVER" => Right(HttpClient.Redirect.NEVER) + case "ALWAYS" => Right(HttpClient.Redirect.ALWAYS) + case "NORMAL" => Right(HttpClient.Redirect.NORMAL) + case value => Left(CannotConvert(value, "java.net.http.HttpClient.Redirect", "")) + } + + implicit val jdkHttpClientConfigReader: ConfigReader[JdkHttpClientConfig] = deriveReader + +} diff --git a/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/implicits.scala b/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/implicits.scala new file mode 100644 index 000000000..b9b036561 --- /dev/null +++ b/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/implicits.scala @@ -0,0 +1,20 @@ +package com.avast.sst.jdk.httpclient.pureconfig + +import pureconfig.ConfigFieldMapping +import pureconfig.generic.ProductHint + +/** Contains [[pureconfig.ConfigReader]] instances with default "kebab-case" naming convention. */ +object implicits extends ConfigReaders { + + /** Contains [[pureconfig.ConfigReader]] instances with "kebab-case" naming convention. + * + * This is alias for the default `implicits._` import. + */ + object KebabCase extends ConfigReaders + + /** Contains [[pureconfig.ConfigReader]] instances with "camelCase" naming convention. */ + object CamelCase extends ConfigReaders { + implicit override protected def hint[T]: ProductHint[T] = ProductHint(ConfigFieldMapping(pureconfig.CamelCase, pureconfig.CamelCase)) + } + +} diff --git a/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientConfig.scala b/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientConfig.scala new file mode 100644 index 000000000..a6b2f9442 --- /dev/null +++ b/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientConfig.scala @@ -0,0 +1,11 @@ +package com.avast.sst.jdk.httpclient + +import java.net.http.HttpClient +import scala.concurrent.duration.FiniteDuration + +final case class JdkHttpClientConfig( + connectTimeout: Option[FiniteDuration] = None, + followRedirects: Option[HttpClient.Redirect] = None, + version: Option[HttpClient.Version] = None, + priority: Option[Int] = None +) diff --git a/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala b/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala new file mode 100644 index 000000000..abc7ea61e --- /dev/null +++ b/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala @@ -0,0 +1,34 @@ +package com.avast.sst.jdk.httpclient + +import java.net.http.HttpClient +import java.net.{Authenticator, CookieHandler, ProxySelector} +import java.util.concurrent.Executor +import javax.net.ssl.SSLContext +import scala.jdk.DurationConverters._ + +object JdkHttpClientModule { + + /** Makes [[java.net.http.HttpClient]] initialized with the given config. */ + def make( + config: JdkHttpClientConfig, + executor: Option[Executor] = None, + sslContext: Option[SSLContext] = None, + cookieHandler: Option[CookieHandler] = None, + proxySelector: Option[ProxySelector] = None, + authenticator: Option[Authenticator] = None + ): HttpClient = { + val builder = HttpClient.newBuilder() + + config.connectTimeout.map(_.toJava).foreach(builder.connectTimeout) + executor.foreach(builder.executor) + sslContext.foreach(builder.sslContext) + config.followRedirects.foreach(builder.followRedirects) + config.priority.foreach(builder.priority) + cookieHandler.foreach(builder.cookieHandler) + proxySelector.foreach(builder.proxy) + authenticator.foreach(builder.authenticator) + + builder.build() + } + +} diff --git a/project/BuildSettings.scala b/project/BuildSettings.scala index a2c4879ee..8e8669598 100644 --- a/project/BuildSettings.scala +++ b/project/BuildSettings.scala @@ -1,5 +1,4 @@ import com.typesafe.sbt.site.SitePlugin.autoImport._ -import com.typesafe.tools.mima.plugin.MimaKeys._ import mdoc.MdocPlugin.autoImport._ import microsites.CdnDirectives import microsites.MicrositesPlugin.autoImport._ @@ -45,6 +44,7 @@ object BuildSettings { "-Ywarn-unused", // necessary for Scalafix RemoveUnused rule (not present in sbt-tpolecat for 2.13) "-P:silencer:checkUnused" ), + javacOptions ++= Seq("-source", "1.8", "-target", "1.8"), Test / publishArtifact := false ) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 2ee3c6c19..d62fa1176 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,6 @@ object Dependencies { val http4sBlazeServer = "org.http4s" %% "http4s-blaze-server" % Versions.http4s val http4sClient = "org.http4s" %% "http4s-client" % Versions.http4s val http4sDsl = "org.http4s" %% "http4s-dsl" % Versions.http4s - val http4sJdkHttpClient = "org.http4s" %% "http4s-jdk-http-client" % "0.3.1" val http4sServer = "org.http4s" %% "http4s-server" % Versions.http4s val jacksonDatabind = "com.fasterxml.jackson.core" % "jackson-databind" % "2.12.1" val jsr305 = "com.google.code.findbugs" % "jsr305" % "3.0.2" From 74ad277fe41ba0357a457fde0cf7d8758a9c9d5c Mon Sep 17 00:00:00 2001 From: Janecek Jakub Date: Sun, 28 Feb 2021 20:23:52 +0100 Subject: [PATCH 4/5] fix: DurationConverters are not available in compat library --- .../com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala b/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala index abc7ea61e..346f183f5 100644 --- a/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala +++ b/jdk-http-client/src/main/scala/com/avast/sst/jdk/httpclient/JdkHttpClientModule.scala @@ -2,9 +2,9 @@ package com.avast.sst.jdk.httpclient import java.net.http.HttpClient import java.net.{Authenticator, CookieHandler, ProxySelector} +import java.time.{Duration => JDuration} import java.util.concurrent.Executor import javax.net.ssl.SSLContext -import scala.jdk.DurationConverters._ object JdkHttpClientModule { @@ -19,7 +19,7 @@ object JdkHttpClientModule { ): HttpClient = { val builder = HttpClient.newBuilder() - config.connectTimeout.map(_.toJava).foreach(builder.connectTimeout) + config.connectTimeout.map(d => JDuration.ofNanos(d.toNanos)).foreach(builder.connectTimeout) executor.foreach(builder.executor) sslContext.foreach(builder.sslContext) config.followRedirects.foreach(builder.followRedirects) From aa2d4274e1ef191b549bb0c1a9769c423de37fe9 Mon Sep 17 00:00:00 2001 From: Janecek Jakub Date: Mon, 1 Mar 2021 09:52:29 +0100 Subject: [PATCH 5/5] refactor: Simplify by automatic Java enum derivation --- .../httpclient/pureconfig/ConfigReaders.scala | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala b/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala index 37b2b7e71..a029c47ef 100644 --- a/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala +++ b/jdk-http-client-pureconfig/src/main/scala/com/avast/sst/jdk/httpclient/pureconfig/ConfigReaders.scala @@ -2,29 +2,13 @@ package com.avast.sst.jdk.httpclient.pureconfig import com.avast.sst.jdk.httpclient.JdkHttpClientConfig import pureconfig.ConfigReader -import pureconfig.error.CannotConvert import pureconfig.generic.ProductHint import pureconfig.generic.semiauto.deriveReader -import java.net.http.HttpClient - trait ConfigReaders { implicit protected def hint[T]: ProductHint[T] = ProductHint.default - implicit val jdkHttpClientVersionConfigReader: ConfigReader[HttpClient.Version] = ConfigReader.stringConfigReader.emap { - case "HTTP_1_1" => Right(HttpClient.Version.HTTP_1_1) - case "HTTP_2" => Right(HttpClient.Version.HTTP_2) - case value => Left(CannotConvert(value, "java.net.http.HttpClient.Version", "")) - } - - implicit val jdkHttpClientRedirectConfigReader: ConfigReader[HttpClient.Redirect] = ConfigReader.stringConfigReader.emap { - case "NEVER" => Right(HttpClient.Redirect.NEVER) - case "ALWAYS" => Right(HttpClient.Redirect.ALWAYS) - case "NORMAL" => Right(HttpClient.Redirect.NORMAL) - case value => Left(CannotConvert(value, "java.net.http.HttpClient.Redirect", "")) - } - implicit val jdkHttpClientConfigReader: ConfigReader[JdkHttpClientConfig] = deriveReader }