From 3af04ea5bb40bc1a9f722d7472b32aff141b378a Mon Sep 17 00:00:00 2001 From: 0marperez Date: Wed, 29 Oct 2025 22:51:39 -0400 Subject: [PATCH 1/2] feat: sdk source readRemaining --- runtime/runtime-core/api/runtime-core.api | 1 + .../src/aws/smithy/kotlin/runtime/io/SdkSource.kt | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/runtime/runtime-core/api/runtime-core.api b/runtime/runtime-core/api/runtime-core.api index 0e8f85de3a..61628e31f9 100644 --- a/runtime/runtime-core/api/runtime-core.api +++ b/runtime/runtime-core/api/runtime-core.api @@ -1097,6 +1097,7 @@ public abstract interface class aws/smithy/kotlin/runtime/io/SdkSource : java/io public final class aws/smithy/kotlin/runtime/io/SdkSourceKt { public static final fun readFully (Laws/smithy/kotlin/runtime/io/SdkSource;Laws/smithy/kotlin/runtime/io/SdkBuffer;J)V + public static final fun readRemaining (Laws/smithy/kotlin/runtime/io/SdkSource;Laws/smithy/kotlin/runtime/io/SdkBuffer;)V public static final fun readToByteArray (Laws/smithy/kotlin/runtime/io/SdkSource;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun toSdkByteReadChannel (Laws/smithy/kotlin/runtime/io/SdkSource;Lkotlinx/coroutines/CoroutineScope;)Laws/smithy/kotlin/runtime/io/SdkByteReadChannel; public static synthetic fun toSdkByteReadChannel$default (Laws/smithy/kotlin/runtime/io/SdkSource;Lkotlinx/coroutines/CoroutineScope;ILjava/lang/Object;)Laws/smithy/kotlin/runtime/io/SdkByteReadChannel; diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt index aefb75dc08..cf26af62a7 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt @@ -110,3 +110,18 @@ public fun SdkSource.readFully(sink: SdkBuffer, byteCount: Long) { totalBytesRead += rc } } + +/** + * **Caution** Reads the entire contents of the source into [sink]. + * This function will read until the source is exhausted and no bytes remain + * + * @param sink the buffer that data read from the source will be appended to + */ +@InternalApi +public fun SdkSource.readRemaining(sink: SdkBuffer) { + var readBytes: Long + do { + // ensure any errors are propagated by attempting to read at least once + readBytes = read(sink, Long.MAX_VALUE) + } while (readBytes != -1L) +} From 6958bfcdf9ccc3ec8ff1f6c3d85a8cb5112db314 Mon Sep 17 00:00:00 2001 From: 0marperez Date: Thu, 30 Oct 2025 11:31:35 -0400 Subject: [PATCH 2/2] feedback --- runtime/runtime-core/api/runtime-core.api | 2 +- .../common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/runtime/runtime-core/api/runtime-core.api b/runtime/runtime-core/api/runtime-core.api index 61628e31f9..e488735251 100644 --- a/runtime/runtime-core/api/runtime-core.api +++ b/runtime/runtime-core/api/runtime-core.api @@ -1097,7 +1097,7 @@ public abstract interface class aws/smithy/kotlin/runtime/io/SdkSource : java/io public final class aws/smithy/kotlin/runtime/io/SdkSourceKt { public static final fun readFully (Laws/smithy/kotlin/runtime/io/SdkSource;Laws/smithy/kotlin/runtime/io/SdkBuffer;J)V - public static final fun readRemaining (Laws/smithy/kotlin/runtime/io/SdkSource;Laws/smithy/kotlin/runtime/io/SdkBuffer;)V + public static final fun readRemaining (Laws/smithy/kotlin/runtime/io/SdkSource;Laws/smithy/kotlin/runtime/io/SdkBuffer;)J public static final fun readToByteArray (Laws/smithy/kotlin/runtime/io/SdkSource;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun toSdkByteReadChannel (Laws/smithy/kotlin/runtime/io/SdkSource;Lkotlinx/coroutines/CoroutineScope;)Laws/smithy/kotlin/runtime/io/SdkByteReadChannel; public static synthetic fun toSdkByteReadChannel$default (Laws/smithy/kotlin/runtime/io/SdkSource;Lkotlinx/coroutines/CoroutineScope;ILjava/lang/Object;)Laws/smithy/kotlin/runtime/io/SdkByteReadChannel; diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt index cf26af62a7..4aa8e9fc4c 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/io/SdkSource.kt @@ -118,10 +118,15 @@ public fun SdkSource.readFully(sink: SdkBuffer, byteCount: Long) { * @param sink the buffer that data read from the source will be appended to */ @InternalApi -public fun SdkSource.readRemaining(sink: SdkBuffer) { +public fun SdkSource.readRemaining(sink: SdkBuffer): Long { + var totalReadBytes: Long = 0 var readBytes: Long + do { // ensure any errors are propagated by attempting to read at least once readBytes = read(sink, Long.MAX_VALUE) + totalReadBytes += readBytes } while (readBytes != -1L) + + return totalReadBytes + 1L // Account for last -1 read }