I cannot build a query generated by Android Apollo library.
I have the following .gpaphql file:
mutation LogIn($username: String!, $password: String!) {
tokenAuth(username: $username, password: $password) {
token
}
}
It generated a Kotlin request file for this:
// AUTO-GENERATED FILE. DO NOT MODIFY.
//
// This class was automatically generated by Apollo GraphQL plugin from the GraphQL queries it found.
// It should not be modified by hand.
//
import com.apollographql.apollo.api.InputFieldMarshaller
import com.apollographql.apollo.api.Mutation
import com.apollographql.apollo.api.Operation
import com.apollographql.apollo.api.OperationName
import com.apollographql.apollo.api.Response
import com.apollographql.apollo.api.ResponseField
import com.apollographql.apollo.api.ResponseFieldMapper
import com.apollographql.apollo.api.ResponseFieldMarshaller
import com.apollographql.apollo.api.ResponseReader
import com.apollographql.apollo.api.internal.SimpleOperationResponseParser
import com.apollographql.apollo.internal.QueryDocumentMinifier
import com.apollographql.apollo.response.ScalarTypeAdapters
import com.apollographql.apollo.response.ScalarTypeAdapters.DEFAULT
import java.io.IOException
import kotlin.Any
import kotlin.Array
import kotlin.String
import kotlin.Suppress
import kotlin.collections.Map
import kotlin.jvm.Throws
import kotlin.jvm.Transient
import okio.BufferedSource
@Suppress("NAME_SHADOWING", "UNUSED_ANONYMOUS_PARAMETER", "LocalVariableName",
"RemoveExplicitTypeArguments", "NestedLambdaShadowedImplicitParameter")
data class LogInMutation(
val username: String,
val password: String
) : Mutation<LogInMutation.Data, LogInMutation.Data, Operation.Variables> {
@Transient
private val variables: Operation.Variables = object : Operation.Variables() {
override fun valueMap(): Map<String, Any?> = mutableMapOf<String, Any?>().apply {
this["username"] = [email protected]
this["password"] = [email protected]
}
override fun marshaller(): InputFieldMarshaller = InputFieldMarshaller { writer ->
writer.writeString("username", [email protected])
writer.writeString("password", [email protected])
}
}
override fun operationId(): String = OPERATION_ID
override fun queryDocument(): String = QUERY_DOCUMENT
override fun wrapData(data: Data?): Data? = data
override fun variables(): Operation.Variables = variables
override fun name(): OperationName = OPERATION_NAME
override fun responseFieldMapper(): ResponseFieldMapper<Data> = ResponseFieldMapper {
Data(it)
}
@Throws(IOException::class)
override fun parse(source: BufferedSource, scalarTypeAdapters: ScalarTypeAdapters): Response<Data>
= SimpleOperationResponseParser.parse(source, this, scalarTypeAdapters)
@Throws(IOException::class)
override fun parse(source: BufferedSource): Response<Data> = parse(source, DEFAULT)
data class TokenAuth(
val __typename: String = "ObtainJSONWebToken",
val token: String?
) {
fun marshaller(): ResponseFieldMarshaller = ResponseFieldMarshaller { writer ->
writer.writeString(RESPONSE_FIELDS[0], this@TokenAuth.__typename)
writer.writeString(RESPONSE_FIELDS[1], [email protected])
}
companion object {
private val RESPONSE_FIELDS: Array<ResponseField> = arrayOf(
ResponseField.forString("__typename", "__typename", null, false, null),
ResponseField.forString("token", "token", null, true, null)
)
operator fun invoke(reader: ResponseReader): TokenAuth = reader.run {
val __typename = readString(RESPONSE_FIELDS[0])
val token = readString(RESPONSE_FIELDS[1])
TokenAuth(
__typename = __typename,
token = token
)
}
}
}
data class Data(
/**
* Obtain JSON Web Token mutation
*/
val tokenAuth: TokenAuth?
) : Operation.Data {
override fun marshaller(): ResponseFieldMarshaller = ResponseFieldMarshaller { writer ->
writer.writeObject(RESPONSE_FIELDS[0], [email protected]?.marshaller())
}
companion object {
private val RESPONSE_FIELDS: Array<ResponseField> = arrayOf(
ResponseField.forObject("tokenAuth", "tokenAuth", mapOf<String, Any>(
"username" to mapOf<String, Any>(
"kind" to "Variable",
"variableName" to "username"),
"password" to mapOf<String, Any>(
"kind" to "Variable",
"variableName" to "password")), true, null)
)
operator fun invoke(reader: ResponseReader): Data = reader.run {
val tokenAuth = readObject<TokenAuth>(RESPONSE_FIELDS[0]) { reader ->
TokenAuth(reader)
}
Data(
tokenAuth = tokenAuth
)
}
}
}
companion object {
const val OPERATION_ID: String =
"acc7a24c081a8c5ab67096b47de8c07e405411185c4016e47a75c0fdffe726e9"
val QUERY_DOCUMENT: String = QueryDocumentMinifier.minify(
"""
|mutation LogIn(${'$'}username: String!, ${'$'}password: String!) {
| tokenAuth(username: ${'$'}username, password: ${'$'}password) {
| __typename
| token
| }
|}
""".trimMargin()
)
val OPERATION_NAME: OperationName = OperationName { "LogIn" }
}
}
Generated LogInMutation class does not have .builder() method, it's a data class. How to create an instance of Query class from this request to be able to use it as parameter in ApolloClient.query() method?
You can directly use the constructor of the generated model like so: