override fun deserialize()

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()
            )
        }
    }