in Confidence/src/main/java/com/spotify/confidence/serializers/Serializers.kt [77:125]
override fun deserialize(decoder: Decoder): ResolvedFlag {
val jsonDecoder = decoder as JsonDecoder
val json = jsonDecoder.decodeJsonElement().jsonObject
val flag = json["flag"].toString().split("/")
.last()
.replace("\"", "")
val variant = json["variant"]
.toString()
.replace("\"", "")
val resolvedReason = Json.decodeFromString<ResolveReason>(json["reason"].toString())
val flagSchemaJsonElement = json["flagSchema"]
val schemasJson = if (flagSchemaJsonElement != null && flagSchemaJsonElement != JsonNull) {
flagSchemaJsonElement.jsonObject["schema"]
} else {
null
}
return if (schemasJson != null) {
val flagSchema =
Json.decodeFromString(SchemaTypeSerializer, schemasJson.toString())
val valueJson = json["value"].toString()
val values: ConfidenceValue.Struct =
Json.decodeFromString(FlagValueSerializer(flagSchema), valueJson)
if (flagSchema.schema.size != values.map.size) {
throw ParseError(
"Unexpected flag name in resolve flag data: $flag",
listOf(flag)
)
}
ResolvedFlag(
flag = flag,
variant = variant,
reason = resolvedReason,
value = values.map
)
} else {
ResolvedFlag(
flag = flag,
variant = variant,
reason = resolvedReason,
value = mutableMapOf()
)
}
}