mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 22:17:03 +05:30
refactor(di): workaround unstable IntoSet ordering
EitherNet's ApiResultConverterFactory needs to go before any other (de)serialization factories, but multibindings do not have ordering guarantees. To fix this, I've changed the module to handle the EitherNet configuration within api and let core continue supplying everything else.
This commit is contained in:
parent
8a4fee5f7c
commit
0bf60812e0
3 changed files with 5 additions and 22 deletions
|
@ -6,13 +6,14 @@
|
|||
*/
|
||||
package dev.msfjarvis.claw.api.injection
|
||||
|
||||
import com.slack.eithernet.ApiResultCallAdapterFactory
|
||||
import com.slack.eithernet.ApiResultConverterFactory
|
||||
import com.squareup.anvil.annotations.ContributesTo
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dev.msfjarvis.claw.api.LobstersApi
|
||||
import dev.msfjarvis.claw.injection.scopes.AppScope
|
||||
import okhttp3.OkHttpClient
|
||||
import retrofit2.CallAdapter
|
||||
import retrofit2.Converter
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.create
|
||||
|
@ -24,15 +25,13 @@ object ApiModule {
|
|||
fun provideRetrofit(
|
||||
client: OkHttpClient,
|
||||
converterFactories: Set<@JvmSuppressWildcards Converter.Factory>,
|
||||
callAdapterFactories: Set<@JvmSuppressWildcards CallAdapter.Factory>
|
||||
): Retrofit {
|
||||
return Retrofit.Builder()
|
||||
.client(client)
|
||||
.baseUrl(LobstersApi.BASE_URL)
|
||||
.apply {
|
||||
converterFactories.forEach(this::addConverterFactory)
|
||||
callAdapterFactories.forEach(this::addCallAdapterFactory)
|
||||
}
|
||||
.addConverterFactory(ApiResultConverterFactory)
|
||||
.addCallAdapterFactory(ApiResultCallAdapterFactory)
|
||||
.apply { converterFactories.forEach(this::addConverterFactory) }
|
||||
.build()
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,6 @@ dependencies {
|
|||
api(libs.okhttp.loggingInterceptor)
|
||||
implementation(projects.diScopes)
|
||||
implementation(libs.dagger)
|
||||
implementation(libs.eithernet)
|
||||
implementation(libs.javax.inject)
|
||||
implementation(libs.napier)
|
||||
implementation(libs.okhttp.core)
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
package dev.msfjarvis.claw.core.injection
|
||||
|
||||
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
||||
import com.slack.eithernet.ApiResultCallAdapterFactory
|
||||
import com.slack.eithernet.ApiResultConverterFactory
|
||||
import com.squareup.anvil.annotations.ContributesTo
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
@ -17,25 +15,12 @@ import dev.msfjarvis.claw.injection.scopes.AppScope
|
|||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.MediaType
|
||||
import retrofit2.CallAdapter
|
||||
import retrofit2.Converter
|
||||
|
||||
@Module
|
||||
@ContributesTo(AppScope::class)
|
||||
object RetrofitModule {
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideApiResultCallAdapterFactory(): CallAdapter.Factory {
|
||||
return ApiResultCallAdapterFactory
|
||||
}
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideApiResultConverterFactory(): Converter.Factory {
|
||||
return ApiResultConverterFactory
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@Provides
|
||||
@IntoSet
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue