Unverified Commit a1fde3be authored by Russell Cohen's avatar Russell Cohen Committed by GitHub
Browse files

Overhaul RustModule system to support nested modules (#1992)

* Overhaul RustModule system to support nested modules

* Cleanups / CR feedback

* Get server unit tests passing

* Fix compilation

* Remove unused import

* CR Feedback II

* customize isn't actually a reserved word—move it to the reserved member section
parent eafbe808
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ class AwsFluentClientDecorator : RustCodegenDecorator<ClientProtocolGenerator, C
            ),
            retryClassifier = runtimeConfig.awsHttp().toType().member("retry::AwsResponseRetryClassifier"),
        ).render(rustCrate)
        rustCrate.withNonRootModule(CustomizableOperationGenerator.CUSTOMIZE_MODULE) {
        rustCrate.withModule(CustomizableOperationGenerator.CustomizeModule) {
            renderCustomizableOperationSendMethod(runtimeConfig, generics, this)
        }
        rustCrate.withModule(FluentClientGenerator.clientModule) {
+2 −1
Original line number Diff line number Diff line
@@ -7,9 +7,10 @@ package software.amazon.smithy.rustsdk

import software.amazon.smithy.rust.codegen.core.rustlang.InlineDependency
import software.amazon.smithy.rust.codegen.core.rustlang.RustDependency
import software.amazon.smithy.rust.codegen.core.rustlang.RustModule
import software.amazon.smithy.rust.codegen.core.rustlang.Visibility

object InlineAwsDependency {
    fun forRustFile(file: String, visibility: Visibility = Visibility.PRIVATE, vararg additionalDependency: RustDependency): InlineDependency =
        InlineDependency.Companion.forRustFile(file, "aws-inlineable", visibility, *additionalDependency)
        InlineDependency.Companion.forRustFile(RustModule.new(file, visibility), "/aws-inlineable/src/$file.rs", *additionalDependency)
}
+0 −12
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@ 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.rustlang.Visibility
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
@@ -82,19 +80,9 @@ class CodegenVisitor(

        codegenContext = ClientCodegenContext(model, symbolProvider, service, protocol, settings, codegenDecorator)

        val clientPublicModules = setOf(
            RustModule.Error,
            RustModule.Model,
            RustModule.Input,
            RustModule.Output,
            RustModule.Config,
            RustModule.Types,
            RustModule.operation(Visibility.PUBLIC),
        ).associateBy { it.name }
        rustCrate = RustCrate(
            context.fileManifest,
            symbolProvider,
            clientPublicModules,
            codegenContext.settings.codegenConfig,
        )
        protocolGenerator = protocolGeneratorFactory.buildProtocolGenerator(codegenContext)
+1 −3
Original line number Diff line number Diff line
@@ -7,10 +7,8 @@ package software.amazon.smithy.rust.codegen.client.smithy.generators

import software.amazon.smithy.model.shapes.MemberShape
import software.amazon.smithy.model.shapes.StructureShape
import software.amazon.smithy.rust.codegen.core.rustlang.RustMetadata
import software.amazon.smithy.rust.codegen.core.rustlang.RustModule
import software.amazon.smithy.rust.codegen.core.rustlang.RustType
import software.amazon.smithy.rust.codegen.core.rustlang.Visibility
import software.amazon.smithy.rust.codegen.core.rustlang.Writable
import software.amazon.smithy.rust.codegen.core.rustlang.rust
import software.amazon.smithy.rust.codegen.core.rustlang.rustTemplate
@@ -24,7 +22,7 @@ import software.amazon.smithy.rust.codegen.core.smithy.protocols.lensName

/** Generator for accessing nested fields through optional values **/
class NestedAccessorGenerator(private val symbolProvider: RustSymbolProvider) {
    private val module = RustModule("lens", RustMetadata(visibility = Visibility.PUBLIC), "Generated accessors for nested fields")
    private val module = RustModule.private("lens", "Generated accessors for nested fields")

    /**
     * Generate an accessor on [root] that consumes [root] and returns an `Option<T>` for the nested item
+9 −9
Original line number Diff line number Diff line
@@ -13,10 +13,8 @@ import software.amazon.smithy.model.traits.IdempotencyTokenTrait
import software.amazon.smithy.model.traits.PaginatedTrait
import software.amazon.smithy.rust.codegen.client.smithy.generators.client.FluentClientGenerics
import software.amazon.smithy.rust.codegen.core.rustlang.CargoDependency
import software.amazon.smithy.rust.codegen.core.rustlang.RustMetadata
import software.amazon.smithy.rust.codegen.core.rustlang.RustModule
import software.amazon.smithy.rust.codegen.core.rustlang.RustType
import software.amazon.smithy.rust.codegen.core.rustlang.Visibility
import software.amazon.smithy.rust.codegen.core.rustlang.Writable
import software.amazon.smithy.rust.codegen.core.rustlang.render
import software.amazon.smithy.rust.codegen.core.rustlang.rust
@@ -78,11 +76,7 @@ class PaginatorGenerator private constructor(
    private val idx = PaginatedIndex.of(model)
    private val paginationInfo =
        idx.getPaginationInfo(service, operation).orNull() ?: PANIC("failed to load pagination info")
    private val module = RustModule(
        "paginator",
        RustMetadata(visibility = Visibility.PUBLIC),
        documentation = "Paginators for the service",
    )
    private val module = RustModule.public("paginator", "Paginators for the service")

    private val inputType = symbolProvider.toSymbol(operation.inputShape(model))
    private val outputShape = operation.outputShape(model)
@@ -99,7 +93,12 @@ class PaginatorGenerator private constructor(
        "generics" to generics.decl,
        "bounds" to generics.bounds,
        "page_size_setter" to pageSizeSetter(),
        "send_bounds" to generics.sendBounds(symbolProvider.toSymbol(operation), outputType, errorType, retryClassifier),
        "send_bounds" to generics.sendBounds(
            symbolProvider.toSymbol(operation),
            outputType,
            errorType,
            retryClassifier,
        ),

        // Operation Types
        "operation" to symbolProvider.toSymbol(operation),
@@ -288,7 +287,8 @@ class PaginatorGenerator private constructor(
    private fun pageSizeSetter() = writable {
        paginationInfo.pageSizeMember.orNull()?.also {
            val memberName = symbolProvider.toMemberName(it)
            val pageSizeT = symbolProvider.toSymbol(it).rustType().stripOuter<RustType.Option>().render(true)
            val pageSizeT =
                symbolProvider.toSymbol(it).rustType().stripOuter<RustType.Option>().render(true)
            rust(
                """
                /// Set the page size
Loading