Coverage Summary for Class: SseLogUtilKt (dev.skymansandy.wiretap.helper.util)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| SseLogUtilKt |
100%
(1/1)
|
100%
(2/2)
|
100%
(18/18)
|
100%
(34/34)
|
100%
(258/258)
|
/*
* Copyright (c) 2026 skymansandy. All rights reserved.
*/
package dev.skymansandy.wiretap.helper.util
import dev.skymansandy.wiretap.domain.model.SseConnection
import dev.skymansandy.wiretap.domain.model.SseEvent
internal const val SSE_LOG_FILE_PREFIX = "wiretap_sse_log"
internal fun buildSseShareText(
connection: SseConnection,
events: List<SseEvent>,
): String = buildString {
appendLine("SSE ${connection.url}")
appendLine("Status: ${connection.status.name}")
appendLine("Opened: ${formatTime(connection.timestamp)}")
connection.closedAt?.let { appendLine("Closed: ${formatTime(it)}") }
connection.failureMessage?.let { appendLine("Error: $it") }
connection.lastEventId?.let { appendLine("Last Event ID: $it") }
connection.retryMs?.let { appendLine("Retry: ${it}ms") }
appendLine()
appendLine("--- Request Headers ---")
if (connection.requestHeaders.isEmpty()) {
appendLine("(none)")
} else {
connection.requestHeaders.forEach { (k, v) -> appendLine("$k: $v") }
}
appendLine()
appendLine("--- Events (${events.size}) ---")
if (events.isEmpty()) {
append("(none)")
} else {
events.forEachIndexed { index, event ->
append(formatEventBlock(event))
if (index < events.lastIndex) appendLine()
}
}
}
private fun formatEventBlock(event: SseEvent): String = buildString {
val time = formatTime(event.timestamp)
val bytes = formatBytes(event.byteCount)
val header = buildString {
append("[$time]")
event.eventType?.let { append(" event: $it") }
event.eventId?.let { append(" id: $it") }
append(" ($bytes)")
}
appendLine(header)
append(event.data)
}