commonMain.aws.sdk.kotlin.services.cloudtraildata.endpoints.internal.EndpointResolverAdapter.kt Maven / Gradle / Ivy
// Code generated by smithy-kotlin-codegen. DO NOT EDIT!
package aws.sdk.kotlin.services.cloudtraildata.endpoints.internal
import aws.sdk.kotlin.runtime.http.interceptors.AwsBusinessMetric
import aws.sdk.kotlin.services.cloudtraildata.CloudTrailDataClient
import aws.sdk.kotlin.services.cloudtraildata.endpoints.CloudTrailDataEndpointParameters
import aws.smithy.kotlin.runtime.auth.awssigning.AwsSigningAttributes
import aws.smithy.kotlin.runtime.businessmetrics.AccountIdBasedEndpointAccountId
import aws.smithy.kotlin.runtime.businessmetrics.ServiceEndpointOverride
import aws.smithy.kotlin.runtime.businessmetrics.SmithyBusinessMetric
import aws.smithy.kotlin.runtime.businessmetrics.emitBusinessMetric
import aws.smithy.kotlin.runtime.client.SdkClientOption
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint
import aws.smithy.kotlin.runtime.collections.get
import aws.smithy.kotlin.runtime.http.operation.EndpointResolver
import aws.smithy.kotlin.runtime.http.operation.ResolveEndpointRequest
internal class EndpointResolverAdapter(
private val config: CloudTrailDataClient.Config
): EndpointResolver {
override suspend fun resolve(request: ResolveEndpointRequest): Endpoint {
val params = resolveEndpointParams(config, request)
val endpoint = config.endpointProvider.resolveEndpoint(params)
if (endpoint.attributes.contains(ServiceEndpointOverride)) request.context.emitBusinessMetric(SmithyBusinessMetric.SERVICE_ENDPOINT_OVERRIDE)
if (endpoint.attributes.contains(AccountIdBasedEndpointAccountId)) request.context.emitBusinessMetric(SmithyBusinessMetric.ACCOUNT_ID_BASED_ENDPOINT)
if (endpoint.attributes.contains(AwsSigningAttributes.SigningService) && endpoint.attributes[AwsSigningAttributes.SigningService] == "s3express") request.context.emitBusinessMetric(AwsBusinessMetric.S3_EXPRESS_BUCKET)
return endpoint
}
}
internal fun resolveEndpointParams(config: CloudTrailDataClient.Config, request: ResolveEndpointRequest): CloudTrailDataEndpointParameters {
return CloudTrailDataEndpointParameters {
region = config.region
bindAwsBuiltins(config, request)
endpoint = config.endpointUrl?.toString()
val opName = request.context[SdkClientOption.OperationName]
opContextBindings[opName]?.invoke(this, request)
}
}
private typealias BindOperationContextParamsFn = (CloudTrailDataEndpointParameters.Builder, ResolveEndpointRequest) -> Unit
private val opContextBindings = mapOf (
)
private fun CloudTrailDataEndpointParameters.Builder.bindAwsBuiltins(config: CloudTrailDataClient.Config, request: ResolveEndpointRequest) {
useDualStack = config.useDualStack
useFips = config.useFips
}