Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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 {",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same question as sibling PR, should these be inline?

"}",
AwsRuntimeTypes.Types.AwsClientConfig,
serviceSymbol.name
) {
withBlock(
"val config = Config.BuilderImpl().apply { ",
"val config = Config.Builder().apply { ",
"}.apply(block).build()"
) {
write("region = sharedConfig?.region")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import aws.smithy.kotlin.runtime.serde.xml.xmlStreamReader
internal class GetBucketLocationOperationDeserializer : HttpDeserialize<GetBucketLocationResponse> {

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) {
Expand All @@ -28,7 +28,7 @@ internal class GetBucketLocationOperationDeserializer : HttpDeserialize<GetBucke
}
}

private fun deserializeGetBucketLocationOperationBody(builder: GetBucketLocationResponse.DslBuilder, payload: ByteArray) {
private fun deserializeGetBucketLocationOperationBody(builder: GetBucketLocationResponse.Builder, payload: ByteArray) {
val dom = parseDom(xmlStreamReader(payload))
check(dom.name.local == "LocationConstraint") { "Expected top-level tag of 'LocationConstraint' but found ${dom.name}." }
val rawLocationConstraint = checkNotNull(dom.text) { "Did not receive a value for 'LocationConstraint' in response." }
Expand Down