From 6deae2f8536a891bda5666d011e0d3a80c41ba6a Mon Sep 17 00:00:00 2001 From: Fahad Zubair Date: Fri, 18 Oct 2024 01:23:12 +0100 Subject: [PATCH] New test added that has commented out recursive structs --- .../core/smithy/generators/TestEnumType.kt | 32 +++++++++ .../codegen/server/smithy/ConstraintsTest.kt | 70 +++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/TestEnumType.kt b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/TestEnumType.kt index 5699c9e5ca..019d027ece 100644 --- a/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/TestEnumType.kt +++ b/codegen-core/src/test/kotlin/software/amazon/smithy/rust/codegen/core/smithy/generators/TestEnumType.kt @@ -10,6 +10,7 @@ import software.amazon.smithy.rust.codegen.core.rustlang.rust 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.RuntimeType +import software.amazon.smithy.rust.codegen.core.smithy.RuntimeType.Companion.preludeScope import software.amazon.smithy.rust.codegen.core.util.dq object TestEnumType : EnumType() { @@ -49,4 +50,35 @@ object TestEnumType : EnumType() { """, ) } + + override fun implFromForStrForUnnamedEnum(context: EnumGeneratorContext): Writable = + writable { + rustTemplate( + """ + impl #{From} for ${context.enumName} where T: #{AsRef} { + fn from(s: T) -> Self { + ${context.enumName}(s.as_ref().to_owned()) + } + } + """, + *preludeScope, + ) + } + + override fun implFromStrForUnnamedEnum(context: EnumGeneratorContext): Writable = + writable { + // Add an infallible FromStr implementation for uniformity + rustTemplate( + """ + impl ::std::str::FromStr for ${context.enumName} { + type Err = ::std::convert::Infallible; + + fn from_str(s: &str) -> #{Result}::Err> { + #{Ok}(${context.enumName}::from(s)) + } + } + """, + *preludeScope, + ) + } } diff --git a/codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/ConstraintsTest.kt b/codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/ConstraintsTest.kt index 1fb71f8315..a4ddc70e81 100644 --- a/codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/ConstraintsTest.kt +++ b/codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/ConstraintsTest.kt @@ -26,6 +26,7 @@ import software.amazon.smithy.model.traits.AbstractTrait import software.amazon.smithy.model.transform.ModelTransformer import software.amazon.smithy.protocol.traits.Rpcv2CborTrait import software.amazon.smithy.rust.codegen.core.testutil.IntegrationTestParams +import software.amazon.smithy.rust.codegen.core.testutil.ServerAdditionalSettings import software.amazon.smithy.rust.codegen.core.testutil.asSmithyModel import software.amazon.smithy.rust.codegen.core.util.lookup import software.amazon.smithy.rust.codegen.server.smithy.testutil.serverIntegrationTest @@ -305,4 +306,73 @@ class ConstraintsTest { ) { _, _ -> } } + + @Test + fun `KeyList should work`() { + val model = + """ + namespace test + use aws.protocols#restJson1 + use smithy.framework#ValidationException + + @restJson1 + service SampleService { + operations: [BatchGetItem] + } + + @http(uri: "/dailySummary", method: "POST") + operation BatchGetItem { + input : BatchGetItemInput + errors: [ValidationException] + } + structure BatchGetItemInput { + RequestItems: KeyList + } + @length( + min: 1 + max: 100 + ) + list KeyList { + member: Key + } + map Key { + key: AttributeName + value: SomeValue + } + @length( + min: 0 + max: 65535 + ) + string AttributeName + string SomeValue + + //union AttributeValue { + // M: MapAttributeValue + // L: ListAttributeValue + //} + //map MapAttributeValue { + // key: AttributeName + // value: AttributeValue + //} + //list ListAttributeValue { + // member: AttributeValue + //} + """.asSmithyModel(smithyVersion = "2") + + val dir = File("/Users/fahadzub/kaam/baykar/smithy-gen/keys") + if (dir.exists()) { + dir.deleteRecursively() + } + + // Simply compiling the crate is sufficient as a test. + serverIntegrationTest( + model, + IntegrationTestParams( + service = "test#SampleService", + additionalSettings = ServerAdditionalSettings.builder().generateCodegenComments(true).toObjectNode(), + overrideTestDir = dir, + ), + ) { _, _ -> + } + } }