Skip to content

Commit 2789980

Browse files
committed
migrated to sttp4
1 parent 5953581 commit 2789980

15 files changed

+48
-50
lines changed

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Every response is automatically cached in memory, making all subsequent requests
3535

3636
```scala
3737
import io.github.juliano.pokeapi.requests.BerryRequest
38-
import sttp.client3.{ HttpClientSyncBackend, Identity, SttpBackend }
38+
import sttp.client4.{ HttpClientSyncBackend, Identity, SttpBackend }
3939

4040
given backend: SttpBackend[Identity, Any] = HttpClientSyncBackend()
4141
val client = PokeApiClient()
@@ -48,7 +48,7 @@ println(berry.name)
4848

4949
```scala
5050
import io.github.juliano.pokeapi.requests.MoveRequest
51-
import sttp.client3.{ SttpBackend, TryHttpURLConnectionBackend }
51+
import sttp.client4.{ SttpBackend, TryHttpURLConnectionBackend }
5252
import scala.util.*
5353

5454
given backend: SttpBackend[Try, Any] = TryHttpURLConnectionBackend()
@@ -65,7 +65,7 @@ client.send(MoveRequest("pound")) match {
6565
```scala
6666
import io.github.juliano.pokeapi.requests.ContestTypeRequest
6767
import sttp.capabilities.WebSockets
68-
import sttp.client3.{ HttpClientFutureBackend, SttpBackend }
68+
import sttp.client4.{ HttpClientFutureBackend, SttpBackend }
6969
import scala.concurrent.ExecutionContext.Implicits.global
7070
import scala.concurrent.Future
7171
import scala.util.*
@@ -83,7 +83,7 @@ client.send(ContestTypeRequest(1)).onComplete {
8383

8484
```scala
8585
import io.github.juliano.pokeapi.requests.PokemonRequest
86-
import sttp.client3.asynchttpclient.zio.AsyncHttpClientZioBackend
86+
import sttp.client4.asynchttpclient.zio.AsyncHttpClientZioBackend
8787
import zio.{ Runtime, Unsafe, ZIO }
8888

8989
val client = AsyncHttpClientZioBackend().map(implicit backend => PokeApiClient())
@@ -101,7 +101,7 @@ print(pokemon.id)
101101
import cats.effect.IO
102102
import cats.effect.unsafe.implicits.global
103103
import io.github.juliano.pokeapi.requests.LocationRequest
104-
import sttp.client3.asynchttpclient.cats.AsyncHttpClientCatsBackend
104+
import sttp.client4.asynchttpclient.cats.AsyncHttpClientCatsBackend
105105

106106
val client = AsyncHttpClientCatsBackend[IO]().map(implicit backend => PokeApiClient())
107107

build.sbt

+11-11
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,19 @@ lazy val pokeapi = project
3131
scalafmtOnCompile := true,
3232
scalacOptions := Seq("-Xmax-inlines", "64"),
3333
libraryDependencies ++= Seq(
34-
"com.softwaremill.sttp.client3" %% "core" % "3.9.3",
35-
"com.softwaremill.sttp.client3" %% "zio-json" % "3.9.3",
34+
"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M16",
35+
"com.softwaremill.sttp.client4" %% "zio-json" % "4.0.0-M16",
3636
"com.github.blemale" %% "scaffeine" % "5.3.0",
3737
"org.scalameta" %% "munit" % "1.0.0" % Test,
38-
"com.softwaremill.sttp.client3" %% "armeria-backend-cats" % "3.9.3" % Test,
39-
"com.softwaremill.sttp.client3" %% "async-http-client-backend-cats" % "3.9.3" % Test,
40-
"com.softwaremill.sttp.client3" %% "fs2" % "3.9.3" % Test,
41-
"com.softwaremill.sttp.client3" %% "async-http-client-backend-fs2" % "3.9.3" % Test,
42-
"com.softwaremill.sttp.client3" %% "zio" % "3.9.3" % Test,
43-
"com.softwaremill.sttp.client3" %% "async-http-client-backend-zio" % "3.9.3" % Test,
44-
"com.softwaremill.sttp.client3" %% "armeria-backend-zio" % "3.9.3" % Test,
45-
"com.softwaremill.sttp.client3" %% "armeria-backend" % "3.9.3" % Test,
46-
"com.softwaremill.sttp.client3" %% "okhttp-backend" % "3.9.3" % Test
38+
"com.softwaremill.sttp.client4" %% "armeria-backend-cats" % "4.0.0-M16" % Test,
39+
"com.softwaremill.sttp.client4" %% "async-http-client-backend-cats" % "4.0.0-M16" % Test,
40+
"com.softwaremill.sttp.client4" %% "fs2" % "4.0.0-M16" % Test,
41+
"com.softwaremill.sttp.client4" %% "async-http-client-backend-fs2" % "4.0.0-M16" % Test,
42+
"com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M16" % Test,
43+
"com.softwaremill.sttp.client4" %% "async-http-client-backend-zio" % "4.0.0-M16" % Test,
44+
"com.softwaremill.sttp.client4" %% "armeria-backend-zio" % "4.0.0-M16" % Test,
45+
"com.softwaremill.sttp.client4" %% "armeria-backend" % "4.0.0-M16" % Test,
46+
"com.softwaremill.sttp.client4" %% "okhttp-backend" % "4.0.0-M16" % Test
4747
),
4848
excludeDependencies ++= Seq(
4949
"org.scala-lang.modules" % "scala-collection-compat_2.13"

src/main/scala/io/github/juliano/pokeapi/PokeApiClient.scala

+5-7
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,17 @@ package io.github.juliano.pokeapi
22

33
import com.github.blemale.scaffeine.{ Cache, Scaffeine }
44
import io.github.juliano.pokeapi.PokeApiClient.*
5-
import sttp.client3.*
6-
import sttp.client3.ziojson.asJson
5+
import sttp.client4.*
6+
import sttp.client4.ziojson.asJson
77
import sttp.model.{ MediaType, Uri }
88
import sttp.monad.MonadError
99
import sttp.monad.syntax.MonadErrorOps
1010
import zio.json.JsonDecoder
1111

1212
import scala.concurrent.duration.DurationInt
1313

14-
case class PokeApiClient[F[_], +P](host: ApiHost = ApiHost.default)(using
15-
backend: SttpBackend[F, P]
16-
):
17-
given monadError: MonadError[F] = backend.responseMonad
14+
case class PokeApiClient[F[_]](host: ApiHost = ApiHost.default)(using backend: Backend[F]):
15+
given monadError: MonadError[F] = backend.monad
1816
private val cache: Cache[String, Product] = Scaffeine().build[String, Product]()
1917

2018
def send[A](request: PokeRequest[A])(using JsonDecoder[A]): F[A] =
@@ -39,7 +37,7 @@ case class PokeApiClient[F[_], +P](host: ApiHost = ApiHost.default)(using
3937

4038
object PokeApiClient:
4139
type FailureResponse = ResponseException[String, String]
42-
type SttpRequest[A] = Request[Either[FailureResponse, A], Any]
40+
type SttpRequest[A] = Request[Either[FailureResponse, A]]
4341

4442
trait PokeRequest[A](id: String | Long):
4543
val resource: String

src/test/scala/io/github/juliano/pokeapi/BerriesSuite.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package io.github.juliano.pokeapi
22

33
import io.github.juliano.pokeapi.requests.*
4-
import sttp.client3.{ HttpClientSyncBackend, Identity, SttpBackend }
4+
import sttp.client4.httpclient.HttpClientSyncBackend
5+
import sttp.client4.SyncBackend
56

67
class BerriesSuite extends munit.FunSuite:
7-
given backend: SttpBackend[Identity, Any] = HttpClientSyncBackend()
8+
given backend: SyncBackend = HttpClientSyncBackend()
89
val client = PokeApiClient()
910

1011
test("berry by id") {

src/test/scala/io/github/juliano/pokeapi/ContestsSuite.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ package io.github.juliano.pokeapi
22

33
import io.github.juliano.pokeapi.requests.*
44
import sttp.capabilities.WebSockets
5-
import sttp.client3.{ HttpClientFutureBackend, SttpBackend }
5+
import sttp.client4.Backend
6+
import sttp.client4.httpclient.HttpClientFutureBackend
67

78
import scala.concurrent.Future
89

910
class ContestsSuite extends FutureSuite:
10-
given backend: SttpBackend[Future, WebSockets] = HttpClientFutureBackend()
11+
given backend: Backend[Future] = HttpClientFutureBackend()
1112
val client = PokeApiClient()
1213

1314
spec("contest type by id", ContestTypeRequest(1), _.name == "cool")

src/test/scala/io/github/juliano/pokeapi/EncountersSuite.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ package io.github.juliano.pokeapi
33
import cats.effect.IO
44
import cats.effect.unsafe.implicits.global
55
import io.github.juliano.pokeapi.requests.*
6-
import sttp.client3.SttpBackend
7-
import sttp.client3.armeria.cats.ArmeriaCatsBackend
6+
import sttp.client4.Backend
7+
import sttp.client4.armeria.cats.ArmeriaCatsBackend
88

99
class EncountersSuite extends munit.FunSuite:
10-
given backend: SttpBackend[IO, Any] = ArmeriaCatsBackend[IO]()
11-
val client: PokeApiClient[IO, Any] = PokeApiClient()
10+
given backend: Backend[IO] = ArmeriaCatsBackend[IO]()
11+
val client: PokeApiClient[IO] = PokeApiClient()
1212

1313
test("enconter method by id") {
1414
val encounterMethod = client.send(EncounterMethodRequest(1)).unsafeRunSync()

src/test/scala/io/github/juliano/pokeapi/EvolutionSuite.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.github.juliano.pokeapi
22

33
import cats.effect.IO
44
import io.github.juliano.pokeapi.requests.{ EvolutionChainRequest, EvolutionTriggerRequest }
5-
import sttp.client3.asynchttpclient.fs2.AsyncHttpClientFs2Backend
5+
import sttp.client4.asynchttpclient.fs2.AsyncHttpClientFs2Backend
66

77
class EvolutionSuite extends Fs2Suite:
88
val client = AsyncHttpClientFs2Backend.resource[IO]().map(implicit backend => PokeApiClient())

src/test/scala/io/github/juliano/pokeapi/GamesSuite.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.github.juliano.pokeapi
22

33
import cats.effect.IO
44
import io.github.juliano.pokeapi.requests.*
5-
import sttp.client3.httpclient.fs2.HttpClientFs2Backend
5+
import sttp.client4.httpclient.fs2.HttpClientFs2Backend
66

77
class GamesSuite extends Fs2Suite:
88
val client = HttpClientFs2Backend.resource[IO]().map(implicit backend => PokeApiClient())

src/test/scala/io/github/juliano/pokeapi/ItemsSuite.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.juliano.pokeapi;
22

33
import io.github.juliano.pokeapi.requests.*
4-
import sttp.client3.httpclient.zio.HttpClientZioBackend
4+
import sttp.client4.httpclient.zio.HttpClientZioBackend
55

66
class ItemsSuite extends ZIOSuite:
77
val client = HttpClientZioBackend().map(implicit backend => PokeApiClient())

src/test/scala/io/github/juliano/pokeapi/LocationsSuite.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.github.juliano.pokeapi
22

33
import cats.effect.IO
44
import io.github.juliano.pokeapi.requests.*
5-
import sttp.client3.asynchttpclient.cats.AsyncHttpClientCatsBackend
5+
import sttp.client4.asynchttpclient.cats.AsyncHttpClientCatsBackend
66

77
class LocationsSuite extends CatsSuite:
88
val client = AsyncHttpClientCatsBackend[IO]().map(implicit backend => PokeApiClient())

src/test/scala/io/github/juliano/pokeapi/MachinesSuite.scala

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package io.github.juliano.pokeapi
22

33
import io.github.juliano.pokeapi.requests.MachineRequest
4-
import sttp.capabilities.WebSockets
5-
import sttp.client3.{ Identity, SttpBackend }
6-
import sttp.client3.okhttp.OkHttpSyncBackend
4+
import sttp.client4.SyncBackend
5+
import sttp.client4.okhttp.OkHttpSyncBackend
76

87
class MachinesSuite extends munit.FunSuite:
9-
given backend: SttpBackend[Identity, WebSockets] = OkHttpSyncBackend()
8+
given backend: SyncBackend = OkHttpSyncBackend()
109
val client = PokeApiClient()
1110

1211
test("machine by id") {

src/test/scala/io/github/juliano/pokeapi/MovesSuite.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package io.github.juliano.pokeapi
22

33
import io.github.juliano.pokeapi.requests.*
4-
import sttp.client3.{ SttpBackend, TryHttpURLConnectionBackend }
4+
import sttp.client4.{ Backend, DefaultSyncBackend }
5+
import sttp.client4.wrappers.TryBackend
56

67
import scala.util.Try
78

89
class MovesSuite extends TrySuite:
9-
given backend: SttpBackend[Try, Any] = TryHttpURLConnectionBackend()
10+
given backend: Backend[Try] = TryBackend(DefaultSyncBackend())
1011
val client = PokeApiClient()
1112

1213
spec("move by id", MoveRequest(1), _.name == "pound")

src/test/scala/io/github/juliano/pokeapi/PokemonSuite.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.juliano.pokeapi
22

33
import io.github.juliano.pokeapi.requests.*
4-
import sttp.client3.asynchttpclient.zio.AsyncHttpClientZioBackend
4+
import sttp.client4.asynchttpclient.zio.AsyncHttpClientZioBackend
55

66
class PokemonSuite extends ZIOSuite:
77
val client = AsyncHttpClientZioBackend().map(implicit backend => PokeApiClient())

src/test/scala/io/github/juliano/pokeapi/UtilitySuite.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.juliano.pokeapi
22

33
import io.github.juliano.pokeapi.requests.LanguageRequest
4-
import sttp.client3.armeria.zio.ArmeriaZioBackend
4+
import sttp.client4.armeria.zio.ArmeriaZioBackend
55

66
class UtilitySuite extends ZIOSuite:
77
val client = ArmeriaZioBackend().map(implicit backend => PokeApiClient())

src/test/scala/io/github/juliano/pokeapi/package.scala

+5-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package object pokeapi:
77
trait ZIOSuite extends munit.FunSuite:
88
import zio.{ Runtime, Unsafe, ZIO }
99

10-
val client: ZIO[Any, Throwable, PokeApiClient[[A] =>> zio.ZIO[Any, Throwable, A], ?]]
10+
val client: ZIO[Any, Throwable, PokeApiClient[[A] =>> ZIO[Any, Throwable, A]]]
1111

1212
def spec[T](label: String, request: PokeRequest[T], f: T => Boolean)(using
1313
JsonDecoder[T]
@@ -23,7 +23,7 @@ package object pokeapi:
2323
import cats.effect.IO
2424
import cats.effect.unsafe.implicits.global
2525

26-
val client: IO[PokeApiClient[IO, Any]]
26+
val client: IO[PokeApiClient[IO]]
2727

2828
def spec[T](label: String, request: PokeRequest[T], f: T => Boolean)(using
2929
JsonDecoder[T]
@@ -35,7 +35,7 @@ package object pokeapi:
3535
trait TrySuite extends munit.FunSuite:
3636
import scala.util.{ Failure, Success, Try }
3737

38-
val client: PokeApiClient[Try, Any]
38+
val client: PokeApiClient[Try]
3939

4040
def spec[T](label: String, request: PokeRequest[T], f: T => Boolean)(using
4141
JsonDecoder[T]
@@ -51,7 +51,7 @@ package object pokeapi:
5151
import scala.concurrent.Future
5252
import scala.util.{ Failure, Success }
5353

54-
val client: PokeApiClient[Future, Any]
54+
val client: PokeApiClient[Future]
5555

5656
def spec[T](label: String, request: PokeRequest[T], f: T => Boolean)(using
5757
JsonDecoder[T]
@@ -66,10 +66,8 @@ package object pokeapi:
6666
import cats.effect.IO
6767
import cats.effect.kernel.Resource
6868
import cats.effect.unsafe.implicits.global
69-
import sttp.capabilities.WebSockets
70-
import sttp.capabilities.fs2.Fs2Streams
7169

72-
val client: Resource[IO, PokeApiClient[IO, Fs2Streams[cats.effect.IO] & WebSockets]]
70+
val client: Resource[IO, PokeApiClient[IO]]
7371

7472
def spec[T](label: String, request: PokeRequest[T], f: T => Boolean)(using
7573
JsonDecoder[T]

0 commit comments

Comments
 (0)