All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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