Skip to content

Commit 97c0809

Browse files
WIP
1 parent 84a751a commit 97c0809

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

sdk-api-kotlin/src/main/kotlin/dev/restate/sdk/kotlin/KtSerdes.kt

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,22 @@ import dev.restate.sdk.common.Serde
1414
import dev.restate.sdk.common.StateKey
1515
import io.bkbn.kompendium.json.schema.KotlinXSchemaConfigurator
1616
import io.bkbn.kompendium.json.schema.SchemaGenerator
17+
import io.bkbn.kompendium.json.schema.definition.AnyOfDefinition
18+
import io.bkbn.kompendium.json.schema.definition.ArrayDefinition
1719
import io.bkbn.kompendium.json.schema.definition.JsonSchema
20+
import io.bkbn.kompendium.json.schema.definition.MapDefinition
21+
import io.bkbn.kompendium.json.schema.definition.OneOfDefinition
22+
import io.bkbn.kompendium.json.schema.definition.ReferenceDefinition
23+
import io.bkbn.kompendium.json.schema.definition.TypeDefinition
1824
import java.nio.ByteBuffer
1925
import java.nio.charset.StandardCharsets
2026
import kotlin.reflect.typeOf
2127
import kotlinx.serialization.KSerializer
28+
import kotlinx.serialization.encodeToString
2229
import kotlinx.serialization.json.Json
2330
import kotlinx.serialization.json.JsonNull
31+
import kotlinx.serialization.json.encodeToJsonElement
32+
import kotlinx.serialization.json.jsonObject
2433
import kotlinx.serialization.serializer
2534

2635
object KtStateKey {
@@ -93,14 +102,36 @@ object KtSerdes {
93102
}
94103

95104
override fun jsonSchema(): String {
96-
val schema =
105+
fun JsonSchema.sanitizeRefs(): JsonSchema {
106+
return when (this) {
107+
is AnyOfDefinition -> this.copy(anyOf = this.anyOf.map { it.sanitizeRefs() }.toSet())
108+
is ArrayDefinition -> this.items.sanitizeRefs()
109+
is MapDefinition ->
110+
this.copy(additionalProperties = this.additionalProperties.sanitizeRefs())
111+
is OneOfDefinition -> this.copy(oneOf = this.oneOf.map { it.sanitizeRefs() }.toSet())
112+
is ReferenceDefinition ->
113+
this.copy(`$ref` = this.`$ref`.replaceFirst("#/components/schemas", "#/\$defs"))
114+
is TypeDefinition ->
115+
this.copy(properties = this.properties?.mapValues { it.value.sanitizeRefs() })
116+
else -> this
117+
}
118+
}
119+
120+
val nestedSchemas = mutableMapOf<String, JsonSchema>()
121+
val rootSchema =
97122
SchemaGenerator.fromTypeToSchema(
98123
type = typeOf<T>(),
99-
cache = mutableMapOf(),
124+
cache = nestedSchemas,
100125
schemaConfigurator = KotlinXSchemaConfigurator(),
101126
)
102127

103-
return Json.encodeToString(JsonSchema.serializer(), schema)
128+
val defsSchemas: Map<String, JsonSchema> =
129+
nestedSchemas.mapValues { e -> e.value.sanitizeRefs() }
130+
val rootElement =
131+
Json.encodeToJsonElement(JsonSchema.serializer(), rootSchema.sanitizeRefs())
132+
.jsonObject + ("\$defs" to Json.encodeToJsonElement(defsSchemas))
133+
134+
return Json.encodeToString(rootElement)
104135
}
105136
}
106137
}

test-services/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,9 @@ jib {
7070

7171
tasks.jar { manifest { attributes["Main-Class"] = "dev.restate.sdk.testservices.MainKt" } }
7272

73-
application { mainClass.set("dev.restate.sdk.testservices.MainKt") }
73+
tasks.withType<JavaExec> {
74+
classpath("$projectDir/generated/ksp/main/resources")
75+
}
76+
77+
application {
78+
mainClass.set("dev.restate.sdk.testservices.MainKt") }

0 commit comments

Comments
 (0)