Jilles van Gurp
10/01/2021, 8:45 AM@Component
class FormationGraphqlHooks : SchemaGeneratorHooks {
override fun willGenerateGraphQLType(type: KType): GraphQLType? {
return when (type.classifier as? KClass<*>) {
Long::class -> longScalar
Double::class -> doubleScalar
else -> null
}
}
}
private val longScalar = GraphQLScalarType.newScalar().name("Long")
.coercing(object : Coercing<Long,Any> {
override fun serialize(dataFetcherResult: Any): Any {
return dataFetcherResult
}
override fun parseValue(input: Any): Long {
return input as Long
}
override fun parseLiteral(input: Any): Long {
return input as Long
}
}).build()
private val doubleScalar = GraphQLScalarType.newScalar().name("Double")
.coercing(object : Coercing<Double,Any> {
override fun serialize(dataFetcherResult: Any): Any {
return dataFetcherResult
}
override fun parseValue(input: Any): Double {
return input as Double
}
override fun parseLiteral(input: Any): Double {
return input as Double
}
}).build()
Jilles van Gurp
10/01/2021, 8:51 AMJilles van Gurp
10/01/2021, 8:53 AMrocketraman
10/02/2021, 1:37 AMFloat
as double-precision (https://spec.graphql.org/June2018/#sec-Float) and Int
as 32-bit values. Therefore, it makes sense to treat Int as a Java Int, but not sure why Float
is being treated as a Java Float
instead of Double
. Even the upstream graphql-java project correctly treats a GQL Float
as a `Double`: https://github.com/graphql-java/graphql-java/blob/master/src/main/java/graphql/Scalars.java#L34.Shane Myrick
10/02/2021, 2:27 AM