
org.octopusden.octopus.infrastructure.gitea.client.GiteaClientDecoder.kt Maven / Gradle / Ivy
package org.octopusden.octopus.infrastructure.gitea.client
import com.fasterxml.jackson.databind.ObjectMapper
import feign.Response
import feign.jackson.JacksonDecoder
import org.octopusden.octopus.infrastructure.gitea.client.dto.BaseGiteaEntity
import org.octopusden.octopus.infrastructure.gitea.client.dto.GiteaEntityList
import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type
class GiteaClientDecoder(val mapper: ObjectMapper) : JacksonDecoder(mapper) {
override fun decode(response: Response, type: Type): Any {
val parameterizedType = type as? ParameterizedType
return if (parameterizedType
?.rawType
?.typeName == GiteaEntityList::class.java.typeName
) {
val collection = super.decode(
response,
CollectionType(parameterizedType!!.actualTypeArguments)
) as? Collection ?: emptyList()
val hasMore = response.headers()["X-HasMore"]
?.firstOrNull()
?.toBoolean()
GiteaEntityList(hasMore, collection)
} else {
super.decode(response, type)
}
}
private class CollectionType(private val actualTypeArguments: Array) : ParameterizedType {
override fun getActualTypeArguments() = actualTypeArguments
override fun getRawType() = Collection::class.java
override fun getOwnerType() = null
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy