Scalars

As defined by specification, scalar represents a primitive value in GraphQL. In KGraphQL, besides built-in scalar types, client code can declare custom scalar type, which can coerce to String, Boolean, Int, Long or Float (kotlin.Double).

KGraphQL provides a group of DSL methods to define scalars:

  • stringScalar { }
  • booleanScalar { }
  • intScalar { }
  • longScalar { }
  • floatScalar { }

They differ only by the Kotlin primitive type they coerce to.

Every scalar has to define its coercion functions deserialize and serialize, or a coercion object that implements the correct subtype of com.apurebase.kgraphql.schema.scalar.ScalarCoercion:

stringScalar<UUID> {
  deserialize = { uuid: String -> UUID.fromString(uuid) }
  serialize = UUID::toString
}
stringScalar<UUID> {
  coercion = object : StringScalarCoercion<UUID> {
    override fun serialize(instance: UUID): String = instance.toString()
    override fun deserialize(raw: String, valueNode: ValueNode?): UUID = UUID.fromString(raw)
  }
}

In addition to the built-in scalars, KGraphQL provides support for Long and Short which can be added to a schema using extendedScalars().

val schema = KGraphQL.schema {
    extendedScalars()

    query("getLong") {
        resolver { -> 3L }
    }
}