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