
commonMain.io.ktor.client.plugins.logging.ObservingUtils.kt Maven / Gradle / Ivy
/*
* Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/
package io.ktor.client.plugins.logging
import io.ktor.http.content.*
import io.ktor.util.*
import io.ktor.utils.io.*
import kotlinx.coroutines.*
internal suspend fun OutgoingContent.observe(log: ByteWriteChannel): OutgoingContent = when (this) {
is OutgoingContent.ByteArrayContent -> {
log.writeFully(bytes())
log.close()
this
}
is OutgoingContent.ReadChannelContent -> {
val responseChannel = ByteChannel()
val content = readFrom()
content.copyToBoth(log, responseChannel)
LoggedContent(this, responseChannel)
}
is OutgoingContent.WriteChannelContent -> {
val responseChannel = ByteChannel()
val content = toReadChannel()
content.copyToBoth(log, responseChannel)
LoggedContent(this, responseChannel)
}
else -> {
log.close()
this
}
}
@Suppress("DEPRECATION")
@OptIn(DelicateCoroutinesApi::class)
private fun OutgoingContent.WriteChannelContent.toReadChannel(): ByteReadChannel =
GlobalScope.writer(Dispatchers.Default) {
writeTo(channel)
}.channel
© 2015 - 2025 Weber Informatics LLC | Privacy Policy