
software.amazon.smithy.kotlin.codegen.rendering.endpoints.EndpointProviderGenerator.kt Maven / Gradle / Ivy
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
package software.amazon.smithy.kotlin.codegen.rendering.endpoints
import software.amazon.smithy.codegen.core.Symbol
import software.amazon.smithy.kotlin.codegen.KotlinSettings
import software.amazon.smithy.kotlin.codegen.core.KotlinWriter
import software.amazon.smithy.kotlin.codegen.core.RuntimeTypes
import software.amazon.smithy.kotlin.codegen.core.clientName
import software.amazon.smithy.kotlin.codegen.model.buildSymbol
import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolGenerator
/**
* Generates the endpoint provider interface.
*
* The default implementation of the provider is generated by [DefaultEndpointProviderGenerator].
*/
class EndpointProviderGenerator(
private val ctx: ProtocolGenerator.GenerationContext,
private val writer: KotlinWriter,
) {
companion object {
fun getSymbol(settings: KotlinSettings): Symbol =
buildSymbol {
val prefix = clientName(settings.sdkId)
name = "${prefix}EndpointProvider"
namespace = "${settings.pkg.name}.endpoints"
}
}
private val providerSymbol = getSymbol(ctx.settings)
private val paramsSymbol = EndpointParametersGenerator.getSymbol(ctx.settings)
fun render() {
renderDocumentation()
writer.write(
"#L fun interface #T: #T<#T>",
ctx.settings.api.visibility,
providerSymbol,
RuntimeTypes.SmithyClient.Endpoints.EndpointProvider,
paramsSymbol,
)
}
private fun renderDocumentation() {
writer.dokka {
write("Resolves to an endpoint for a given service operation.")
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy