Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: simplify generated enum classes #29

Merged
merged 2 commits into from
Apr 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions codegen.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
overwrite: true
schema:
- "test/**/*.graphql"
config:
namingConvention: "keep"
generates:
test/integration/Types.kt:
plugins:
Expand Down
7 changes: 3 additions & 4 deletions src/definitions/enum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,11 @@ export function buildEnumTypeDefinition(
config,
definitionNode: node,
});
return `${annotations}enum class ${enumName}(val value: String) {
return `${annotations}enum class ${enumName} {
${indentMultiline(enumValues.join(",\n") + ";", 2)}

companion object {
fun findByName(name: String): ${enumName}? = values().find { it.name == name }
fun findByValue(value: String): ${enumName}? = values().find { it.value == value }
fun findByName(name: String, ignoreCase: Boolean = false): ${enumName}? = values().find { it.name.equals(name, ignoreCase = ignoreCase) }
}
}`;
}
Expand All @@ -53,5 +52,5 @@ function buildEnumValueDefinition(
config,
definitionNode: node,
});
return `${annotations}${config.convert(node)}("${node.name.value}")`;
return `${annotations}${config.convert(node)}`;
}
11 changes: 5 additions & 6 deletions test/unit/should_generate_basic_enums_correctly/expected.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ package com.kotlin.generated

import com.expediagroup.graphql.generator.annotations.*

enum class UserRole(val value: String) {
Admin("ADMIN"),
User("USER"),
Editor("EDITOR");
enum class UserRole {
Admin,
User,
Editor;

companion object {
fun findByName(name: String): UserRole? = values().find { it.name == name }
fun findByValue(value: String): UserRole? = values().find { it.value == value }
fun findByName(name: String, ignoreCase: Boolean = false): UserRole? = values().find { it.name.equals(name, ignoreCase = ignoreCase) }
}
}
9 changes: 4 additions & 5 deletions test/unit/should_generate_enums_properly/expected.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ package com.kotlin.generated
import com.expediagroup.graphql.generator.annotations.*

@GraphQLDescription("A description for MyEnum")
enum class MyEnum(val value: String) {
This("THIS"),
enum class MyEnum {
This,
@GraphQLDescription("A description for THAT")
That("THAT");
That;

companion object {
fun findByName(name: String): MyEnum? = values().find { it.name == name }
fun findByValue(value: String): MyEnum? = values().find { it.value == value }
fun findByName(name: String, ignoreCase: Boolean = false): MyEnum? = values().find { it.name.equals(name, ignoreCase = ignoreCase) }
}
}
9 changes: 4 additions & 5 deletions test/unit/should_honor_base_configs/expected.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ package com.kotlin.generated
import com.expediagroup.graphql.generator.annotations.*

@GraphQLDescription("A description for MyEnum")
enum class MyEnum(val value: String) {
THIS("THIS"),
enum class MyEnum {
THIS,
@GraphQLDescription("A description for THAT")
THAT("THAT");
THAT;

companion object {
fun findByName(name: String): MyEnum? = values().find { it.name == name }
fun findByValue(value: String): MyEnum? = values().find { it.value == value }
fun findByName(name: String, ignoreCase: Boolean = false): MyEnum? = values().find { it.name.equals(name, ignoreCase = ignoreCase) }
}
}
9 changes: 4 additions & 5 deletions test/unit/should_honor_onlyTypes_config/expected.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@ data class MyType(
)

@GraphQLDescription("A description for MyEnum")
enum class MyEnum(val value: String) {
This("THIS"),
enum class MyEnum {
This,
@GraphQLDescription("A description for THAT")
That("THAT");
That;

companion object {
fun findByName(name: String): MyEnum? = values().find { it.name == name }
fun findByValue(value: String): MyEnum? = values().find { it.value == value }
fun findByName(name: String, ignoreCase: Boolean = false): MyEnum? = values().find { it.name.equals(name, ignoreCase = ignoreCase) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,12 @@ data class NestedListType(
val field: String? = null
)

enum class MyEnum(val value: String) {
This("THIS"),
That("THAT");
enum class MyEnum {
This,
That;

companion object {
fun findByName(name: String): MyEnum? = values().find { it.name == name }
fun findByValue(value: String): MyEnum? = values().find { it.value == value }
fun findByName(name: String, ignoreCase: Boolean = false): MyEnum? = values().find { it.name.equals(name, ignoreCase = ignoreCase) }
}
}

Expand Down