11package graphql.kickstart.tools
22
3+ import graphql.language.Description
34import graphql.language.SchemaDefinition
45import graphql.language.TypeName
56
@@ -9,25 +10,29 @@ import graphql.language.TypeName
910internal class RootTypeInfo private constructor(
1011 private val queryType : TypeName ? ,
1112 private val mutationType : TypeName ? ,
12- private val subscriptionType : TypeName ?
13+ private val subscriptionType : TypeName ? ,
14+ private val description : Description ?
1315) {
1416 companion object {
1517 const val DEFAULT_QUERY_NAME = " Query"
1618 const val DEFAULT_MUTATION_NAME = " Mutation"
1719 const val DEFAULT_SUBSCRIPTION_NAME = " Subscription"
20+ val DEFAULT_DESCRIPTION : String? = null // According to the GraphQL Specification description should be a string or `null`
1821
1922 fun fromSchemaDefinitions (definitions : List <SchemaDefinition >): RootTypeInfo {
2023 val queryType = definitions.lastOrNull()?.operationTypeDefinitions?.find { it.name == " query" }?.typeName
2124 val mutationType = definitions.lastOrNull()?.operationTypeDefinitions?.find { it.name == " mutation" }?.typeName
2225 val subscriptionType = definitions.lastOrNull()?.operationTypeDefinitions?.find { it.name == " subscription" }?.typeName
26+ val description = definitions.lastOrNull()?.description
2327
24- return RootTypeInfo (queryType, mutationType, subscriptionType)
28+ return RootTypeInfo (queryType, mutationType, subscriptionType, description )
2529 }
2630 }
2731
2832 fun getQueryName () = queryType?.name ? : DEFAULT_QUERY_NAME
2933 fun getMutationName () = mutationType?.name ? : DEFAULT_MUTATION_NAME
3034 fun getSubscriptionName () = subscriptionType?.name ? : DEFAULT_SUBSCRIPTION_NAME
35+ fun getDescription () = description?.content ? : DEFAULT_DESCRIPTION
3136
3237 fun isMutationRequired () = mutationType != null
3338 fun isSubscriptionRequired () = subscriptionType != null
0 commit comments