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

Enable the tokio-rt feature for generated crates when bytestream is used (#3113)



## Motivation and Context
Fix issue where `ByteStream::from_path` was unusable by without enabling
features

----

_By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice._

---------

Co-authored-by: default avatarysaito1001 <awsaito@amazon.com>
parent 22de9706
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -26,6 +26,11 @@ mod with_sdk_config {
        assert!(config.retry_config().is_none());
        let _s3 = s3::Client::new(&config);
    }

    #[test]
    fn bytestream_from_path_exists() {
        let _ = aws_sdk_s3::primitives::ByteStream::from_path("a/b.txt");
    }
}

mod with_service_config {
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ class RequiredCustomizations : ClientCodegenDecorator {
        ResiliencyReExportCustomization(codegenContext).extras(rustCrate)

        rustCrate.withModule(ClientRustModule.Primitives) {
            pubUseSmithyPrimitives(codegenContext, codegenContext.model)(this)
            pubUseSmithyPrimitives(codegenContext, codegenContext.model, rustCrate)(this)
        }
        rustCrate.withModule(ClientRustModule.Error) {
            rustTemplate(
+10 −1
Original line number Diff line number Diff line
@@ -8,11 +8,13 @@ package software.amazon.smithy.rust.codegen.core.smithy.customizations
import software.amazon.smithy.model.Model
import software.amazon.smithy.model.shapes.Shape
import software.amazon.smithy.model.shapes.StructureShape
import software.amazon.smithy.rust.codegen.core.rustlang.Feature
import software.amazon.smithy.rust.codegen.core.rustlang.Writable
import software.amazon.smithy.rust.codegen.core.rustlang.rustTemplate
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.RuntimeType
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
import software.amazon.smithy.rust.codegen.core.util.hasEventStreamMember
import software.amazon.smithy.rust.codegen.core.util.hasStreamingMember

@@ -41,7 +43,7 @@ private fun hasBlobs(model: Model): Boolean = structUnionMembersMatchPredicate(m
private fun hasDateTimes(model: Model): Boolean = structUnionMembersMatchPredicate(model, Shape::isTimestampShape)

/** Adds re-export statements for Smithy primitives */
fun pubUseSmithyPrimitives(codegenContext: CodegenContext, model: Model): Writable = writable {
fun pubUseSmithyPrimitives(codegenContext: CodegenContext, model: Model, rustCrate: RustCrate): Writable = writable {
    val rc = codegenContext.runtimeConfig
    if (hasBlobs(model)) {
        rustTemplate("pub use #{Blob};", "Blob" to RuntimeType.blob(rc))
@@ -57,6 +59,13 @@ fun pubUseSmithyPrimitives(codegenContext: CodegenContext, model: Model): Writab
        )
    }
    if (hasStreamingOperations(model)) {
        rustCrate.mergeFeature(
            Feature(
                "rt-tokio",
                true,
                listOf("aws-smithy-types/rt-tokio"),
            ),
        )
        rustTemplate(
            """
            pub use #{ByteStream};
+24 −1
Original line number Diff line number Diff line
@@ -8,8 +8,11 @@ package software.amazon.smithy.rust.codegen.core.smithy.customizations
import org.junit.jupiter.api.Test
import software.amazon.smithy.model.Model
import software.amazon.smithy.rust.codegen.core.rustlang.RustWriter
import software.amazon.smithy.rust.codegen.core.smithy.CodegenContext
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
import software.amazon.smithy.rust.codegen.core.smithy.generators.StructureGeneratorTest.Companion.model
import software.amazon.smithy.rust.codegen.core.testutil.asSmithyModel
import software.amazon.smithy.rust.codegen.core.testutil.generatePluginContext
import software.amazon.smithy.rust.codegen.core.testutil.testCodegenContext

class SmithyTypesPubUseExtraTest {
@@ -43,6 +46,22 @@ class SmithyTypesPubUseExtraTest {
        """.asSmithyModel()
    }

    private val rustCrate: RustCrate
    private val codegenContext: CodegenContext = testCodegenContext(model)

    init {
        val (context, _) = generatePluginContext(
            model,
            runtimeConfig = codegenContext.runtimeConfig,
        )
        rustCrate = RustCrate(
            context.fileManifest,
            codegenContext.symbolProvider,
            codegenContext.settings.codegenConfig,
            codegenContext.expectModuleDocProvider(),
        )
    }

    private fun reexportsWithEmptyModel() = reexportsWithMember()
    private fun reexportsWithMember(
        inputMember: String = "",
@@ -50,7 +69,11 @@ class SmithyTypesPubUseExtraTest {
        unionMember: String = "",
        additionalShape: String = "",
    ) = RustWriter.root().let { writer ->
        pubUseSmithyPrimitives(testCodegenContext(model), modelWithMember(inputMember, outputMember, unionMember, additionalShape))(writer)
        pubUseSmithyPrimitives(
            codegenContext,
            modelWithMember(inputMember, outputMember, unionMember, additionalShape),
            rustCrate,
        )(writer)
        writer.toString()
    }

+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ class ServerRequiredCustomizations : ServerCodegenDecorator {
        )

        rustCrate.withModule(ServerRustModule.Types) {
            pubUseSmithyPrimitives(codegenContext, codegenContext.model)(this)
            pubUseSmithyPrimitives(codegenContext, codegenContext.model, rustCrate)(this)
            rustTemplate(
                """
                pub use #{DisplayErrorContext};