Loading CHANGELOG.next.toml +31 −0 Original line number Diff line number Diff line # Example changelog entries # # [[aws-sdk-rust]] # message = "Fix typos in module documentation for generated crates" # references = ["smithy-rs#920"] Loading Loading @@ -47,6 +48,36 @@ references = ["smithy-rs#1598"] meta = { "breaking" = true, "tada" = true, "bug" = false, "target" = "client" } author = "Velfi" [[smithy-rs]] message = "Update Smithy dependency to 1.23.1. Models using version 2.0 of the IDL are now supported." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = true, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Fix detecting sensitive members through their target shape having the @sensitive trait applied." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = false, "bug" = true } author = "ogudavid" [[smithy-rs]] message = "Remove @sensitive trait tests which applied trait to member. The ability to mark members with @sensitive was removed in Smithy 1.22." references = ["smithy-rs#1623"] meta = { "breaking" = true, "tada" = false, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Fix SetShape matching needing to occur before ListShape since it is now a subclass. Sets were deprecated in Smithy 1.22." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = false, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Fix Union shape test data having an invalid empty union. Break fixed from Smithy 1.21 to Smithy 1.22." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = false, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Add codegen version to generated package metadata" references = ["smithy-rs#1612"] Loading codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerHttpSensitivityGenerator.kt +10 −3 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ class ServerHttpSensitivityGenerator( it.direction == RelationshipDirection.DIRECTED } .filter { it.hasTrait<SensitiveTrait>() isDirectedRelationshipSensitive<SensitiveTrait>(it) }.mapNotNull { it as? MemberShape } Loading Loading @@ -294,7 +294,7 @@ class ServerHttpSensitivityGenerator( it.direction == RelationshipDirection.DIRECTED && !it.shape.hasTrait<A>() } .filter { it.hasTrait<A>() isDirectedRelationshipSensitive<A>(it) } .flatMap { Walker(model) Loading @@ -303,13 +303,20 @@ class ServerHttpSensitivityGenerator( it.direction == RelationshipDirection.DIRECTED } .filter { it.hasTrait<B>() isDirectedRelationshipSensitive<B>(it) }.mapNotNull { it as? MemberShape } } } internal inline fun <reified A : Trait> isDirectedRelationshipSensitive(partnerShape: Shape): Boolean { return partnerShape.hasTrait<A>() || ( partnerShape.asMemberShape().isPresent() && model.expectShape(partnerShape.asMemberShape().get().getTarget()).hasTrait<A>() ) } // Find member shapes with trait `T` contained in a shape enjoying `SensitiveTrait`. // [trait|sensitive] ~> [trait|T] internal inline fun <reified T : Trait> findSensitiveBound(rootShape: Shape): List<MemberShape> { Loading codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt +0 −3 Original line number Diff line number Diff line Loading @@ -658,7 +658,6 @@ class ServerProtocolTestGenerator( FailingTest(RestJson, "RestJsonHttpWithEmptyStructurePayload", TestType.Request), FailingTest(RestJson, "RestJsonHttpResponseCodeDefaultsToModeledCode", TestType.Response), FailingTest(RestJson, "RestJsonWithPayloadExpectsImpliedAccept", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyMalformedBlobInvalidBase64_case1", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyMalformedBlobInvalidBase64_case2", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonWithBodyExpectsApplicationJsonContentType", TestType.MalformedRequest), Loading @@ -673,8 +672,6 @@ class ServerProtocolTestGenerator( FailingTest(RestJson, "RestJsonBodyTimestampDefaultRejectsMalformedEpochSeconds_case5", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyTimestampDefaultRejectsMalformedEpochSeconds_case7", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyTimestampDefaultRejectsMalformedEpochSeconds_case9", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonPathTimestampDefaultRejectsDifferent8601Formats_case13", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonQueryTimestampDefaultRejectsDifferent8601Formats_case13", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonMalformedUnionNoFieldsSet", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonMalformedSetDuplicateBlobs", TestType.MalformedRequest), Loading codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerHttpSensitivityGeneratorTest.kt +22 −65 Original line number Diff line number Diff line Loading @@ -65,36 +65,6 @@ class ServerHttpSensitivityGeneratorTest { assertEquals(members, listOf("code")) } @Test fun `find inner sensitive`() { val model = """ namespace test operation Secret { input: Input, } structure Input { @required @sensitive @httpHeader("header-a") headerA: String, @required @httpHeader("header-b") headerB: String } """.asSmithyModel() val operation = model.operationShapes.toList()[0] val generator = ServerHttpSensitivityGenerator(model, operation, TestRuntimeConfig) val inputShape = operation.inputShape(model) val members: List<String> = generator.findSensitiveBound<HttpHeaderTrait>(inputShape).map(MemberShape::getMemberName) assertEquals(members, listOf("headerA")) } @Test fun `find nested sensitive`() { val model = """ Loading Loading @@ -142,18 +112,9 @@ class ServerHttpSensitivityGeneratorTest { @httpQuery("query_a") queryA: String, @sensitive nestedA: NestedA, nestedB: NestedB } structure NestedA { @required @httpQuery("query_b") queryB: String } @sensitive structure NestedB { @required Loading @@ -167,7 +128,7 @@ class ServerHttpSensitivityGeneratorTest { val input = generator.input()!! val querySensitivity = generator.findQuerySensitivity(input) assertEquals(querySensitivity.allKeysSensitive, false) assertEquals((querySensitivity as ServerHttpSensitivityGenerator.QuerySensitivity.NotSensitiveMapValue).queryKeys, listOf("query_c", "query_b")) assertEquals((querySensitivity as ServerHttpSensitivityGenerator.QuerySensitivity.NotSensitiveMapValue).queryKeys, listOf("query_c")) val testProject = TestWorkspace.testProject(serverTestSymbolProvider(model)) testProject.lib { writer -> Loading @@ -178,7 +139,6 @@ class ServerHttpSensitivityGeneratorTest { rustTemplate( """ assert_eq!(closure("query_a"), #{SmithyHttpServer}::logging::sensitivity::uri::QueryMarker { key: false, value: false }); assert_eq!(closure("query_b"), #{SmithyHttpServer}::logging::sensitivity::uri::QueryMarker { key: false, value: true }); assert_eq!(closure("query_c"), #{SmithyHttpServer}::logging::sensitivity::uri::QueryMarker { key: false, value: true }); """, *codegenScope, Loading Loading @@ -250,9 +210,11 @@ class ServerHttpSensitivityGeneratorTest { queryMap: QueryMap, } map QueryMap { @sensitive key: String, string SensitiveKey map QueryMap { key: SensitiveKey, value: String } Loading Loading @@ -297,10 +259,12 @@ class ServerHttpSensitivityGeneratorTest { queryMap: QueryMap, } @sensitive string SensitiveValue map QueryMap { key: String, @sensitive value: String value: SensitiveValue } """.asSmithyModel() Loading Loading @@ -343,18 +307,9 @@ class ServerHttpSensitivityGeneratorTest { @httpHeader("header-a") headerA: String, @sensitive nestedA: NestedA, nestedB: NestedB } structure NestedA { @required @httpHeader("header-b") headerB: String } @sensitive structure NestedB { @required Loading @@ -367,7 +322,7 @@ class ServerHttpSensitivityGeneratorTest { val inputShape = operation.inputShape(model) val headerData = generator.findHeaderSensitivity(inputShape) assertEquals(headerData.headerKeys, listOf("header-c", "header-b")) assertEquals(headerData.headerKeys, listOf("header-c")) assertEquals((headerData as ServerHttpSensitivityGenerator.HeaderSensitivity.NotSensitiveMapValue).prefixHeader, null) val testProject = TestWorkspace.testProject(serverTestSymbolProvider(model)) Loading @@ -380,8 +335,6 @@ class ServerHttpSensitivityGeneratorTest { """ let name = #{Http}::header::HeaderName::from_static("header-a"); assert_eq!(closure(&name), #{SmithyHttpServer}::logging::sensitivity::headers::HeaderMarker { value: false, key_suffix: None }); let name = #{Http}::header::HeaderName::from_static("header-b"); assert_eq!(closure(&name), #{SmithyHttpServer}::logging::sensitivity::headers::HeaderMarker { value: true, key_suffix: None }); let name = #{Http}::header::HeaderName::from_static("header-c"); assert_eq!(closure(&name), #{SmithyHttpServer}::logging::sensitivity::headers::HeaderMarker { value: true, key_suffix: None }); """, Loading Loading @@ -458,9 +411,10 @@ class ServerHttpSensitivityGeneratorTest { prefix_map: PrefixMap, } map PrefixMap { @sensitive key: String, string SensitiveKey map PrefixMap { key: SensitiveKey, value: String } Loading Loading @@ -511,10 +465,12 @@ class ServerHttpSensitivityGeneratorTest { prefix_map: PrefixMap, } @sensitive string SensitiveValue map PrefixMap { key: String, @sensitive value: String value: SensitiveValue } """.asSmithyModel() Loading Loading @@ -560,15 +516,16 @@ class ServerHttpSensitivityGeneratorTest { input: Input, } @sensitive string SensitiveString structure Input { @required @sensitive @httpLabel labelA: String, labelA: SensitiveString, @required @httpLabel @sensitive labelB: String, labelB: SensitiveString, } """.asSmithyModel() val operation = model.operationShapes.toList()[0] Loading codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/protocols/EventStreamTestTools.kt +1 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ private fun fillInBaseModel( MessageWithNoHeaderPayloadTraits: MessageWithNoHeaderPayloadTraits, SomeError: SomeError, } structure TestStreamInputOutput { @required value: TestStream } structure TestStreamInputOutput { @httpPayload @required value: TestStream } operation TestStreamOp { input: TestStreamInputOutput, output: TestStreamInputOutput, Loading Loading
CHANGELOG.next.toml +31 −0 Original line number Diff line number Diff line # Example changelog entries # # [[aws-sdk-rust]] # message = "Fix typos in module documentation for generated crates" # references = ["smithy-rs#920"] Loading Loading @@ -47,6 +48,36 @@ references = ["smithy-rs#1598"] meta = { "breaking" = true, "tada" = true, "bug" = false, "target" = "client" } author = "Velfi" [[smithy-rs]] message = "Update Smithy dependency to 1.23.1. Models using version 2.0 of the IDL are now supported." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = true, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Fix detecting sensitive members through their target shape having the @sensitive trait applied." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = false, "bug" = true } author = "ogudavid" [[smithy-rs]] message = "Remove @sensitive trait tests which applied trait to member. The ability to mark members with @sensitive was removed in Smithy 1.22." references = ["smithy-rs#1623"] meta = { "breaking" = true, "tada" = false, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Fix SetShape matching needing to occur before ListShape since it is now a subclass. Sets were deprecated in Smithy 1.22." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = false, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Fix Union shape test data having an invalid empty union. Break fixed from Smithy 1.21 to Smithy 1.22." references = ["smithy-rs#1623"] meta = { "breaking" = false, "tada" = false, "bug" = false } author = "ogudavid" [[smithy-rs]] message = "Add codegen version to generated package metadata" references = ["smithy-rs#1612"] Loading
codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerHttpSensitivityGenerator.kt +10 −3 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ class ServerHttpSensitivityGenerator( it.direction == RelationshipDirection.DIRECTED } .filter { it.hasTrait<SensitiveTrait>() isDirectedRelationshipSensitive<SensitiveTrait>(it) }.mapNotNull { it as? MemberShape } Loading Loading @@ -294,7 +294,7 @@ class ServerHttpSensitivityGenerator( it.direction == RelationshipDirection.DIRECTED && !it.shape.hasTrait<A>() } .filter { it.hasTrait<A>() isDirectedRelationshipSensitive<A>(it) } .flatMap { Walker(model) Loading @@ -303,13 +303,20 @@ class ServerHttpSensitivityGenerator( it.direction == RelationshipDirection.DIRECTED } .filter { it.hasTrait<B>() isDirectedRelationshipSensitive<B>(it) }.mapNotNull { it as? MemberShape } } } internal inline fun <reified A : Trait> isDirectedRelationshipSensitive(partnerShape: Shape): Boolean { return partnerShape.hasTrait<A>() || ( partnerShape.asMemberShape().isPresent() && model.expectShape(partnerShape.asMemberShape().get().getTarget()).hasTrait<A>() ) } // Find member shapes with trait `T` contained in a shape enjoying `SensitiveTrait`. // [trait|sensitive] ~> [trait|T] internal inline fun <reified T : Trait> findSensitiveBound(rootShape: Shape): List<MemberShape> { Loading
codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt +0 −3 Original line number Diff line number Diff line Loading @@ -658,7 +658,6 @@ class ServerProtocolTestGenerator( FailingTest(RestJson, "RestJsonHttpWithEmptyStructurePayload", TestType.Request), FailingTest(RestJson, "RestJsonHttpResponseCodeDefaultsToModeledCode", TestType.Response), FailingTest(RestJson, "RestJsonWithPayloadExpectsImpliedAccept", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyMalformedBlobInvalidBase64_case1", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyMalformedBlobInvalidBase64_case2", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonWithBodyExpectsApplicationJsonContentType", TestType.MalformedRequest), Loading @@ -673,8 +672,6 @@ class ServerProtocolTestGenerator( FailingTest(RestJson, "RestJsonBodyTimestampDefaultRejectsMalformedEpochSeconds_case5", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyTimestampDefaultRejectsMalformedEpochSeconds_case7", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonBodyTimestampDefaultRejectsMalformedEpochSeconds_case9", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonPathTimestampDefaultRejectsDifferent8601Formats_case13", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonQueryTimestampDefaultRejectsDifferent8601Formats_case13", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonMalformedUnionNoFieldsSet", TestType.MalformedRequest), FailingTest(RestJson, "RestJsonMalformedSetDuplicateBlobs", TestType.MalformedRequest), Loading
codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerHttpSensitivityGeneratorTest.kt +22 −65 Original line number Diff line number Diff line Loading @@ -65,36 +65,6 @@ class ServerHttpSensitivityGeneratorTest { assertEquals(members, listOf("code")) } @Test fun `find inner sensitive`() { val model = """ namespace test operation Secret { input: Input, } structure Input { @required @sensitive @httpHeader("header-a") headerA: String, @required @httpHeader("header-b") headerB: String } """.asSmithyModel() val operation = model.operationShapes.toList()[0] val generator = ServerHttpSensitivityGenerator(model, operation, TestRuntimeConfig) val inputShape = operation.inputShape(model) val members: List<String> = generator.findSensitiveBound<HttpHeaderTrait>(inputShape).map(MemberShape::getMemberName) assertEquals(members, listOf("headerA")) } @Test fun `find nested sensitive`() { val model = """ Loading Loading @@ -142,18 +112,9 @@ class ServerHttpSensitivityGeneratorTest { @httpQuery("query_a") queryA: String, @sensitive nestedA: NestedA, nestedB: NestedB } structure NestedA { @required @httpQuery("query_b") queryB: String } @sensitive structure NestedB { @required Loading @@ -167,7 +128,7 @@ class ServerHttpSensitivityGeneratorTest { val input = generator.input()!! val querySensitivity = generator.findQuerySensitivity(input) assertEquals(querySensitivity.allKeysSensitive, false) assertEquals((querySensitivity as ServerHttpSensitivityGenerator.QuerySensitivity.NotSensitiveMapValue).queryKeys, listOf("query_c", "query_b")) assertEquals((querySensitivity as ServerHttpSensitivityGenerator.QuerySensitivity.NotSensitiveMapValue).queryKeys, listOf("query_c")) val testProject = TestWorkspace.testProject(serverTestSymbolProvider(model)) testProject.lib { writer -> Loading @@ -178,7 +139,6 @@ class ServerHttpSensitivityGeneratorTest { rustTemplate( """ assert_eq!(closure("query_a"), #{SmithyHttpServer}::logging::sensitivity::uri::QueryMarker { key: false, value: false }); assert_eq!(closure("query_b"), #{SmithyHttpServer}::logging::sensitivity::uri::QueryMarker { key: false, value: true }); assert_eq!(closure("query_c"), #{SmithyHttpServer}::logging::sensitivity::uri::QueryMarker { key: false, value: true }); """, *codegenScope, Loading Loading @@ -250,9 +210,11 @@ class ServerHttpSensitivityGeneratorTest { queryMap: QueryMap, } map QueryMap { @sensitive key: String, string SensitiveKey map QueryMap { key: SensitiveKey, value: String } Loading Loading @@ -297,10 +259,12 @@ class ServerHttpSensitivityGeneratorTest { queryMap: QueryMap, } @sensitive string SensitiveValue map QueryMap { key: String, @sensitive value: String value: SensitiveValue } """.asSmithyModel() Loading Loading @@ -343,18 +307,9 @@ class ServerHttpSensitivityGeneratorTest { @httpHeader("header-a") headerA: String, @sensitive nestedA: NestedA, nestedB: NestedB } structure NestedA { @required @httpHeader("header-b") headerB: String } @sensitive structure NestedB { @required Loading @@ -367,7 +322,7 @@ class ServerHttpSensitivityGeneratorTest { val inputShape = operation.inputShape(model) val headerData = generator.findHeaderSensitivity(inputShape) assertEquals(headerData.headerKeys, listOf("header-c", "header-b")) assertEquals(headerData.headerKeys, listOf("header-c")) assertEquals((headerData as ServerHttpSensitivityGenerator.HeaderSensitivity.NotSensitiveMapValue).prefixHeader, null) val testProject = TestWorkspace.testProject(serverTestSymbolProvider(model)) Loading @@ -380,8 +335,6 @@ class ServerHttpSensitivityGeneratorTest { """ let name = #{Http}::header::HeaderName::from_static("header-a"); assert_eq!(closure(&name), #{SmithyHttpServer}::logging::sensitivity::headers::HeaderMarker { value: false, key_suffix: None }); let name = #{Http}::header::HeaderName::from_static("header-b"); assert_eq!(closure(&name), #{SmithyHttpServer}::logging::sensitivity::headers::HeaderMarker { value: true, key_suffix: None }); let name = #{Http}::header::HeaderName::from_static("header-c"); assert_eq!(closure(&name), #{SmithyHttpServer}::logging::sensitivity::headers::HeaderMarker { value: true, key_suffix: None }); """, Loading Loading @@ -458,9 +411,10 @@ class ServerHttpSensitivityGeneratorTest { prefix_map: PrefixMap, } map PrefixMap { @sensitive key: String, string SensitiveKey map PrefixMap { key: SensitiveKey, value: String } Loading Loading @@ -511,10 +465,12 @@ class ServerHttpSensitivityGeneratorTest { prefix_map: PrefixMap, } @sensitive string SensitiveValue map PrefixMap { key: String, @sensitive value: String value: SensitiveValue } """.asSmithyModel() Loading Loading @@ -560,15 +516,16 @@ class ServerHttpSensitivityGeneratorTest { input: Input, } @sensitive string SensitiveString structure Input { @required @sensitive @httpLabel labelA: String, labelA: SensitiveString, @required @httpLabel @sensitive labelB: String, labelB: SensitiveString, } """.asSmithyModel() val operation = model.operationShapes.toList()[0] Loading
codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/protocols/EventStreamTestTools.kt +1 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ private fun fillInBaseModel( MessageWithNoHeaderPayloadTraits: MessageWithNoHeaderPayloadTraits, SomeError: SomeError, } structure TestStreamInputOutput { @required value: TestStream } structure TestStreamInputOutput { @httpPayload @required value: TestStream } operation TestStreamOp { input: TestStreamInputOutput, output: TestStreamInputOutput, Loading