fun parameterConversion()

in generator/src/main/kotlin/space/jetbrains/api/generator/GenerateResources.kt [324:362]


fun parameterConversion(model: HttpApiEntitiesById, expr: String, type: HA_Type, funcCode: CodeBlock.Builder) {
    when (type) {
        is HA_Type.Primitive -> {
            funcCode.add(expr)
            if (type.primitive != HA_Primitive.String) {
                funcCode.add(".toString()")
            } else if (PERMISSION_SCOPE_TAG in type.tags) {
                if (type.nullable) funcCode.add("?")
                funcCode.add(".toString()")
            }
        }
        is HA_Type.UrlParam -> funcCode.add("$expr.compactId")
        is HA_Type.Enum -> funcCode.add("$expr.name")

        is HA_Type.Ref -> funcCode.add(expr + if (type.nullable) "?.id" else ".id")

        is HA_Type.Array -> {
            funcCode.add(expr)
            if (type.nullable) funcCode.add("?")
            funcCode.add(".takeIf·{ it.isNotEmpty() }")
            if (type.elementType !is HA_Type.Primitive || type.elementType.primitive != HA_Primitive.String || type.elementType.nullable) {
                funcCode.add("?.map·{ ")
                if (type.elementType.nullable) {
                    funcCode.add("it?.let·{ ")
                    parameterConversion(model, "it", type.elementType, funcCode)
                    funcCode.add(" }.orEmpty()")
                } else {
                    parameterConversion(model, "it", type.elementType, funcCode)
                }
                funcCode.add(" }")
            }
        }

        is HA_Type.Map -> error("Maps cannot occur in URL parameters")

        is HA_Type.Object -> error("Objects cannot occur in URL parameters")
        is HA_Type.Dto -> error("${type.dto.id}: DTOs cannot occur as URL parameters or as fields inside @HttpApiUrlParam classes")
    }
}