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