diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1d35f5ec5..5633a30d7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [1.3.30] - 12/16/2024
+
+## [1.3.29] - 12/12/2024
+
+## [1.3.28] - 12/03/2024
+
+## [1.3.27] - 12/02/2024
+
## [1.3.26] - 11/22/2024
### Fixes
diff --git a/README.md b/README.md
index 0ff20aa52..3d1a54aa4 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Smithy Kotlin
+# Smithy Kotlin
[Smithy](https://smithy.io/2.0/index.html) code generators for [Kotlin](https://kotlinlang.org/).
diff --git a/codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/smoketests/SmokeTestsRunnerGenerator.kt b/codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/smoketests/SmokeTestsRunnerGenerator.kt
index 81c275380..df8eeda53 100644
--- a/codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/smoketests/SmokeTestsRunnerGenerator.kt
+++ b/codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/smoketests/SmokeTestsRunnerGenerator.kt
@@ -30,6 +30,7 @@ object SmokeTestSectionIds {
object HttpEngineOverride : SectionId
object ServiceFilter : SectionId
object SkipTags : SectionId
+ object SmokeTestsFile : SectionId
object ClientConfig : SectionId {
val Name: SectionKey = SectionKey("aws.smithy.kotlin#SmokeTestClientConfigName")
val Value: SectionKey = SectionKey("aws.smithy.kotlin#SmokeTestClientConfigValue")
@@ -59,16 +60,18 @@ class SmokeTestsRunnerGenerator(
ctx: CodegenContext,
) {
internal fun render() {
- writer.write("private var exitCode = 0")
- renderEnvironmentVariables()
- writer.declareSection(SmokeTestSectionIds.AdditionalEnvironmentVariables)
- writer.write("")
- writer.withBlock("public suspend fun main() {", "}") {
- renderFunctionCalls()
- write("#T(exitCode)", RuntimeTypes.Core.SmokeTests.exitProcess)
+ writer.declareSection(SmokeTestSectionIds.SmokeTestsFile) {
+ writer.write("private var exitCode = 0")
+ renderEnvironmentVariables()
+ writer.declareSection(SmokeTestSectionIds.AdditionalEnvironmentVariables)
+ writer.write("")
+ writer.withBlock("public suspend fun main() {", "}") {
+ renderFunctionCalls()
+ write("#T(exitCode)", RuntimeTypes.Core.SmokeTests.exitProcess)
+ }
+ writer.write("")
+ renderFunctions()
}
- writer.write("")
- renderFunctions()
}
private fun renderEnvironmentVariables() {
diff --git a/gradle.properties b/gradle.properties
index 6cb1d24c5..3628520e5 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,7 +13,7 @@ kotlinx.atomicfu.enableNativeIrTransformation=false
org.gradle.jvmargs=-Xmx2G -XX:MaxMetaspaceSize=1G
# SDK
-sdkVersion=1.3.27-SNAPSHOT
+sdkVersion=1.3.31-SNAPSHOT
# codegen
-codegenVersion=0.33.27-SNAPSHOT
\ No newline at end of file
+codegenVersion=0.33.31-SNAPSHOT
\ No newline at end of file
diff --git a/runtime/runtime-core/api/runtime-core.api b/runtime/runtime-core/api/runtime-core.api
index 237aac6f7..942f99e34 100644
--- a/runtime/runtime-core/api/runtime-core.api
+++ b/runtime/runtime-core/api/runtime-core.api
@@ -103,6 +103,7 @@ public final class aws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetri
public static final field WAITER Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public fun getIdentifier ()Ljava/lang/String;
+ public fun toString ()Ljava/lang/String;
public static fun valueOf (Ljava/lang/String;)Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric;
public static fun values ()[Laws/smithy/kotlin/runtime/businessmetrics/SmithyBusinessMetric;
}
diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt
index 774b0c9d9..fa9c41652 100644
--- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt
+++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtils.kt
@@ -90,4 +90,7 @@ public enum class SmithyBusinessMetric(public override val identifier: String) :
SERVICE_ENDPOINT_OVERRIDE("N"),
ACCOUNT_ID_BASED_ENDPOINT("O"),
SIGV4A_SIGNING("S"),
+ ;
+
+ override fun toString(): String = identifier
}
diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/JMESPath.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/JMESPath.kt
index 2a7cdd979..9b691a79a 100644
--- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/JMESPath.kt
+++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/JMESPath.kt
@@ -66,6 +66,7 @@ public fun Any?.type(): String = when (this) {
else -> throw Exception("Undetected type for: $this")
}
+// Collection `flattenIfPossible` functions
@InternalApi
@JvmName("noOpUnnestedCollection")
public inline fun Collection.flattenIfPossible(): Collection = this
@@ -73,3 +74,12 @@ public inline fun Collection.flattenIfPossible(): Collection =
@InternalApi
@JvmName("flattenNestedCollection")
public inline fun Collection>.flattenIfPossible(): Collection = flatten()
+
+// List `flattenIfPossible` functions
+@InternalApi
+@JvmName("noOpUnnestedCollection")
+public inline fun List.flattenIfPossible(): List = this
+
+@InternalApi
+@JvmName("flattenNestedCollection")
+public inline fun List>.flattenIfPossible(): List = flatten()
diff --git a/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtilsTest.kt b/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtilsTest.kt
index f5ff6ac72..308ec0e76 100644
--- a/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtilsTest.kt
+++ b/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/businessmetrics/BusinessMetricsUtilsTest.kt
@@ -7,6 +7,7 @@ package aws.smithy.kotlin.runtime.businessmetrics
import aws.smithy.kotlin.runtime.collections.get
import aws.smithy.kotlin.runtime.operation.ExecutionContext
import kotlin.test.Test
+import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
@@ -55,4 +56,12 @@ class BusinessMetricsUtilsTest {
executionContext.removeBusinessMetric(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION)
assertFalse(executionContext.containsBusinessMetric(SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION))
}
+
+ @Test
+ fun businessMetricToString() {
+ val businessMetricToString = SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION.toString()
+ val businessMetricIdentifier = SmithyBusinessMetric.GZIP_REQUEST_COMPRESSION.identifier
+
+ assertEquals(businessMetricIdentifier, businessMetricToString)
+ }
}
diff --git a/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/util/JmesPathTest.kt b/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/util/JmesPathTest.kt
new file mode 100644
index 000000000..e867f1e8a
--- /dev/null
+++ b/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/util/JmesPathTest.kt
@@ -0,0 +1,49 @@
+package aws.smithy.kotlin.runtime.util
+
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
+
+class JmesPathTest {
+ @Test
+ fun flattenNestedLists() {
+ val nestedList = listOf(
+ listOf(1, 2, 3),
+ listOf(4, 5),
+ listOf(6),
+ )
+ val flattenedList = nestedList.flattenIfPossible()
+ assertEquals(listOf(1, 2, 3, 4, 5, 6), flattenedList)
+ }
+
+ @Test
+ fun flattenEmptyNestedLists() {
+ val nestedList = listOf(
+ listOf(),
+ listOf(),
+ listOf(),
+ )
+ val flattenedList = nestedList.flattenIfPossible()
+ assertTrue(flattenedList.isEmpty())
+ }
+
+ @Test
+ fun flattenNestedEmptyAndNonEmptyNestedLists() {
+ val nestedList = listOf(
+ listOf(1, 2),
+ listOf(),
+ listOf(3, 4, 5),
+ )
+ val flattenedList = nestedList.flattenIfPossible()
+ assertEquals(listOf(1, 2, 3, 4, 5), flattenedList)
+ }
+
+ @Test
+ fun flattenList() {
+ val nestedList = listOf(
+ listOf(1, 2, 3),
+ )
+ val flattenedList = nestedList.flattenIfPossible()
+ assertEquals(listOf(1, 2, 3), flattenedList)
+ }
+}