diff --git a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegration.kt b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegration.kt index 0bbfe81a5ed..3497b6738b5 100644 --- a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegration.kt +++ b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegration.kt @@ -47,13 +47,13 @@ class AwsServiceConfigIntegration : KotlinIntegration { val serviceSymbol: Symbol = writer.getContextValue(ServiceGenerator.SectionServiceCompanionObject.ServiceSymbol) writer.withBlock("companion object {", "}") { withBlock( - "operator fun invoke(sharedConfig: #T? = null, block: Config.DslBuilder.() -> Unit = {}): #L {", + "operator fun invoke(sharedConfig: #T? = null, block: Config.Builder.() -> Unit = {}): #L {", "}", AwsRuntimeTypes.Types.AwsClientConfig, serviceSymbol.name ) { withBlock( - "val config = Config.BuilderImpl().apply { ", + "val config = Config.Builder().apply { ", "}.apply(block).build()" ) { write("region = sharedConfig?.region") diff --git a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt index 5bffdb8bc58..4b92b6d574d 100644 --- a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt +++ b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt @@ -175,7 +175,7 @@ open class RestXml : AwsHttpBindingProtocolGenerator() { val boundMemberName = boundMember.capitalizedDefaultName() val deserializeLambdaIdent = "deserialize$boundMemberName" writer.withBlock("val $deserializeLambdaIdent = {", "}") { - write("val builder = #T.builder()", memberSymbol) + write("val builder = #T.Builder()", memberSymbol) renderDeserializerBody(ctx, copyWithMemberTraits, targetShape.members().toList(), writer) write("builder.build()") } diff --git a/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegrationTest.kt b/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegrationTest.kt index 6230eecb66c..6b9c9c0d0e0 100644 --- a/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegrationTest.kt +++ b/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/AwsServiceConfigIntegrationTest.kt @@ -50,9 +50,20 @@ class AwsServiceConfigIntegrationTest { contents.shouldContainOnlyOnceWithDiff(expectedProps) val expectedImpl = """ - override var credentialsProvider: CredentialsProvider? = null - override var endpointResolver: AwsEndpointResolver? = null - override var region: String? = null + /** + * The AWS credentials provider to use for authenticating requests. If not provided a + * [aws.sdk.kotlin.runtime.auth.credentials.DefaultChainCredentialsProvider] instance will be used. + */ + var credentialsProvider: CredentialsProvider? = null + /** + * Determines the endpoint (hostname) to make requests to. When not provided a default + * resolver is configured automatically. This is an advanced client option. + */ + var endpointResolver: AwsEndpointResolver? = null + /** + * AWS region to make requests to + */ + var region: String? = null """ contents.shouldContainOnlyOnceWithDiff(expectedImpl) } diff --git a/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/PresignerGeneratorTest.kt b/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/PresignerGeneratorTest.kt index b039f7fc500..3410946f1b1 100644 --- a/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/PresignerGeneratorTest.kt +++ b/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/PresignerGeneratorTest.kt @@ -224,53 +224,32 @@ class PresignerGeneratorTest { * This type can be used to presign requests in cases where an existing service client * instance is not available. */ - class TestPresignConfig private constructor(builder: BuilderImpl): ServicePresignConfig { + class TestPresignConfig private constructor(builder: Builder): ServicePresignConfig { override val credentialsProvider: CredentialsProvider = builder.credentialsProvider ?: DefaultChainCredentialsProvider() override val endpointResolver: AwsEndpointResolver = builder.endpointResolver ?: DefaultEndpointResolver() override val region: String = requireNotNull(builder.region) { "region is a required configuration property" } override val serviceId: String = "example" override val signingName: String = "example-signing-name" companion object { - @JvmStatic - fun fluentBuilder(): FluentBuilder = BuilderImpl() - - operator fun invoke(block: DslBuilder.() -> kotlin.Unit): ServicePresignConfig = BuilderImpl().apply(block).build() - } - - interface FluentBuilder { - fun credentialsProvider(credentialsProvider: CredentialsProvider): FluentBuilder - fun endpointResolver(endpointResolver: AwsEndpointResolver): FluentBuilder - fun region(region: String): FluentBuilder - fun build(): TestPresignConfig + inline operator fun invoke(block: Builder.() -> kotlin.Unit): ServicePresignConfig = Builder().apply(block).build() } - interface DslBuilder { + class Builder { /** * The AWS credentials provider to use for authenticating requests. If not provided a [aws.sdk.kotlin.runtime.auth.credentials.DefaultChainCredentialsProvider] instance will be used. */ - var credentialsProvider: CredentialsProvider? - + var credentialsProvider: CredentialsProvider? = null /** * Determines the endpoint (hostname) to make requests to. When not provided a default resolver is configured automatically. This is an advanced client option. */ - var endpointResolver: AwsEndpointResolver? - + var endpointResolver: AwsEndpointResolver? = null /** * AWS region to make requests for */ - var region: String? - - } - - internal class BuilderImpl() : FluentBuilder, DslBuilder { - override var credentialsProvider: CredentialsProvider? = null - override var endpointResolver: AwsEndpointResolver? = null - override var region: String? = null + var region: String? = null - override fun build(): TestPresignConfig = TestPresignConfig(this) - override fun credentialsProvider(credentialsProvider: CredentialsProvider): FluentBuilder = apply { this.credentialsProvider = credentialsProvider } - override fun endpointResolver(endpointResolver: AwsEndpointResolver): FluentBuilder = apply { this.endpointResolver = endpointResolver } - override fun region(region: String): FluentBuilder = apply { this.region = region } + @PublishedApi + internal fun build(): TestPresignConfig = TestPresignConfig(this) } } """.trimIndent() diff --git a/services/s3/common/src/aws/sdk/kotlin/services/s3/internal/GetBucketLocationOperationDeserializer.kt b/services/s3/common/src/aws/sdk/kotlin/services/s3/internal/GetBucketLocationOperationDeserializer.kt index 9e75b7a55a2..6f4d50ffc9e 100644 --- a/services/s3/common/src/aws/sdk/kotlin/services/s3/internal/GetBucketLocationOperationDeserializer.kt +++ b/services/s3/common/src/aws/sdk/kotlin/services/s3/internal/GetBucketLocationOperationDeserializer.kt @@ -18,7 +18,7 @@ import aws.smithy.kotlin.runtime.serde.xml.xmlStreamReader internal class GetBucketLocationOperationDeserializer : HttpDeserialize { override suspend fun deserialize(context: ExecutionContext, response: HttpResponse): GetBucketLocationResponse { - val builder = GetBucketLocationResponse.builder() + val builder = GetBucketLocationResponse.Builder() val payload = response.body.readAll() if (payload != null) { @@ -28,7 +28,7 @@ internal class GetBucketLocationOperationDeserializer : HttpDeserialize