Skip to content

Commit 23dcca0

Browse files
authored
Improve ApolloEnum kdoc and mark related symbols experimental (#6677)
1 parent 1fbd8eb commit 23dcca0

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

libraries/apollo-compiler/src/main/kotlin/com/apollographql/apollo/compiler/codegen/kotlin/schema/EnumAsApolloEnumSupportBuilder.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ internal class EnumAsApolloEnumSupportBuilder(
3838
fileName = simpleName,
3939
typeSpecs = listOf(
4040
TypeSpec.interfaceBuilder("ApolloEnum")
41+
.addAnnotation(KotlinSymbols.ApolloExperimental)
4142
.addTypeVariable(TypeVariableName("E"))
4243
.addTypeVariable(TypeVariableName("K", ClassName(packageName, "KnownEnum").parameterizedBy(TypeVariableName("E"))))
4344
.addProperty(PropertySpec.builder(rawValue, KotlinSymbols.String).build())
@@ -48,6 +49,7 @@ internal class EnumAsApolloEnumSupportBuilder(
4849
),
4950
funSpecs = listOf(
5051
FunSpec.builder("knownOrDefault")
52+
.addAnnotation(KotlinSymbols.ApolloExperimental)
5153
.addModifiers(KModifier.INLINE)
5254
.addTypeVariable(TypeVariableName("E", ClassName(packageName, "ApolloEnum").parameterizedBy(TypeVariableName("E"), TypeVariableName("K"))))
5355
.addTypeVariable(TypeVariableName("K", ClassName(packageName, "KnownEnum").parameterizedBy(TypeVariableName("E"))).copy(reified = true))
@@ -57,6 +59,7 @@ internal class EnumAsApolloEnumSupportBuilder(
5759
.addCode("return if (this is K) this else default(this)\n")
5860
.build(),
5961
FunSpec.builder("knownOrNull")
62+
.addAnnotation(KotlinSymbols.ApolloExperimental)
6063
.addModifiers(KModifier.INLINE)
6164
.addTypeVariable(TypeVariableName("E", ClassName(packageName, "ApolloEnum").parameterizedBy(TypeVariableName("E"), TypeVariableName("K"))))
6265
.addTypeVariable(TypeVariableName("K", ClassName(packageName, "KnownEnum").parameterizedBy(TypeVariableName("E"))).copy(reified = true))

libraries/apollo-gradle-plugin/src/main/kotlin/com/apollographql/apollo/gradle/api/Service.kt

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,8 +524,63 @@ interface Service {
524524

525525
/**
526526
* Whether to generate enums as ApolloEnum<E>.
527+
* Generates GraphQL enums as a sealed interface hierarchy.
528+
*
529+
* This GraphQL enum:
530+
* ```graphql
531+
* enum Color {
532+
* BLUEBERRY,
533+
* CHERRY
534+
* CANDY
535+
* }
536+
* ```
537+
*
538+
* Generates the following simplified Kotlin code:
539+
*
540+
* ```kotlin
541+
* public interface ApolloEnum<E, K : KnownEnum<E>> {
542+
* public val rawValue: String
543+
* }
544+
*
545+
* public sealed interface Color : ApolloEnum<Color, Color.__Known> {
546+
* override val rawValue: String
547+
*
548+
* public data object BLUEBERRY : __Known {
549+
* override val rawValue: String = "BLUEBERRY"
550+
* }
551+
*
552+
* public data object CHERRY : __Known {
553+
* override val rawValue: String = "CHERRY"
554+
* }
555+
*
556+
* public data object CANDY : __Known {
557+
* override val rawValue: String = "CANDY"
558+
* }
559+
*
560+
* public sealed interface __Known : Color, KnownEnum<Color> {
561+
* override val rawValue: String
562+
* }
563+
*
564+
* public class __Unknown(
565+
* override val rawValue: String,
566+
* ) : Color
567+
* }
568+
* ```
569+
*
570+
* Using `ApolloEnum` allows to have an intermediate type for "known" enums so you can sanitize your enums
571+
* and only deal with known enums if you want to:
572+
*
573+
* ```kotlin
574+
* // this function only wants to deal with known colors
575+
* fun doSomethingWith(color: Color.__Known) {
576+
* TODO()
577+
* }
578+
* val known = networkEnum.knownOrDefault { Color.CHERRY }
579+
*
580+
* doSomethingWith(known)
581+
* ```
527582
*
528-
* Experimental, see https://github.com/apollographql/apollo-kotlin/issues/6243.
583+
* [generateApolloEnums] is experimental and only valid when [generateKotlinModels] is `true`.
529584
*/
530585
@ApolloExperimental
531586
val generateApolloEnums: Property<Boolean>

0 commit comments

Comments
 (0)