Unverified Commit 9522cc65 authored by John DiSanti's avatar John DiSanti Committed by GitHub
Browse files

Rename error generators (#2107)

* Generate operation errors from codegen visitors
* Rename error generators
parent a55a29d9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -155,7 +155,7 @@ class AwsInputPresignedMethod(
        }

    private fun RustWriter.writeInputPresignedMethod(section: OperationSection.InputImpl) {
        val operationError = operationShape.errorSymbol(codegenContext.model, symbolProvider, codegenContext.target)
        val operationError = operationShape.errorSymbol(symbolProvider)
        val presignableOp = PRESIGNABLE_OPERATIONS.getValue(operationShape.id)

        val makeOperationOp = if (presignableOp.hasModelTransforms()) {
+32 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import software.amazon.smithy.build.PluginContext
import software.amazon.smithy.model.Model
import software.amazon.smithy.model.knowledge.NullableIndex
import software.amazon.smithy.model.neighbor.Walker
import software.amazon.smithy.model.shapes.OperationShape
import software.amazon.smithy.model.shapes.ServiceShape
import software.amazon.smithy.model.shapes.Shape
import software.amazon.smithy.model.shapes.ShapeVisitor
@@ -23,6 +24,7 @@ import software.amazon.smithy.rust.codegen.client.smithy.generators.protocol.Cli
import software.amazon.smithy.rust.codegen.client.smithy.protocols.ClientProtocolLoader
import software.amazon.smithy.rust.codegen.client.smithy.transformers.AddErrorMessage
import software.amazon.smithy.rust.codegen.client.smithy.transformers.RemoveEventStreamOperations
import software.amazon.smithy.rust.codegen.core.rustlang.RustModule
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
import software.amazon.smithy.rust.codegen.core.smithy.RustSymbolProvider
import software.amazon.smithy.rust.codegen.core.smithy.SymbolVisitorConfig
@@ -30,15 +32,20 @@ import software.amazon.smithy.rust.codegen.core.smithy.generators.BuilderGenerat
import software.amazon.smithy.rust.codegen.core.smithy.generators.EnumGenerator
import software.amazon.smithy.rust.codegen.core.smithy.generators.StructureGenerator
import software.amazon.smithy.rust.codegen.core.smithy.generators.UnionGenerator
import software.amazon.smithy.rust.codegen.core.smithy.generators.error.OperationErrorGenerator
import software.amazon.smithy.rust.codegen.core.smithy.generators.error.eventStreamErrorSymbol
import software.amazon.smithy.rust.codegen.core.smithy.generators.implBlock
import software.amazon.smithy.rust.codegen.core.smithy.protocols.ProtocolGeneratorFactory
import software.amazon.smithy.rust.codegen.core.smithy.traits.SyntheticInputTrait
import software.amazon.smithy.rust.codegen.core.smithy.transformers.EventStreamNormalizer
import software.amazon.smithy.rust.codegen.core.smithy.transformers.OperationNormalizer
import software.amazon.smithy.rust.codegen.core.smithy.transformers.RecursiveShapeBoxer
import software.amazon.smithy.rust.codegen.core.smithy.transformers.eventStreamErrors
import software.amazon.smithy.rust.codegen.core.smithy.transformers.operationErrors
import software.amazon.smithy.rust.codegen.core.util.CommandFailed
import software.amazon.smithy.rust.codegen.core.util.getTrait
import software.amazon.smithy.rust.codegen.core.util.hasTrait
import software.amazon.smithy.rust.codegen.core.util.isEventStream
import software.amazon.smithy.rust.codegen.core.util.letIf
import software.amazon.smithy.rust.codegen.core.util.runCommand
import java.util.logging.Logger
@@ -217,5 +224,30 @@ class ClientCodegenVisitor(
        rustCrate.useShapeWriter(shape) {
            UnionGenerator(model, symbolProvider, this, shape, renderUnknownVariant = true).render()
        }
        if (shape.isEventStream()) {
            rustCrate.withModule(RustModule.Error) {
                val symbol = symbolProvider.toSymbol(shape)
                val errors = shape.eventStreamErrors()
                    .map { model.expectShape(it.asMemberShape().get().target, StructureShape::class.java) }
                val errorSymbol = shape.eventStreamErrorSymbol(symbolProvider)
                OperationErrorGenerator(model, symbolProvider, symbol, errors)
                    .renderErrors(this, errorSymbol, symbol)
            }
        }
    }

    /**
     * Generate errors for operation shapes
     */
    override fun operationShape(shape: OperationShape) {
        rustCrate.withModule(RustModule.Error) {
            val operationSymbol = symbolProvider.toSymbol(shape)
            OperationErrorGenerator(
                model,
                symbolProvider,
                operationSymbol,
                shape.operationErrors(model).map { it.asStructureShape().get() },
            ).render(this)
        }
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import software.amazon.smithy.rust.codegen.core.rustlang.rustTemplate
import software.amazon.smithy.rust.codegen.core.rustlang.stripOuter
import software.amazon.smithy.rust.codegen.core.rustlang.writable
import software.amazon.smithy.rust.codegen.core.smithy.CodegenContext
import software.amazon.smithy.rust.codegen.core.smithy.CodegenTarget
import software.amazon.smithy.rust.codegen.core.smithy.RuntimeType
import software.amazon.smithy.rust.codegen.core.smithy.RustSymbolProvider
import software.amazon.smithy.rust.codegen.core.smithy.generators.builderSymbol
@@ -80,7 +79,7 @@ class PaginatorGenerator private constructor(
    private val inputType = symbolProvider.toSymbol(operation.inputShape(model))
    private val outputShape = operation.outputShape(model)
    private val outputType = symbolProvider.toSymbol(outputShape)
    private val errorType = operation.errorSymbol(model, symbolProvider, CodegenTarget.CLIENT)
    private val errorType = operation.errorSymbol(symbolProvider)

    private fun paginatorType(): RuntimeType = RuntimeType.forInlineFun(
        paginatorName,
+2 −2
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ import software.amazon.smithy.rust.codegen.client.smithy.generators.protocol.Pro
import software.amazon.smithy.rust.codegen.core.rustlang.Attribute
import software.amazon.smithy.rust.codegen.core.rustlang.RustModule
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
import software.amazon.smithy.rust.codegen.core.smithy.generators.error.TopLevelErrorGenerator
import software.amazon.smithy.rust.codegen.core.smithy.generators.error.ServiceErrorGenerator
import software.amazon.smithy.rust.codegen.core.smithy.generators.protocol.ProtocolSupport
import software.amazon.smithy.rust.codegen.core.util.inputShape

@@ -56,7 +56,7 @@ class ServiceGenerator(
            }
        }

        TopLevelErrorGenerator(clientCodegenContext, operations).render(rustCrate)
        ServiceErrorGenerator(clientCodegenContext, operations).render(rustCrate)

        rustCrate.withModule(RustModule.Config) {
            ServiceConfigGenerator.withBaseBehavior(
+3 −4
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ import software.amazon.smithy.rust.codegen.core.rustlang.rustTemplate
import software.amazon.smithy.rust.codegen.core.rustlang.rustTypeParameters
import software.amazon.smithy.rust.codegen.core.rustlang.stripOuter
import software.amazon.smithy.rust.codegen.core.rustlang.writable
import software.amazon.smithy.rust.codegen.core.smithy.CodegenTarget
import software.amazon.smithy.rust.codegen.core.smithy.RuntimeType
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
import software.amazon.smithy.rust.codegen.core.smithy.RustSymbolProvider
@@ -167,7 +166,7 @@ class FluentClientGenerator(

                val output = operation.outputShape(model)
                val operationOk = symbolProvider.toSymbol(output)
                val operationErr = operation.errorSymbol(model, symbolProvider, CodegenTarget.CLIENT).toSymbol()
                val operationErr = operation.errorSymbol(symbolProvider).toSymbol()

                val inputFieldsBody =
                    generateOperationShapeDocs(writer, symbolProvider, operation, model).joinToString("\n") {
@@ -261,7 +260,7 @@ class FluentClientGenerator(
                    "bounds" to generics.bounds,
                ) {
                    val outputType = symbolProvider.toSymbol(operation.outputShape(model))
                    val errorType = operation.errorSymbol(model, symbolProvider, CodegenTarget.CLIENT)
                    val errorType = operation.errorSymbol(symbolProvider)

                    // Have to use fully-qualified result here or else it could conflict with an op named Result
                    rustTemplate(
@@ -331,7 +330,7 @@ class FluentClientGenerator(
                        customizations,
                        FluentClientSection.FluentBuilderImpl(
                            operation,
                            operation.errorSymbol(model, symbolProvider, CodegenTarget.CLIENT),
                            operation.errorSymbol(symbolProvider),
                        ),
                    )
                    input.members().forEach { member ->
Loading