in ktor-client/ktor-client-core/common/src/io/ktor/client/request/forms/formDsl.kt [25:59]
public fun formData(vararg values: FormPart<*>): List<PartData> {
val result = mutableListOf<PartData>()
values.forEach { (key, value, headers) ->
val partHeaders = HeadersBuilder().apply {
append(HttpHeaders.ContentDisposition, "form-data; name=$key")
appendAll(headers)
}
val part = when (value) {
is String -> PartData.FormItem(value, {}, partHeaders.build())
is Number -> PartData.FormItem(value.toString(), {}, partHeaders.build())
is ByteArray -> {
partHeaders.append(HttpHeaders.ContentLength, value.size.toString())
PartData.BinaryItem({ ByteReadPacket(value) }, {}, partHeaders.build())
}
is ByteReadPacket -> {
partHeaders.append(HttpHeaders.ContentLength, value.remaining.toString())
PartData.BinaryItem({ value.copy() }, { value.close() }, partHeaders.build())
}
is InputProvider -> {
val size = value.size
if (size != null) {
partHeaders.append(HttpHeaders.ContentLength, size.toString())
}
PartData.BinaryItem(value.block, {}, partHeaders.build())
}
is Input -> error("Can't use [Input] as part of form: $value. Consider using [InputProvider] instead.")
else -> error("Unknown form content type: $value")
}
result += part
}
return result
}