1*3c321d95SSadaf EbrahimiEnums 2*3c321d95SSadaf Ebrahimi===== 3*3c321d95SSadaf Ebrahimi 4*3c321d95SSadaf EbrahimiUse `enumBuilder` to create the enum type, and `addEnumConstant()` for each value: 5*3c321d95SSadaf Ebrahimi 6*3c321d95SSadaf Ebrahimi```kotlin 7*3c321d95SSadaf Ebrahimival helloWorld = TypeSpec.enumBuilder("Roshambo") 8*3c321d95SSadaf Ebrahimi .addEnumConstant("ROCK") 9*3c321d95SSadaf Ebrahimi .addEnumConstant("SCISSORS") 10*3c321d95SSadaf Ebrahimi .addEnumConstant("PAPER") 11*3c321d95SSadaf Ebrahimi .build() 12*3c321d95SSadaf Ebrahimi``` 13*3c321d95SSadaf Ebrahimi 14*3c321d95SSadaf EbrahimiTo generate this: 15*3c321d95SSadaf Ebrahimi 16*3c321d95SSadaf Ebrahimi```kotlin 17*3c321d95SSadaf Ebrahimienum class Roshambo { 18*3c321d95SSadaf Ebrahimi ROCK, 19*3c321d95SSadaf Ebrahimi 20*3c321d95SSadaf Ebrahimi SCISSORS, 21*3c321d95SSadaf Ebrahimi 22*3c321d95SSadaf Ebrahimi PAPER 23*3c321d95SSadaf Ebrahimi} 24*3c321d95SSadaf Ebrahimi``` 25*3c321d95SSadaf Ebrahimi 26*3c321d95SSadaf EbrahimiFancy enums are supported, where the enum values override methods or call a superclass constructor. 27*3c321d95SSadaf EbrahimiHere's a comprehensive example: 28*3c321d95SSadaf Ebrahimi 29*3c321d95SSadaf Ebrahimi```kotlin 30*3c321d95SSadaf Ebrahimival helloWorld = TypeSpec.enumBuilder("Roshambo") 31*3c321d95SSadaf Ebrahimi .primaryConstructor( 32*3c321d95SSadaf Ebrahimi FunSpec.constructorBuilder() 33*3c321d95SSadaf Ebrahimi .addParameter("handsign", String::class) 34*3c321d95SSadaf Ebrahimi .build() 35*3c321d95SSadaf Ebrahimi ) 36*3c321d95SSadaf Ebrahimi .addEnumConstant( 37*3c321d95SSadaf Ebrahimi "ROCK", TypeSpec.anonymousClassBuilder() 38*3c321d95SSadaf Ebrahimi .addSuperclassConstructorParameter("%S", "fist") 39*3c321d95SSadaf Ebrahimi .addFunction( 40*3c321d95SSadaf Ebrahimi FunSpec.builder("toString") 41*3c321d95SSadaf Ebrahimi .addModifiers(KModifier.OVERRIDE) 42*3c321d95SSadaf Ebrahimi .addStatement("return %S", "avalanche!") 43*3c321d95SSadaf Ebrahimi .returns(String::class) 44*3c321d95SSadaf Ebrahimi .build() 45*3c321d95SSadaf Ebrahimi ) 46*3c321d95SSadaf Ebrahimi .build() 47*3c321d95SSadaf Ebrahimi ) 48*3c321d95SSadaf Ebrahimi .addEnumConstant( 49*3c321d95SSadaf Ebrahimi "SCISSORS", TypeSpec.anonymousClassBuilder() 50*3c321d95SSadaf Ebrahimi .addSuperclassConstructorParameter("%S", "peace") 51*3c321d95SSadaf Ebrahimi .build() 52*3c321d95SSadaf Ebrahimi ) 53*3c321d95SSadaf Ebrahimi .addEnumConstant( 54*3c321d95SSadaf Ebrahimi "PAPER", TypeSpec.anonymousClassBuilder() 55*3c321d95SSadaf Ebrahimi .addSuperclassConstructorParameter("%S", "flat") 56*3c321d95SSadaf Ebrahimi .build() 57*3c321d95SSadaf Ebrahimi ) 58*3c321d95SSadaf Ebrahimi .addProperty( 59*3c321d95SSadaf Ebrahimi PropertySpec.builder("handsign", String::class, KModifier.PRIVATE) 60*3c321d95SSadaf Ebrahimi .initializer("handsign") 61*3c321d95SSadaf Ebrahimi .build() 62*3c321d95SSadaf Ebrahimi ) 63*3c321d95SSadaf Ebrahimi .build() 64*3c321d95SSadaf Ebrahimi``` 65*3c321d95SSadaf Ebrahimi 66*3c321d95SSadaf EbrahimiWhich generates this: 67*3c321d95SSadaf Ebrahimi 68*3c321d95SSadaf Ebrahimi```kotlin 69*3c321d95SSadaf Ebrahimienum class Roshambo(private val handsign: String) { 70*3c321d95SSadaf Ebrahimi ROCK("fist") { 71*3c321d95SSadaf Ebrahimi override fun toString(): String = "avalanche!" 72*3c321d95SSadaf Ebrahimi }, 73*3c321d95SSadaf Ebrahimi 74*3c321d95SSadaf Ebrahimi SCISSORS("peace"), 75*3c321d95SSadaf Ebrahimi 76*3c321d95SSadaf Ebrahimi PAPER("flat"); 77*3c321d95SSadaf Ebrahimi} 78*3c321d95SSadaf Ebrahimi``` 79