Skip to content

Commit ade31dd

Browse files
authored
Make raw serializers more lenient (#330)
1 parent 434d6cd commit ade31dd

File tree

1 file changed

+37
-14
lines changed

1 file changed

+37
-14
lines changed

jacodb-ets/src/main/kotlin/org/jacodb/ets/dto/Serializers.kt

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,17 @@ object RawStmtSerializer : KSerializer<RawStmtDto> {
9191
override fun deserialize(decoder: Decoder): RawStmtDto {
9292
require(decoder is JsonDecoder)
9393
val element = decoder.decodeJsonElement().jsonObject
94-
val kind = element.getValue("_").jsonPrimitive.content
95-
val details = element.toMutableMap()
96-
details.remove("_")
97-
return RawStmtDto(kind, JsonObject(details))
94+
if ("_" in element.keys) {
95+
val kind = element.getValue("_").jsonPrimitive.content
96+
val details = element.toMutableMap()
97+
details.remove("_")
98+
return RawStmtDto(kind, JsonObject(details))
99+
} else {
100+
val kind = element.getValue("kind").jsonPrimitive.content
101+
val details = element.toMutableMap()
102+
details.remove("kind")
103+
return RawStmtDto(kind, JsonObject(details))
104+
}
98105
}
99106

100107
override fun serialize(encoder: Encoder, value: RawStmtDto) {
@@ -110,12 +117,21 @@ object RawValueSerializer : KSerializer<RawValueDto> {
110117
override fun deserialize(decoder: Decoder): RawValueDto {
111118
require(decoder is JsonDecoder)
112119
val element = decoder.decodeJsonElement().jsonObject
113-
val kind = element.getValue("_").jsonPrimitive.content
114-
val type = decoder.json.decodeFromJsonElement<TypeDto>(element.getValue("type"))
115-
val details = element.toMutableMap()
116-
details.remove("_")
117-
details.remove("type")
118-
return RawValueDto(kind, JsonObject(details), type)
120+
if ("_" in element.keys) {
121+
val kind = element.getValue("_").jsonPrimitive.content
122+
val type = decoder.json.decodeFromJsonElement<TypeDto>(element.getValue("type"))
123+
val details = element.toMutableMap()
124+
details.remove("_")
125+
details.remove("type")
126+
return RawValueDto(kind, JsonObject(details), type)
127+
} else {
128+
val kind = element.getValue("kind").jsonPrimitive.content
129+
val type = decoder.json.decodeFromJsonElement<TypeDto>(element.getValue("type"))
130+
val details = element.toMutableMap()
131+
details.remove("kind")
132+
details.remove("type")
133+
return RawValueDto(kind, JsonObject(details), type)
134+
}
119135
}
120136

121137
override fun serialize(encoder: Encoder, value: RawValueDto) {
@@ -131,10 +147,17 @@ object RawTypeSerializer : KSerializer<RawTypeDto> {
131147
override fun deserialize(decoder: Decoder): RawTypeDto {
132148
require(decoder is JsonDecoder)
133149
val element = decoder.decodeJsonElement().jsonObject
134-
val kind = element.getValue("_").jsonPrimitive.content
135-
val details = element.toMutableMap()
136-
details.remove("_")
137-
return RawTypeDto(kind, JsonObject(details))
150+
if ("_" in element.keys) {
151+
val kind = element.getValue("_").jsonPrimitive.content
152+
val details = element.toMutableMap()
153+
details.remove("_")
154+
return RawTypeDto(kind, JsonObject(details))
155+
} else {
156+
val kind = element.getValue("kind").jsonPrimitive.content
157+
val details = element.toMutableMap()
158+
details.remove("kind")
159+
return RawTypeDto(kind, JsonObject(details))
160+
}
138161
}
139162

140163
override fun serialize(encoder: Encoder, value: RawTypeDto) {

0 commit comments

Comments
 (0)