All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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