compose-lobsters/desktop/src/jvmMain/kotlin/Api.kt

37 lines
1.1 KiB
Kotlin

import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import dev.msfjarvis.claw.api.LobstersApi
import io.github.aakira.napier.Napier
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import okhttp3.MediaType
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.create
@OptIn(ExperimentalSerializationApi::class)
class Api {
private val json = Json { ignoreUnknownKeys = true }
private fun getOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder()
.addNetworkInterceptor { chain ->
val request = chain.request()
Napier.d(tag = "LobstersApi") { "${request.method()}: ${request.url()}" }
chain.proceed(request)
}
.build()
}
private fun getRetrofit(
okHttpClient: OkHttpClient,
): Retrofit {
val contentType = MediaType.get("application/json")
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(LobstersApi.BASE_URL)
.addConverterFactory(json.asConverterFactory(contentType))
.build()
}
val api: LobstersApi = getRetrofit(getOkHttpClient()).create()
}