44 */
55package aws.sdk.kotlin.codegen.customization.sqs
66
7+ import aws.sdk.kotlin.codegen.ServiceClientCompanionObjectWriter
78import software.amazon.smithy.kotlin.codegen.KotlinSettings
9+ import software.amazon.smithy.kotlin.codegen.core.CodegenContext
810import software.amazon.smithy.kotlin.codegen.core.KotlinWriter
11+ import software.amazon.smithy.kotlin.codegen.integration.AppendingSectionWriter
912import software.amazon.smithy.kotlin.codegen.integration.KotlinIntegration
13+ import software.amazon.smithy.kotlin.codegen.integration.SectionWriterBinding
14+ import software.amazon.smithy.kotlin.codegen.lang.KotlinTypes
1015import software.amazon.smithy.kotlin.codegen.model.buildSymbol
1116import software.amazon.smithy.kotlin.codegen.model.expectShape
1217import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolGenerator
1318import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolMiddleware
19+ import software.amazon.smithy.kotlin.codegen.rendering.util.ConfigProperty
1420import software.amazon.smithy.model.Model
1521import software.amazon.smithy.model.shapes.OperationShape
1622import software.amazon.smithy.model.shapes.ServiceShape
@@ -22,6 +28,75 @@ class SqsMd5ChecksumValidationIntegration : KotlinIntegration {
2228 override fun enabledForService (model : Model , settings : KotlinSettings ): Boolean =
2329 model.expectShape<ServiceShape >(settings.service).isSqs
2430
31+ companion object {
32+ val ValidationEnabledProp : ConfigProperty = ConfigProperty {
33+ name = " checksumValidationEnabled"
34+ symbol = buildSymbol {
35+ name = " ValidationEnabled"
36+ namespace = " aws.sdk.kotlin.services.sqs.internal"
37+ }
38+ documentation = """
39+ Specifies when MD5 checksum validation should be performed for SQS messages. This controls the automatic
40+ calculation and validation of checksums during message operations.
41+
42+ Valid values:
43+ - `ALWAYS` (default) - Checksums are calculated and validated for both sending and receiving operations
44+ (SendMessage, SendMessageBatch, and ReceiveMessage)
45+ - `WHEN_SENDING` - Checksums are only calculated and validated during send operations
46+ (SendMessage and SendMessageBatch)
47+ - `WHEN_RECEIVING` - Checksums are only calculated and validated during receive operations
48+ (ReceiveMessage)
49+ - `NEVER` - No checksum calculation or validation is performed
50+ """ .trimIndent()
51+ }
52+
53+ private val validationScope = buildSymbol {
54+ name = " ValidationScope"
55+ namespace = " aws.sdk.kotlin.services.sqs.internal"
56+ }
57+
58+ val ValidationScopeProp : ConfigProperty = ConfigProperty {
59+ name = " checksumValidationScopes"
60+ symbol = KotlinTypes .Collections .set(validationScope, default = " emptySet()" )
61+ documentation = """
62+ Specifies which parts of an SQS message should undergo MD5 checksum validation. This configuration
63+ accepts a set of validation scopes that determine which message components to validate.
64+
65+ Valid values:
66+ - `MESSAGE_ATTRIBUTES` - Validates checksums for message attributes
67+ - `MESSAGE_SYSTEM_ATTRIBUTES` - Validates checksums for message system attributes
68+ (Note: Not available for ReceiveMessage operations as SQS does not calculate checksums for
69+ system attributes during message receipt)
70+ - `MESSAGE_BODY` - Validates checksums for the message body
71+
72+ Default: All three scopes (MESSAGE_ATTRIBUTES, MESSAGE_SYSTEM_ATTRIBUTES, MESSAGE_BODY)
73+ """ .trimIndent()
74+ }
75+ }
76+
77+ override fun additionalServiceConfigProps (ctx : CodegenContext ): List <ConfigProperty > =
78+ listOf (
79+ ValidationEnabledProp ,
80+ ValidationScopeProp ,
81+ )
82+
83+ override val sectionWriters: List <SectionWriterBinding >
84+ get() = listOf (
85+ SectionWriterBinding (
86+ ServiceClientCompanionObjectWriter .FinalizeEnvironmentalConfig ,
87+ finalizeSqsConfigWriter,
88+ ),
89+ )
90+
91+ // add Sqs-specific config finalization
92+ private val finalizeSqsConfigWriter = AppendingSectionWriter { writer ->
93+ val finalizeSqsConfig = buildSymbol {
94+ name = " finalizeSqsConfig"
95+ namespace = " aws.sdk.kotlin.services.sqs.internal"
96+ }
97+ writer.write(" #T(builder, sharedConfig)" , finalizeSqsConfig)
98+ }
99+
25100 override fun customizeMiddleware (
26101 ctx : ProtocolGenerator .GenerationContext ,
27102 resolved : List <ProtocolMiddleware >,
@@ -45,6 +120,6 @@ internal object SqsMd5ChecksumValidationMiddleware : ProtocolMiddleware {
45120 namespace = " aws.sdk.kotlin.services.sqs"
46121 }
47122
48- writer.write(" op.interceptors.add(#T(config.checksumValidationEnabled, config.checksumValidationScopes, ))" , symbol)
123+ writer.write(" op.interceptors.add(#T(config.checksumValidationEnabled, config.checksumValidationScopes))" , symbol)
49124 }
50125}
0 commit comments