Commit 32212468 authored by John DiSanti's avatar John DiSanti Committed by AWS SDK Rust Bot
Browse files

Reorganize the types/models/primitives modules

parent 0da92a43
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -66,7 +66,12 @@ abstract class BaseRequestIdDecorator : ClientCodegenDecorator {
    ): List<BuilderCustomization> = baseCustomizations + listOf(RequestIdBuilderCustomization())

    override fun extras(codegenContext: ClientCodegenContext, rustCrate: RustCrate) {
        rustCrate.withModule(ClientRustModule.Types) {
        rustCrate.withModule(
            when (codegenContext.settings.codegenConfig.enableNewCrateOrganizationScheme) {
                true -> ClientRustModule.Operation
                else -> ClientRustModule.types
            },
        ) {
            // Re-export RequestId in generated crate
            rust("pub use #T;", accessorTrait(codegenContext))
        }
+1 −18
Original line number Diff line number Diff line
@@ -7,30 +7,13 @@ package software.amazon.smithy.rustsdk

import org.junit.jupiter.api.Test
import software.amazon.smithy.rust.codegen.client.testutil.validateConfigCustomizations
import software.amazon.smithy.rust.codegen.core.smithy.CoreRustSettings
import software.amazon.smithy.rust.codegen.core.testutil.TestWorkspace
import software.amazon.smithy.rust.codegen.core.testutil.rustSettings

class HttpConnectorConfigCustomizationTest {
    @Test
    fun `generates a valid config`() {
        val project = TestWorkspace.testProject()
        val projectSettings = project.rustSettings()
        val codegenContext = awsTestCodegenContext(
            coreRustSettings = CoreRustSettings(
                service = projectSettings.service,
                moduleName = projectSettings.moduleName,
                moduleVersion = projectSettings.moduleVersion,
                moduleAuthors = projectSettings.moduleAuthors,
                moduleDescription = projectSettings.moduleDescription,
                moduleRepository = projectSettings.moduleRepository,
                runtimeConfig = AwsTestRuntimeConfig,
                codegenConfig = projectSettings.codegenConfig,
                license = projectSettings.license,
                examplesUri = projectSettings.examplesUri,
                customizationConfig = projectSettings.customizationConfig,
            ),
        )
        val codegenContext = awsTestCodegenContext()
        validateConfigCustomizations(HttpConnectorConfigCustomization(codegenContext), project)
    }
}
+6 −15
Original line number Diff line number Diff line
@@ -6,8 +6,8 @@
package software.amazon.smithy.rustsdk

import org.junit.jupiter.api.Test
import software.amazon.smithy.rust.codegen.client.testutil.testClientRustSettings
import software.amazon.smithy.rust.codegen.client.testutil.validateConfigCustomizations
import software.amazon.smithy.rust.codegen.core.smithy.CoreRustSettings
import software.amazon.smithy.rust.codegen.core.testutil.TestWorkspace
import software.amazon.smithy.rust.codegen.core.testutil.rustSettings

@@ -15,21 +15,12 @@ internal class RegionProviderConfigTest {
    @Test
    fun `generates a valid config`() {
        val project = TestWorkspace.testProject()
        val projectSettings = project.rustSettings()
        val coreRustSettings = CoreRustSettings(
            service = projectSettings.service,
            moduleName = projectSettings.moduleName,
            moduleVersion = projectSettings.moduleVersion,
            moduleAuthors = projectSettings.moduleAuthors,
            moduleDescription = projectSettings.moduleDescription,
            moduleRepository = projectSettings.moduleRepository,
        val codegenContext = awsTestCodegenContext(
            settings = testClientRustSettings(
                moduleName = project.rustSettings().moduleName,
                runtimeConfig = AwsTestRuntimeConfig,
            codegenConfig = projectSettings.codegenConfig,
            license = projectSettings.license,
            examplesUri = projectSettings.examplesUri,
            customizationConfig = projectSettings.customizationConfig,
            ),
        )
        val codegenContext = awsTestCodegenContext(coreRustSettings = coreRustSettings)
        validateConfigCustomizations(RegionProviderConfig(codegenContext), project)
    }
}
+6 −6
Original line number Diff line number Diff line
@@ -8,15 +8,15 @@ package software.amazon.smithy.rustsdk
import software.amazon.smithy.model.Model
import software.amazon.smithy.model.node.ObjectNode
import software.amazon.smithy.rust.codegen.client.smithy.ClientCodegenContext
import software.amazon.smithy.rust.codegen.client.smithy.ClientRustSettings
import software.amazon.smithy.rust.codegen.client.testutil.clientIntegrationTest
import software.amazon.smithy.rust.codegen.client.testutil.testCodegenContext
import software.amazon.smithy.rust.codegen.core.smithy.CoreRustSettings
import software.amazon.smithy.rust.codegen.client.testutil.testClientCodegenContext
import software.amazon.smithy.rust.codegen.client.testutil.testClientRustSettings
import software.amazon.smithy.rust.codegen.core.smithy.RuntimeCrateLocation
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
import software.amazon.smithy.rust.codegen.core.testutil.IntegrationTestParams
import software.amazon.smithy.rust.codegen.core.testutil.TestRuntimeConfig
import software.amazon.smithy.rust.codegen.core.testutil.asSmithyModel
import software.amazon.smithy.rust.codegen.core.testutil.testRustSettings
import java.io.File

// In aws-sdk-codegen, the working dir when gradle runs tests is actually `./aws`. So, to find the smithy runtime, we need
@@ -29,10 +29,10 @@ val AwsTestRuntimeConfig = TestRuntimeConfig.copy(
    },
)

fun awsTestCodegenContext(model: Model? = null, coreRustSettings: CoreRustSettings?) =
    testCodegenContext(
fun awsTestCodegenContext(model: Model? = null, settings: ClientRustSettings? = null) =
    testClientCodegenContext(
        model ?: "namespace test".asSmithyModel(),
        settings = coreRustSettings ?: testRustSettings(runtimeConfig = AwsTestRuntimeConfig),
        settings = settings ?: testClientRustSettings(runtimeConfig = AwsTestRuntimeConfig),
    )

fun awsSdkIntegrationTest(
+24 −7
Original line number Diff line number Diff line
@@ -36,36 +36,47 @@ object ClientRustModule {

    /** crate::client */
    val client = Client.self

    object Client {
        /** crate::client */
        val self = RustModule.public("client", "Client and fluent builders for calling the service.")

        /** crate::client::customize */
        val customize = RustModule.public("customize", "Operation customization and supporting types", parent = self)
        val customize = RustModule.public("customize", parent = self, documentation = "Operation customization and supporting types")
    }

    val Config = RustModule.public("config", documentation = "Configuration for the service.")
    val Error = RustModule.public("error", documentation = "All error types that operations can return. Documentation on these types is copied from the model.")
    val Operation = RustModule.public("operation", documentation = "All operations that this crate can perform.")
    val Meta = RustModule.public("meta", documentation = "Information about this crate.")
    val Model = RustModule.public("model", documentation = "Data structures used by operation inputs/outputs. Documentation on these types is copied from the model.")
    val Input = RustModule.public("input", documentation = "Input structures for operations. Documentation on these types is copied from the model.")
    val Output = RustModule.public("output", documentation = "Output structures for operations. Documentation on these types is copied from the model.")
    val Types = RustModule.public("types", documentation = "Data primitives referenced by other data types.")
    val Primitives = RustModule.public("primitives", documentation = "Data primitives referenced by other data types.")

    /** crate::types */
    val types = Types.self
    object Types {
        /** crate::types */
        val self = RustModule.public("types", documentation = "Data primitives referenced by other data types.")

        /** crate::types::error */
        val Error = RustModule.public("error", parent = self, documentation = "All error types that operations can return. Documentation on these types is copied from the model.")
    }

    // TODO(CrateReorganization): Remove this module when cleaning up `enableNewCrateOrganizationScheme`
    val Model = RustModule.public("model", documentation = "Data structures used by operation inputs/outputs. Documentation on these types is copied from the model.")
}

object ClientModuleProvider : ModuleProvider {
    override fun moduleForShape(context: ModuleProviderContext, shape: Shape): RustModule.LeafModule = when (shape) {
        is OperationShape -> perOperationModule(context, shape)
        is StructureShape -> when {
            shape.hasTrait<ErrorTrait>() -> ClientRustModule.Error
            shape.hasTrait<ErrorTrait>() -> ClientRustModule.Types.Error
            shape.hasTrait<SyntheticInputTrait>() -> perOperationModule(context, shape)
            shape.hasTrait<SyntheticOutputTrait>() -> perOperationModule(context, shape)
            else -> ClientRustModule.Model
            else -> ClientRustModule.types
        }

        else -> ClientRustModule.Model
        else -> ClientRustModule.types
    }

    override fun moduleForOperationError(
@@ -173,3 +184,9 @@ fun ClientCodegenContext.featureGatedPaginatorModule(symbolProvider: RustSymbolP
        )
        else -> RustModule.public("paginator", "Paginators for the service")
    }

// TODO(CrateReorganization): Remove when cleaning up `enableNewCrateOrganizationScheme`
fun ClientCodegenContext.featureGatedPrimitivesModule() = when (settings.codegenConfig.enableNewCrateOrganizationScheme) {
    true -> ClientRustModule.Primitives
    else -> ClientRustModule.types
}
Loading