
software.amazon.smithy.kotlin.codegen.rendering.endpoints.EndpointDelegator.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.kotlin.codegen.core.useFileWriter
import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolGenerator
import software.amazon.smithy.rulesengine.language.EndpointRuleSet
import software.amazon.smithy.rulesengine.traits.EndpointTestCase
/**
* Responsible for providing various endpoint related generation components
*/
interface EndpointDelegator {
companion object {
/**
* Get the default endpoint delegator
*/
val Default: EndpointDelegator = object : EndpointDelegator {}
}
/**
* Generate a default implementation for the modeled endpoint provider.
* Will only be invoked when a model's service shape has the necessary endpoint rule set trait, however, the base
* interface and parameter type will always be generated (the expectation being that the caller supplies their own
* at runtime).
*/
fun generateEndpointProvider(ctx: ProtocolGenerator.GenerationContext, rules: EndpointRuleSet?) {
val providerSymbol = EndpointProviderGenerator.getSymbol(ctx.settings)
val defaultProviderSymbol = DefaultEndpointProviderGenerator.getSymbol(ctx.settings)
ctx.delegator.useFileWriter(providerSymbol) {
EndpointProviderGenerator(ctx, it).render()
}
if (rules != null) {
ctx.delegator.useFileWriter(defaultProviderSymbol) {
DefaultEndpointProviderGenerator(ctx, rules, it).render()
}
}
}
/**
* Generate the input parameter type for the generated endpoint provider implementation.
*/
fun generateEndpointParameters(ctx: ProtocolGenerator.GenerationContext, rules: EndpointRuleSet?) {
ctx.delegator.useFileWriter(EndpointParametersGenerator.getSymbol(ctx.settings)) {
EndpointParametersGenerator(ctx, rules, it).render()
}
}
/**
* Generate unit tests for the modeled endpoint rules test cases.
* Will only be invoked when a model's service shape has both the rule set and test case traits for endpoints.
*/
fun generateEndpointProviderTests(ctx: ProtocolGenerator.GenerationContext, tests: List, rules: EndpointRuleSet) {
val testSymbol = DefaultEndpointProviderTestGenerator.getSymbol(ctx.settings)
ctx.delegator.useTestFileWriter("${testSymbol.name}.kt", testSymbol.namespace) {
DefaultEndpointProviderTestGenerator(ctx, rules, tests, it).render()
}
}
/**
* Generate the operation adapter for going from the type agnostic HTTP endpoint resolver to the generated
* endpoint provider.
*/
fun generateEndpointResolverAdapter(ctx: ProtocolGenerator.GenerationContext) {
ctx.delegator.useFileWriter(EndpointResolverAdapterGenerator.getSymbol(ctx.settings)) {
EndpointResolverAdapterGenerator(ctx, it).render()
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy