Skip to content

Commit 467ba8a

Browse files
authored
Merge pull request #684 from dwilkolek/feat/kotlin2-input-type-json-deserialization
feat: annotate kotlin input type to enable deserialization
2 parents 89ed33a + db1bf6c commit 467ba8a

File tree

18 files changed

+75
-19
lines changed

18 files changed

+75
-19
lines changed

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/constantsForInputTypes/expected/types/PersonFilter.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.constantsForInputTypes.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class PersonFilter(
11+
public class PersonFilter @JsonCreator constructor(
12+
@JsonProperty("email")
1013
public val email: String? = default<PersonFilter, String?>("email"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("email" to email)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/constantsWithExtendedInputTypes/expected/types/PersonFilter.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.netflix.graphql.dgs.codegen.cases.constantsWithExtendedInputTypes.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Int
68
import kotlin.Pair
79
import kotlin.String
810
import kotlin.collections.List
911

10-
public class PersonFilter(
12+
public class PersonFilter @JsonCreator constructor(
13+
@JsonProperty("email")
1114
public val email: String? = default<PersonFilter, String?>("email"),
15+
@JsonProperty("birthYear")
1216
public val birthYear: Int? = default<PersonFilter, Int?>("birthYear"),
1317
) : GraphQLInput() {
1418
override fun fields(): List<Pair<String, Any?>> = listOf("email" to email, "birthYear" to

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/dataClassDocs/expected/types/MovieFilter.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.netflix.graphql.dgs.codegen.cases.dataClassDocs.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
@@ -11,7 +13,8 @@ import kotlin.collections.List
1113
*
1214
* It takes a title and such.
1315
*/
14-
public class MovieFilter(
16+
public class MovieFilter @JsonCreator constructor(
17+
@JsonProperty("titleFilter")
1518
public val titleFilter: String? = default<MovieFilter, String?>("titleFilter"),
1619
) : GraphQLInput() {
1720
override fun fields(): List<Pair<String, Any?>> = listOf("titleFilter" to titleFilter)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/dataClassFieldDocs/expected/types/MovieFilter.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.dataClassFieldDocs.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class MovieFilter(
11+
public class MovieFilter @JsonCreator constructor(
12+
@JsonProperty("titleFilter")
1013
public val titleFilter: String? = default<MovieFilter, String?>("titleFilter"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("titleFilter" to titleFilter)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/input/expected/types/MovieFilter.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.input.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class MovieFilter(
11+
public class MovieFilter @JsonCreator constructor(
12+
@JsonProperty("genre")
1013
public val genre: String? = default<MovieFilter, String?>("genre"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("genre" to genre)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/inputWithDefaultEnumValueForArray/expected/types/SomeType.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.inputWithDefaultEnumValueForArray.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class SomeType(
11+
public class SomeType @JsonCreator constructor(
12+
@JsonProperty("colors")
1013
public val colors: List<Color?>? = default<SomeType, List<Color?>?>("colors"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("colors" to colors)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/inputWithDefaultIntValueForArray/expected/types/SomeType.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.netflix.graphql.dgs.codegen.cases.inputWithDefaultIntValueForArray.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Int
68
import kotlin.Pair
79
import kotlin.String
810
import kotlin.collections.List
911

10-
public class SomeType(
12+
public class SomeType @JsonCreator constructor(
13+
@JsonProperty("numbers")
1114
public val numbers: List<Int?>? = default<SomeType, List<Int?>?>("numbers"),
1215
) : GraphQLInput() {
1316
override fun fields(): List<Pair<String, Any?>> = listOf("numbers" to numbers)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/inputWithDefaultStringValueForArray/expected/types/SomeType.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.inputWithDefaultStringValueForArray.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class SomeType(
11+
public class SomeType @JsonCreator constructor(
12+
@JsonProperty("names")
1013
public val names: List<String?>? = default<SomeType, List<String?>?>("names"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("names" to names)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/inputWithDefaultValueForArray/expected/types/SomeType.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.inputWithDefaultValueForArray.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class SomeType(
11+
public class SomeType @JsonCreator constructor(
12+
@JsonProperty("names")
1013
public val names: List<String?>? = default<SomeType, List<String?>?>("names"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("names" to names)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/inputWithDefaultValueForEnum/expected/types/ColorFilter.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.inputWithDefaultValueForEnum.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class ColorFilter(
11+
public class ColorFilter @JsonCreator constructor(
12+
@JsonProperty("color")
1013
public val color: Color? = default<ColorFilter, Color?>("color"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("color" to color)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/inputWithExtendedType/expected/types/MovieFilter.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.netflix.graphql.dgs.codegen.cases.inputWithExtendedType.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Int
68
import kotlin.Pair
79
import kotlin.String
810
import kotlin.collections.List
911

10-
public class MovieFilter(
12+
public class MovieFilter @JsonCreator constructor(
13+
@JsonProperty("genre")
1114
public val genre: String? = default<MovieFilter, String?>("genre"),
15+
@JsonProperty("releaseYear")
1216
public val releaseYear: Int? = default<MovieFilter, Int?>("releaseYear"),
1317
) : GraphQLInput() {
1418
override fun fields(): List<Pair<String, Any?>> = listOf("genre" to genre, "releaseYear" to

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/inputWithReservedWord/expected/types/SampleInput.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.inputWithReservedWord.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class SampleInput(
11+
public class SampleInput @JsonCreator constructor(
12+
@JsonProperty("return")
1013
public val `return`: String,
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("return" to `return`)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/projectionWithNestedInputs/expected/types/I1.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package com.netflix.graphql.dgs.codegen.cases.projectionWithNestedInputs.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class I1(
11+
public class I1 @JsonCreator constructor(
12+
@JsonProperty("arg1")
1013
public val arg1: I1? = default<I1, I1?>("arg1"),
14+
@JsonProperty("arg2")
1115
public val arg2: I2? = default<I1, I2?>("arg2"),
1216
) : GraphQLInput() {
1317
override fun fields(): List<Pair<String, Any?>> = listOf("arg1" to arg1, "arg2" to arg2)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/projectionWithNestedInputs/expected/types/I2.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package com.netflix.graphql.dgs.codegen.cases.projectionWithNestedInputs.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class I2(
11+
public class I2 @JsonCreator constructor(
12+
@JsonProperty("arg1")
1013
public val arg1: String? = default<I2, String?>("arg1"),
14+
@JsonProperty("arg2")
1115
public val arg2: String? = default<I2, String?>("arg2"),
1216
) : GraphQLInput() {
1317
override fun fields(): List<Pair<String, Any?>> = listOf("arg1" to arg1, "arg2" to arg2)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/projectionWithPrimitiveAndArgs/expected/types/I.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.projectionWithPrimitiveAndArgs.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class I(
11+
public class I @JsonCreator constructor(
12+
@JsonProperty("arg")
1013
public val arg: String? = default<I, String?>("arg"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("arg" to arg)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/projectionWithTypeAndArgs/expected/types/I.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.netflix.graphql.dgs.codegen.cases.projectionWithTypeAndArgs.expected.types
22

3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
35
import com.netflix.graphql.dgs.codegen.GraphQLInput
46
import kotlin.Any
57
import kotlin.Pair
68
import kotlin.String
79
import kotlin.collections.List
810

9-
public class I(
11+
public class I @JsonCreator constructor(
12+
@JsonProperty("arg")
1013
public val arg: String? = default<I, String?>("arg"),
1114
) : GraphQLInput() {
1215
override fun fields(): List<Pair<String, Any?>> = listOf("arg" to arg)

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/cases/projectionWithTypeAndArgs/test/QueryTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ class QueryTest {
7878
@Test
7979
fun testQueryWithAlias() {
8080
val query = DgsClient.buildQuery {
81-
person(_alias= "person1", a2 = "person1") {
81+
person(_alias = "person1", a2 = "person1") {
8282
firstname
8383
}
84-
person(_alias= "person2", a2 = "person2") {
84+
person(_alias = "person2", a2 = "person2") {
8585
firstname
8686
}
8787
}

graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/kotlin2/GenerateKotlin2InputTypes.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
package com.netflix.graphql.dgs.codegen.generators.kotlin2
2020

21+
import com.fasterxml.jackson.annotation.JsonCreator
22+
import com.fasterxml.jackson.annotation.JsonProperty
2123
import com.netflix.graphql.dgs.codegen.CodeGenConfig
2224
import com.netflix.graphql.dgs.codegen.GraphQLInput
2325
import com.netflix.graphql.dgs.codegen.generators.kotlin.ReservedKeywordFilter
@@ -26,6 +28,7 @@ import com.netflix.graphql.dgs.codegen.generators.kotlin.sanitizeKdoc
2628
import com.netflix.graphql.dgs.codegen.generators.shared.SchemaExtensionsUtils.findInputExtensions
2729
import com.netflix.graphql.dgs.codegen.generators.shared.excludeSchemaTypeExtension
2830
import com.netflix.graphql.dgs.codegen.shouldSkip
31+
import com.squareup.kotlinpoet.AnnotationSpec
2932
import com.squareup.kotlinpoet.ClassName
3033
import com.squareup.kotlinpoet.CodeBlock
3134
import com.squareup.kotlinpoet.FileSpec
@@ -82,13 +85,14 @@ fun generateKotlin2InputTypes(
8285
// add a constructor with a parameter for every field
8386
.primaryConstructor(
8487
FunSpec.constructorBuilder()
88+
.addAnnotation(JsonCreator::class)
8589
.addParameters(
8690
fields.map { field ->
8791
val type = type(field)
8892
ParameterSpec.builder(
8993
name = field.name,
9094
type = type
91-
)
95+
).addAnnotation(AnnotationSpec.builder(JsonProperty::class).addMember("%S", field.name).build())
9296
.apply {
9397
if (type.isNullable) {
9498
defaultValue("default<%T, %T>(%S)", typeName, type, field.name)

0 commit comments

Comments
 (0)