
commonMain.com.apollographql.apollo.ApolloClient.kt Maven / Gradle / Ivy
package com.apollographql.apollo
import com.apollographql.apollo.api.ApolloExperimental
import com.apollographql.apollo.api.ExecutionContext
import com.apollographql.apollo.api.Mutation
import com.apollographql.apollo.api.Operation
import com.apollographql.apollo.api.Query
import com.apollographql.apollo.api.ScalarTypeAdapters
import com.apollographql.apollo.api.Subscription
import com.apollographql.apollo.dispatcher.ApolloCoroutineDispatcherContext
import com.apollographql.apollo.interceptor.ApolloRequestInterceptor
import com.apollographql.apollo.interceptor.NetworkRequestInterceptor
import com.apollographql.apollo.internal.RealApolloCall
import com.apollographql.apollo.network.NetworkTransport
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@ApolloExperimental
@ExperimentalCoroutinesApi
class ApolloClient(
private val networkTransport: NetworkTransport,
private val subscriptionNetworkTransport: NetworkTransport = networkTransport,
private val scalarTypeAdapters: ScalarTypeAdapters = ScalarTypeAdapters.DEFAULT,
private val interceptors: List = emptyList(),
private val executionContext: ExecutionContext = ExecutionContext.Empty
) {
private val coroutineDispatcherContext = executionContext[ApolloCoroutineDispatcherContext]
?: ApolloCoroutineDispatcherContext(Dispatchers.Default)
fun mutate(mutation: Mutation): ApolloMutationCall {
return mutation.prepareCall()
}
fun query(query: Query): ApolloQueryCall {
return query.prepareCall()
}
fun subscribe(query: Subscription): ApolloQueryCall {
return query.prepareCall()
}
private fun Operation.prepareCall(): RealApolloCall {
return RealApolloCall(
operation = this,
scalarTypeAdapters = scalarTypeAdapters,
interceptors = interceptors + NetworkRequestInterceptor(
networkTransport = networkTransport,
subscriptionNetworkTransport = subscriptionNetworkTransport
),
executionContext = executionContext + coroutineDispatcherContext
)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy