All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.codecentric.hikaku.converters.openapi.extractors.QueryParameterExtractor.kt Maven / Gradle / Ivy

package de.codecentric.hikaku.converters.openapi.extractors

import de.codecentric.hikaku.converters.openapi.extensions.referencedSchema
import de.codecentric.hikaku.endpoints.QueryParameter
import io.swagger.v3.oas.models.OpenAPI
import io.swagger.v3.oas.models.parameters.Parameter as OpenApiParameter
import io.swagger.v3.oas.models.parameters.QueryParameter as OpenApiQueryParameter

internal class QueryParameterExtractor(private val openApi: OpenAPI) {

    operator fun invoke(parameters: List?): Set {
        return extractInlineQueryParameters(parameters).union(extractQueryParametersFromComponents(parameters))
    }

    private fun extractInlineQueryParameters(parameters: List?): Set {
        return parameters
                ?.filterIsInstance()
                ?.map { QueryParameter(it.name, it.required) }
                .orEmpty()
                .toSet()
    }

    private fun extractQueryParametersFromComponents(parameters: List?): Set {
        return parameters
                ?.filter { it.referencedSchema != null }
                ?.map {
                    Regex("#/components/parameters/(?.+)")
                            .find(it.referencedSchema)
                            ?.groups
                            ?.get("key")
                            ?.value
                }
                ?.map {
                    openApi.components
                            .parameters[it]
                }
                ?.filter { it?.`in` == "query" }
                ?.map { QueryParameter(it?.name ?: "", it?.required ?: false) }
                .orEmpty()
                .toSet()
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy