-
Notifications
You must be signed in to change notification settings - Fork 642
/
Copy pathexample-json-30.kt
34 lines (28 loc) · 1.04 KB
/
example-json-30.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// This file was automatically generated from json.md by Knit tool. Do not edit.
package example.exampleJson30
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
sealed class Project {
abstract val name: String
}
@OptIn(ExperimentalSerializationApi::class)
@KeepGeneratedSerializer
@Serializable(with = BasicProjectSerializer::class)
@SerialName("basic")
data class BasicProject(override val name: String): Project()
object BasicProjectSerializer : JsonTransformingSerializer<BasicProject>(BasicProject.generatedSerializer()) {
override fun transformDeserialize(element: JsonElement): JsonElement {
val jsonObject = element.jsonObject
return if ("basic-name" in jsonObject) {
val nameElement = jsonObject["basic-name"] ?: throw IllegalStateException()
JsonObject(mapOf("name" to nameElement))
} else {
jsonObject
}
}
}
fun main() {
val project = Json.decodeFromString<Project>("""{"type":"basic","basic-name":"example"}""")
println(project)
}