well this is horrifying.. i hope kotlin will allow...
# ktor
n
well this is horrifying.. i hope kotlin will allow me to do that cleaner and crossplatform..
Copy code
override suspend fun read(type: TypeInfo, response: HttpResponse): Any {
        val reified = type.reifiedType
        if(reified is ParameterizedType) {
            val arguments = reified.actualTypeArguments
            val first = arguments.first()
            if(first is WildcardType) {
                val upperFirst = first.upperBounds.first()
                println("upper bound: $upperFirst")
                println("upper bound::class ${upperFirst::class}")
                val kclass = kotlin.jvm.internal.ClassReference(upperFirst as Class<*>)
                val serializer = when {
                    type.type == List::class -> kclass.serializer().list
                    type.type == Set::class -> kclass.serializer().set
                    else -> {
                        throw IllegalStateException("WildcardType '${type.reifiedType.typeName}' is not implemented")
                    }
                }
                return json.parse(serializer, response.readText())
            }
        }
        return json.parse(type.type.serializer(), response.readText())
    }