Skip to content

Commit 2381ece

Browse files
authored
use CompletableFuture for java api instead of just Future (#136)
1 parent 5430a92 commit 2381ece

File tree

3 files changed

+140
-220
lines changed

3 files changed

+140
-220
lines changed

src/commonMain/kotlin/co/pokeapi/pokekotlin/PokeApi.kt

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3,65 +3,16 @@ package co.pokeapi.pokekotlin
33
import co.pokeapi.pokekotlin.internal.ResultConverter
44
import co.pokeapi.pokekotlin.internal.createPokeApiKtorfitBuilder
55
import co.pokeapi.pokekotlin.internal.getDefaultEngine
6-
import co.pokeapi.pokekotlin.model.Ability
7-
import co.pokeapi.pokekotlin.model.ApiResourceList
8-
import co.pokeapi.pokekotlin.model.Berry
9-
import co.pokeapi.pokekotlin.model.BerryFirmness
10-
import co.pokeapi.pokekotlin.model.BerryFlavor
11-
import co.pokeapi.pokekotlin.model.Characteristic
12-
import co.pokeapi.pokekotlin.model.ContestEffect
13-
import co.pokeapi.pokekotlin.model.ContestType
14-
import co.pokeapi.pokekotlin.model.EggGroup
15-
import co.pokeapi.pokekotlin.model.EncounterCondition
16-
import co.pokeapi.pokekotlin.model.EncounterConditionValue
17-
import co.pokeapi.pokekotlin.model.EncounterMethod
18-
import co.pokeapi.pokekotlin.model.EvolutionChain
19-
import co.pokeapi.pokekotlin.model.EvolutionTrigger
20-
import co.pokeapi.pokekotlin.model.Gender
21-
import co.pokeapi.pokekotlin.model.Generation
22-
import co.pokeapi.pokekotlin.model.GrowthRate
23-
import co.pokeapi.pokekotlin.model.Item
24-
import co.pokeapi.pokekotlin.model.ItemAttribute
25-
import co.pokeapi.pokekotlin.model.ItemCategory
26-
import co.pokeapi.pokekotlin.model.ItemFlingEffect
27-
import co.pokeapi.pokekotlin.model.ItemPocket
28-
import co.pokeapi.pokekotlin.model.Language
29-
import co.pokeapi.pokekotlin.model.Location
30-
import co.pokeapi.pokekotlin.model.LocationArea
31-
import co.pokeapi.pokekotlin.model.LocationAreaEncounter
32-
import co.pokeapi.pokekotlin.model.Machine
33-
import co.pokeapi.pokekotlin.model.Move
34-
import co.pokeapi.pokekotlin.model.MoveAilment
35-
import co.pokeapi.pokekotlin.model.MoveBattleStyle
36-
import co.pokeapi.pokekotlin.model.MoveCategory
37-
import co.pokeapi.pokekotlin.model.MoveDamageClass
38-
import co.pokeapi.pokekotlin.model.MoveLearnMethod
39-
import co.pokeapi.pokekotlin.model.MoveTarget
40-
import co.pokeapi.pokekotlin.model.NamedApiResourceList
41-
import co.pokeapi.pokekotlin.model.Nature
42-
import co.pokeapi.pokekotlin.model.PalParkArea
43-
import co.pokeapi.pokekotlin.model.PokeathlonStat
44-
import co.pokeapi.pokekotlin.model.Pokedex
45-
import co.pokeapi.pokekotlin.model.Pokemon
46-
import co.pokeapi.pokekotlin.model.PokemonColor
47-
import co.pokeapi.pokekotlin.model.PokemonForm
48-
import co.pokeapi.pokekotlin.model.PokemonHabitat
49-
import co.pokeapi.pokekotlin.model.PokemonShape
50-
import co.pokeapi.pokekotlin.model.PokemonSpecies
51-
import co.pokeapi.pokekotlin.model.Region
52-
import co.pokeapi.pokekotlin.model.Stat
53-
import co.pokeapi.pokekotlin.model.SuperContestEffect
54-
import co.pokeapi.pokekotlin.model.Type
55-
import co.pokeapi.pokekotlin.model.Version
56-
import co.pokeapi.pokekotlin.model.VersionGroup
6+
import co.pokeapi.pokekotlin.model.*
577
import de.jensklingenberg.ktorfit.http.GET
588
import de.jensklingenberg.ktorfit.http.Path
599
import de.jensklingenberg.ktorfit.http.Query
60-
import io.ktor.client.HttpClientConfig
61-
import io.ktor.client.engine.HttpClientEngine
62-
import io.ktor.client.plugins.cache.storage.CacheStorage
63-
import kotlin.Result
10+
import io.ktor.client.*
11+
import io.ktor.client.engine.*
12+
import io.ktor.client.plugins.cache.storage.*
13+
import kotlin.jvm.JvmName
6414

15+
@JvmName("create")
6516
public fun PokeApi(
6617
baseUrl: String = "https://pokeapi.co/api/v2/",
6718
cacheStorage: CacheStorage? = null,

src/jvmMain/kotlin/co/pokeapi/pokekotlin/internal/FutureConverter.kt renamed to src/jvmMain/kotlin/co/pokeapi/pokekotlin/internal/CompletableFutureConverter.kt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,20 @@ import de.jensklingenberg.ktorfit.Ktorfit
44
import de.jensklingenberg.ktorfit.converter.Converter
55
import de.jensklingenberg.ktorfit.converter.KtorfitResult
66
import de.jensklingenberg.ktorfit.converter.TypeData
7-
import io.ktor.client.statement.HttpResponse
8-
import java.util.concurrent.Future
7+
import io.ktor.client.statement.*
8+
import java.util.concurrent.CompletableFuture
9+
import kotlinx.coroutines.CoroutineScope
910
import kotlinx.coroutines.DelicateCoroutinesApi
10-
import kotlinx.coroutines.GlobalScope
1111
import kotlinx.coroutines.future.future
1212

13-
internal class FutureConverter(typeData: TypeData) :
14-
Converter.ResponseConverter<HttpResponse, Future<*>> {
13+
internal class CompletableFutureConverter(typeData: TypeData, private val scope: CoroutineScope) :
14+
Converter.ResponseConverter<HttpResponse, CompletableFuture<*>> {
1515

1616
private val resultConverter = ResultConverter(typeData)
1717

1818
@OptIn(DelicateCoroutinesApi::class)
19-
override fun convert(getResponse: suspend () -> HttpResponse): Future<*> {
20-
// safe to use GlobalScope as it'll be the Java code's responsibility to handle the future
21-
return GlobalScope.future {
19+
override fun convert(getResponse: suspend () -> HttpResponse): CompletableFuture<*> {
20+
return scope.future {
2221
val result =
2322
try {
2423
KtorfitResult.Success(getResponse())
@@ -29,9 +28,13 @@ internal class FutureConverter(typeData: TypeData) :
2928
}
3029
}
3130

32-
internal object Factory : Converter.Factory {
33-
override fun responseConverter(typeData: TypeData, ktorfit: Ktorfit): FutureConverter? {
34-
return if (typeData.typeInfo.type != Future::class) null else FutureConverter(typeData)
31+
internal class Factory(private val scope: CoroutineScope) : Converter.Factory {
32+
override fun responseConverter(
33+
typeData: TypeData,
34+
ktorfit: Ktorfit,
35+
): CompletableFutureConverter? {
36+
return if (typeData.typeInfo.type != CompletableFuture::class) null
37+
else CompletableFutureConverter(typeData, scope)
3538
}
3639
}
3740
}

0 commit comments

Comments
 (0)