@@ -160,6 +160,7 @@ public void writeAdditionalFiles(
160
160
if (supportsComputeInputChecksumsWorkflow ) {
161
161
goDelegator .useShapeWriter (service , writer -> {
162
162
generateInputComputedChecksumMetadataHelpers (writer , model , symbolProvider , service );
163
+ writePackageLevelAddInputChecksumMiddleware (writer );
163
164
});
164
165
}
165
166
@@ -257,16 +258,14 @@ private void writeInputMiddlewareHelper(
257
258
writer .openBlock ("func $L(stack *middleware.Stack, options Options) error {" , "}" ,
258
259
getAddInputMiddlewareFuncName (operationName ), () -> {
259
260
writer .write ("""
260
- return $T (stack, $T{
261
+ return addInputChecksumMiddleware (stack, $T{
261
262
GetAlgorithm: $L,
262
263
RequireChecksum: $L,
263
264
RequestChecksumCalculation: options.RequestChecksumCalculation,
264
265
EnableTrailingChecksum: $L,
265
266
EnableComputeSHA256PayloadHash: true,
266
267
EnableDecodedContentLengthHeader: $L,
267
268
})""" ,
268
- SymbolUtils .createValueSymbolBuilder ("AddInputMiddleware" ,
269
- AwsGoDependency .SERVICE_INTERNAL_CHECKSUM ).build (),
270
269
SymbolUtils .createValueSymbolBuilder ("InputMiddlewareOptions" ,
271
270
AwsGoDependency .SERVICE_INTERNAL_CHECKSUM ).build (),
272
271
hasRequestAlgorithmMember ?
@@ -279,6 +278,48 @@ private void writeInputMiddlewareHelper(
279
278
writer .insertTrailingNewline ();
280
279
}
281
280
281
+ // adapted (service/internal/checksum).AddInputMiddleware to give the service client control over its middleware stack,
282
+ // per #2507
283
+ private void writePackageLevelAddInputChecksumMiddleware (GoWriter writer ) {
284
+ writer .addUseImports (SmithyGoDependency .SMITHY_MIDDLEWARE );
285
+ writer .addUseImports (AwsGoDependency .SERVICE_INTERNAL_CHECKSUM );
286
+ writer .write ("""
287
+ func addInputChecksumMiddleware(stack *middleware.Stack, options internalChecksum.InputMiddlewareOptions) (err error) {
288
+ err = stack.Initialize.Add(&internalChecksum.SetupInputContext{
289
+ GetAlgorithm: options.GetAlgorithm,
290
+ RequireChecksum: options.RequireChecksum,
291
+ RequestChecksumCalculation: options.RequestChecksumCalculation,
292
+ }, middleware.Before)
293
+ if err != nil {
294
+ return err
295
+ }
296
+
297
+ stack.Build.Remove("ContentChecksum")
298
+
299
+ inputChecksum := &internalChecksum.ComputeInputPayloadChecksum{
300
+ EnableTrailingChecksum: options.EnableTrailingChecksum,
301
+ EnableComputePayloadHash: options.EnableComputeSHA256PayloadHash,
302
+ EnableDecodedContentLengthHeader: options.EnableDecodedContentLengthHeader,
303
+ }
304
+ if err := stack.Finalize.Insert(inputChecksum, "ResolveEndpointV2", middleware.After); err != nil {
305
+ return err
306
+ }
307
+
308
+ if options.EnableTrailingChecksum {
309
+ trailerMiddleware := &internalChecksum.AddInputChecksumTrailer{
310
+ EnableTrailingChecksum: inputChecksum.EnableTrailingChecksum,
311
+ EnableComputePayloadHash: inputChecksum.EnableComputePayloadHash,
312
+ EnableDecodedContentLengthHeader: inputChecksum.EnableDecodedContentLengthHeader,
313
+ }
314
+ if err := stack.Finalize.Insert(trailerMiddleware, inputChecksum.ID(), middleware.After); err != nil {
315
+ return err
316
+ }
317
+ }
318
+
319
+ return nil
320
+ }""" );
321
+ }
322
+
282
323
private void writeOutputMiddlewareHelper (
283
324
GoWriter writer ,
284
325
Model model ,
0 commit comments