src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

api_client.go (36622B)


      1 // Code generated by smithy-go-codegen DO NOT EDIT.
      2 
      3 package route53
      4 
      5 import (
      6 	"context"
      7 	"errors"
      8 	"fmt"
      9 	"github.com/aws/aws-sdk-go-v2/aws"
     10 	"github.com/aws/aws-sdk-go-v2/aws/defaults"
     11 	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
     12 	"github.com/aws/aws-sdk-go-v2/aws/retry"
     13 	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
     14 	awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
     15 	internalauth "github.com/aws/aws-sdk-go-v2/internal/auth"
     16 	internalauthsmithy "github.com/aws/aws-sdk-go-v2/internal/auth/smithy"
     17 	internalConfig "github.com/aws/aws-sdk-go-v2/internal/configsources"
     18 	internalmiddleware "github.com/aws/aws-sdk-go-v2/internal/middleware"
     19 	route53cust "github.com/aws/aws-sdk-go-v2/service/route53/internal/customizations"
     20 	smithy "github.com/aws/smithy-go"
     21 	smithyauth "github.com/aws/smithy-go/auth"
     22 	smithydocument "github.com/aws/smithy-go/document"
     23 	"github.com/aws/smithy-go/logging"
     24 	"github.com/aws/smithy-go/metrics"
     25 	"github.com/aws/smithy-go/middleware"
     26 	"github.com/aws/smithy-go/tracing"
     27 	smithyhttp "github.com/aws/smithy-go/transport/http"
     28 	"net"
     29 	"net/http"
     30 	"strings"
     31 	"sync/atomic"
     32 	"time"
     33 )
     34 
     35 const ServiceID = "Route 53"
     36 const ServiceAPIVersion = "2013-04-01"
     37 
     38 type operationMetrics struct {
     39 	Duration                metrics.Float64Histogram
     40 	SerializeDuration       metrics.Float64Histogram
     41 	ResolveIdentityDuration metrics.Float64Histogram
     42 	ResolveEndpointDuration metrics.Float64Histogram
     43 	SignRequestDuration     metrics.Float64Histogram
     44 	DeserializeDuration     metrics.Float64Histogram
     45 }
     46 
     47 func (m *operationMetrics) histogramFor(name string) metrics.Float64Histogram {
     48 	switch name {
     49 	case "client.call.duration":
     50 		return m.Duration
     51 	case "client.call.serialization_duration":
     52 		return m.SerializeDuration
     53 	case "client.call.resolve_identity_duration":
     54 		return m.ResolveIdentityDuration
     55 	case "client.call.resolve_endpoint_duration":
     56 		return m.ResolveEndpointDuration
     57 	case "client.call.signing_duration":
     58 		return m.SignRequestDuration
     59 	case "client.call.deserialization_duration":
     60 		return m.DeserializeDuration
     61 	default:
     62 		panic("unrecognized operation metric")
     63 	}
     64 }
     65 
     66 func timeOperationMetric[T any](
     67 	ctx context.Context, metric string, fn func() (T, error),
     68 	opts ...metrics.RecordMetricOption,
     69 ) (T, error) {
     70 	instr := getOperationMetrics(ctx).histogramFor(metric)
     71 	opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...)
     72 
     73 	start := time.Now()
     74 	v, err := fn()
     75 	end := time.Now()
     76 
     77 	elapsed := end.Sub(start)
     78 	instr.Record(ctx, float64(elapsed)/1e9, opts...)
     79 	return v, err
     80 }
     81 
     82 func startMetricTimer(ctx context.Context, metric string, opts ...metrics.RecordMetricOption) func() {
     83 	instr := getOperationMetrics(ctx).histogramFor(metric)
     84 	opts = append([]metrics.RecordMetricOption{withOperationMetadata(ctx)}, opts...)
     85 
     86 	var ended bool
     87 	start := time.Now()
     88 	return func() {
     89 		if ended {
     90 			return
     91 		}
     92 		ended = true
     93 
     94 		end := time.Now()
     95 
     96 		elapsed := end.Sub(start)
     97 		instr.Record(ctx, float64(elapsed)/1e9, opts...)
     98 	}
     99 }
    100 
    101 func withOperationMetadata(ctx context.Context) metrics.RecordMetricOption {
    102 	return func(o *metrics.RecordMetricOptions) {
    103 		o.Properties.Set("rpc.service", middleware.GetServiceID(ctx))
    104 		o.Properties.Set("rpc.method", middleware.GetOperationName(ctx))
    105 	}
    106 }
    107 
    108 type operationMetricsKey struct{}
    109 
    110 func withOperationMetrics(parent context.Context, mp metrics.MeterProvider) (context.Context, error) {
    111 	meter := mp.Meter("github.com/aws/aws-sdk-go-v2/service/route53")
    112 	om := &operationMetrics{}
    113 
    114 	var err error
    115 
    116 	om.Duration, err = operationMetricTimer(meter, "client.call.duration",
    117 		"Overall call duration (including retries and time to send or receive request and response body)")
    118 	if err != nil {
    119 		return nil, err
    120 	}
    121 	om.SerializeDuration, err = operationMetricTimer(meter, "client.call.serialization_duration",
    122 		"The time it takes to serialize a message body")
    123 	if err != nil {
    124 		return nil, err
    125 	}
    126 	om.ResolveIdentityDuration, err = operationMetricTimer(meter, "client.call.auth.resolve_identity_duration",
    127 		"The time taken to acquire an identity (AWS credentials, bearer token, etc) from an Identity Provider")
    128 	if err != nil {
    129 		return nil, err
    130 	}
    131 	om.ResolveEndpointDuration, err = operationMetricTimer(meter, "client.call.resolve_endpoint_duration",
    132 		"The time it takes to resolve an endpoint (endpoint resolver, not DNS) for the request")
    133 	if err != nil {
    134 		return nil, err
    135 	}
    136 	om.SignRequestDuration, err = operationMetricTimer(meter, "client.call.auth.signing_duration",
    137 		"The time it takes to sign a request")
    138 	if err != nil {
    139 		return nil, err
    140 	}
    141 	om.DeserializeDuration, err = operationMetricTimer(meter, "client.call.deserialization_duration",
    142 		"The time it takes to deserialize a message body")
    143 	if err != nil {
    144 		return nil, err
    145 	}
    146 
    147 	return context.WithValue(parent, operationMetricsKey{}, om), nil
    148 }
    149 
    150 func operationMetricTimer(m metrics.Meter, name, desc string) (metrics.Float64Histogram, error) {
    151 	return m.Float64Histogram(name, func(o *metrics.InstrumentOptions) {
    152 		o.UnitLabel = "s"
    153 		o.Description = desc
    154 	})
    155 }
    156 
    157 func getOperationMetrics(ctx context.Context) *operationMetrics {
    158 	return ctx.Value(operationMetricsKey{}).(*operationMetrics)
    159 }
    160 
    161 func operationTracer(p tracing.TracerProvider) tracing.Tracer {
    162 	return p.Tracer("github.com/aws/aws-sdk-go-v2/service/route53")
    163 }
    164 
    165 // Client provides the API client to make operations call for Amazon Route 53.
    166 type Client struct {
    167 	options Options
    168 
    169 	// Difference between the time reported by the server and the client
    170 	timeOffset *atomic.Int64
    171 }
    172 
    173 // New returns an initialized Client based on the functional options. Provide
    174 // additional functional options to further configure the behavior of the client,
    175 // such as changing the client's endpoint or adding custom middleware behavior.
    176 func New(options Options, optFns ...func(*Options)) *Client {
    177 	options = options.Copy()
    178 
    179 	resolveDefaultLogger(&options)
    180 
    181 	setResolvedDefaultsMode(&options)
    182 
    183 	resolveRetryer(&options)
    184 
    185 	resolveHTTPClient(&options)
    186 
    187 	resolveHTTPSignerV4(&options)
    188 
    189 	resolveEndpointResolverV2(&options)
    190 
    191 	resolveTracerProvider(&options)
    192 
    193 	resolveMeterProvider(&options)
    194 
    195 	resolveAuthSchemeResolver(&options)
    196 
    197 	for _, fn := range optFns {
    198 		fn(&options)
    199 	}
    200 
    201 	finalizeRetryMaxAttempts(&options)
    202 
    203 	ignoreAnonymousAuth(&options)
    204 
    205 	wrapWithAnonymousAuth(&options)
    206 
    207 	resolveAuthSchemes(&options)
    208 
    209 	client := &Client{
    210 		options: options,
    211 	}
    212 
    213 	initializeTimeOffsetResolver(client)
    214 
    215 	return client
    216 }
    217 
    218 // Options returns a copy of the client configuration.
    219 //
    220 // Callers SHOULD NOT perform mutations on any inner structures within client
    221 // config. Config overrides should instead be made on a per-operation basis through
    222 // functional options.
    223 func (c *Client) Options() Options {
    224 	return c.options.Copy()
    225 }
    226 
    227 func (c *Client) invokeOperation(
    228 	ctx context.Context, opID string, params interface{}, optFns []func(*Options), stackFns ...func(*middleware.Stack, Options) error,
    229 ) (
    230 	result interface{}, metadata middleware.Metadata, err error,
    231 ) {
    232 	ctx = middleware.ClearStackValues(ctx)
    233 	ctx = middleware.WithServiceID(ctx, ServiceID)
    234 	ctx = middleware.WithOperationName(ctx, opID)
    235 
    236 	stack := middleware.NewStack(opID, smithyhttp.NewStackRequest)
    237 	options := c.options.Copy()
    238 
    239 	for _, fn := range optFns {
    240 		fn(&options)
    241 	}
    242 
    243 	finalizeOperationRetryMaxAttempts(&options, *c)
    244 
    245 	finalizeClientEndpointResolverOptions(&options)
    246 
    247 	for _, fn := range stackFns {
    248 		if err := fn(stack, options); err != nil {
    249 			return nil, metadata, err
    250 		}
    251 	}
    252 
    253 	for _, fn := range options.APIOptions {
    254 		if err := fn(stack); err != nil {
    255 			return nil, metadata, err
    256 		}
    257 	}
    258 
    259 	ctx, err = withOperationMetrics(ctx, options.MeterProvider)
    260 	if err != nil {
    261 		return nil, metadata, err
    262 	}
    263 
    264 	tracer := operationTracer(options.TracerProvider)
    265 	spanName := fmt.Sprintf("%s.%s", ServiceID, opID)
    266 
    267 	ctx = tracing.WithOperationTracer(ctx, tracer)
    268 
    269 	ctx, span := tracer.StartSpan(ctx, spanName, func(o *tracing.SpanOptions) {
    270 		o.Kind = tracing.SpanKindClient
    271 		o.Properties.Set("rpc.system", "aws-api")
    272 		o.Properties.Set("rpc.method", opID)
    273 		o.Properties.Set("rpc.service", ServiceID)
    274 	})
    275 	endTimer := startMetricTimer(ctx, "client.call.duration")
    276 	defer endTimer()
    277 	defer span.End()
    278 
    279 	handler := smithyhttp.NewClientHandlerWithOptions(options.HTTPClient, func(o *smithyhttp.ClientHandler) {
    280 		o.Meter = options.MeterProvider.Meter("github.com/aws/aws-sdk-go-v2/service/route53")
    281 	})
    282 	decorated := middleware.DecorateHandler(handler, stack)
    283 	result, metadata, err = decorated.Handle(ctx, params)
    284 	if err != nil {
    285 		span.SetProperty("exception.type", fmt.Sprintf("%T", err))
    286 		span.SetProperty("exception.message", err.Error())
    287 
    288 		var aerr smithy.APIError
    289 		if errors.As(err, &aerr) {
    290 			span.SetProperty("api.error_code", aerr.ErrorCode())
    291 			span.SetProperty("api.error_message", aerr.ErrorMessage())
    292 			span.SetProperty("api.error_fault", aerr.ErrorFault().String())
    293 		}
    294 
    295 		err = &smithy.OperationError{
    296 			ServiceID:     ServiceID,
    297 			OperationName: opID,
    298 			Err:           err,
    299 		}
    300 	}
    301 
    302 	span.SetProperty("error", err != nil)
    303 	if err == nil {
    304 		span.SetStatus(tracing.SpanStatusOK)
    305 	} else {
    306 		span.SetStatus(tracing.SpanStatusError)
    307 	}
    308 
    309 	return result, metadata, err
    310 }
    311 
    312 type operationInputKey struct{}
    313 
    314 func setOperationInput(ctx context.Context, input interface{}) context.Context {
    315 	return middleware.WithStackValue(ctx, operationInputKey{}, input)
    316 }
    317 
    318 func getOperationInput(ctx context.Context) interface{} {
    319 	return middleware.GetStackValue(ctx, operationInputKey{})
    320 }
    321 
    322 type setOperationInputMiddleware struct {
    323 }
    324 
    325 func (*setOperationInputMiddleware) ID() string {
    326 	return "setOperationInput"
    327 }
    328 
    329 func (m *setOperationInputMiddleware) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (
    330 	out middleware.SerializeOutput, metadata middleware.Metadata, err error,
    331 ) {
    332 	ctx = setOperationInput(ctx, in.Parameters)
    333 	return next.HandleSerialize(ctx, in)
    334 }
    335 
    336 func addProtocolFinalizerMiddlewares(stack *middleware.Stack, options Options, operation string) error {
    337 	if err := stack.Finalize.Add(&resolveAuthSchemeMiddleware{operation: operation, options: options}, middleware.Before); err != nil {
    338 		return fmt.Errorf("add ResolveAuthScheme: %w", err)
    339 	}
    340 	if err := stack.Finalize.Insert(&getIdentityMiddleware{options: options}, "ResolveAuthScheme", middleware.After); err != nil {
    341 		return fmt.Errorf("add GetIdentity: %v", err)
    342 	}
    343 	if err := stack.Finalize.Insert(&resolveEndpointV2Middleware{options: options}, "GetIdentity", middleware.After); err != nil {
    344 		return fmt.Errorf("add ResolveEndpointV2: %v", err)
    345 	}
    346 	if err := stack.Finalize.Insert(&signRequestMiddleware{options: options}, "ResolveEndpointV2", middleware.After); err != nil {
    347 		return fmt.Errorf("add Signing: %w", err)
    348 	}
    349 	return nil
    350 }
    351 func resolveAuthSchemeResolver(options *Options) {
    352 	if options.AuthSchemeResolver == nil {
    353 		options.AuthSchemeResolver = &defaultAuthSchemeResolver{}
    354 	}
    355 }
    356 
    357 func resolveAuthSchemes(options *Options) {
    358 	if options.AuthSchemes == nil {
    359 		options.AuthSchemes = []smithyhttp.AuthScheme{
    360 			internalauth.NewHTTPAuthScheme("aws.auth#sigv4", &internalauthsmithy.V4SignerAdapter{
    361 				Signer:     options.HTTPSignerV4,
    362 				Logger:     options.Logger,
    363 				LogSigning: options.ClientLogMode.IsSigning(),
    364 			}),
    365 		}
    366 	}
    367 }
    368 
    369 type noSmithyDocumentSerde = smithydocument.NoSerde
    370 
    371 type legacyEndpointContextSetter struct {
    372 	LegacyResolver EndpointResolver
    373 }
    374 
    375 func (*legacyEndpointContextSetter) ID() string {
    376 	return "legacyEndpointContextSetter"
    377 }
    378 
    379 func (m *legacyEndpointContextSetter) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
    380 	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
    381 ) {
    382 	if m.LegacyResolver != nil {
    383 		ctx = awsmiddleware.SetRequiresLegacyEndpoints(ctx, true)
    384 	}
    385 
    386 	return next.HandleInitialize(ctx, in)
    387 
    388 }
    389 func addlegacyEndpointContextSetter(stack *middleware.Stack, o Options) error {
    390 	return stack.Initialize.Add(&legacyEndpointContextSetter{
    391 		LegacyResolver: o.EndpointResolver,
    392 	}, middleware.Before)
    393 }
    394 
    395 func resolveDefaultLogger(o *Options) {
    396 	if o.Logger != nil {
    397 		return
    398 	}
    399 	o.Logger = logging.Nop{}
    400 }
    401 
    402 func addSetLoggerMiddleware(stack *middleware.Stack, o Options) error {
    403 	return middleware.AddSetLoggerMiddleware(stack, o.Logger)
    404 }
    405 
    406 func setResolvedDefaultsMode(o *Options) {
    407 	if len(o.resolvedDefaultsMode) > 0 {
    408 		return
    409 	}
    410 
    411 	var mode aws.DefaultsMode
    412 	mode.SetFromString(string(o.DefaultsMode))
    413 
    414 	if mode == aws.DefaultsModeAuto {
    415 		mode = defaults.ResolveDefaultsModeAuto(o.Region, o.RuntimeEnvironment)
    416 	}
    417 
    418 	o.resolvedDefaultsMode = mode
    419 }
    420 
    421 // NewFromConfig returns a new client from the provided config.
    422 func NewFromConfig(cfg aws.Config, optFns ...func(*Options)) *Client {
    423 	opts := Options{
    424 		Region:               cfg.Region,
    425 		DefaultsMode:         cfg.DefaultsMode,
    426 		RuntimeEnvironment:   cfg.RuntimeEnvironment,
    427 		HTTPClient:           cfg.HTTPClient,
    428 		Credentials:          cfg.Credentials,
    429 		APIOptions:           cfg.APIOptions,
    430 		Logger:               cfg.Logger,
    431 		ClientLogMode:        cfg.ClientLogMode,
    432 		AppID:                cfg.AppID,
    433 		AuthSchemePreference: cfg.AuthSchemePreference,
    434 	}
    435 	resolveAWSRetryerProvider(cfg, &opts)
    436 	resolveAWSRetryMaxAttempts(cfg, &opts)
    437 	resolveAWSRetryMode(cfg, &opts)
    438 	resolveAWSEndpointResolver(cfg, &opts)
    439 	resolveInterceptors(cfg, &opts)
    440 	resolveUseDualStackEndpoint(cfg, &opts)
    441 	resolveUseFIPSEndpoint(cfg, &opts)
    442 	resolveBaseEndpoint(cfg, &opts)
    443 	return New(opts, func(o *Options) {
    444 		for _, opt := range cfg.ServiceOptions {
    445 			opt(ServiceID, o)
    446 		}
    447 		for _, opt := range optFns {
    448 			opt(o)
    449 		}
    450 	})
    451 }
    452 
    453 func resolveHTTPClient(o *Options) {
    454 	var buildable *awshttp.BuildableClient
    455 
    456 	if o.HTTPClient != nil {
    457 		var ok bool
    458 		buildable, ok = o.HTTPClient.(*awshttp.BuildableClient)
    459 		if !ok {
    460 			return
    461 		}
    462 	} else {
    463 		buildable = awshttp.NewBuildableClient()
    464 	}
    465 
    466 	modeConfig, err := defaults.GetModeConfiguration(o.resolvedDefaultsMode)
    467 	if err == nil {
    468 		buildable = buildable.WithDialerOptions(func(dialer *net.Dialer) {
    469 			if dialerTimeout, ok := modeConfig.GetConnectTimeout(); ok {
    470 				dialer.Timeout = dialerTimeout
    471 			}
    472 		})
    473 
    474 		buildable = buildable.WithTransportOptions(func(transport *http.Transport) {
    475 			if tlsHandshakeTimeout, ok := modeConfig.GetTLSNegotiationTimeout(); ok {
    476 				transport.TLSHandshakeTimeout = tlsHandshakeTimeout
    477 			}
    478 		})
    479 	}
    480 
    481 	o.HTTPClient = buildable
    482 }
    483 
    484 func resolveRetryer(o *Options) {
    485 	if o.Retryer != nil {
    486 		return
    487 	}
    488 
    489 	if len(o.RetryMode) == 0 {
    490 		modeConfig, err := defaults.GetModeConfiguration(o.resolvedDefaultsMode)
    491 		if err == nil {
    492 			o.RetryMode = modeConfig.RetryMode
    493 		}
    494 	}
    495 	if len(o.RetryMode) == 0 {
    496 		o.RetryMode = aws.RetryModeStandard
    497 	}
    498 
    499 	var standardOptions []func(*retry.StandardOptions)
    500 	if v := o.RetryMaxAttempts; v != 0 {
    501 		standardOptions = append(standardOptions, func(so *retry.StandardOptions) {
    502 			so.MaxAttempts = v
    503 		})
    504 	}
    505 
    506 	switch o.RetryMode {
    507 	case aws.RetryModeAdaptive:
    508 		var adaptiveOptions []func(*retry.AdaptiveModeOptions)
    509 		if len(standardOptions) != 0 {
    510 			adaptiveOptions = append(adaptiveOptions, func(ao *retry.AdaptiveModeOptions) {
    511 				ao.StandardOptions = append(ao.StandardOptions, standardOptions...)
    512 			})
    513 		}
    514 		o.Retryer = retry.NewAdaptiveMode(adaptiveOptions...)
    515 
    516 	default:
    517 		o.Retryer = retry.NewStandard(standardOptions...)
    518 	}
    519 }
    520 
    521 func resolveAWSRetryerProvider(cfg aws.Config, o *Options) {
    522 	if cfg.Retryer == nil {
    523 		return
    524 	}
    525 	o.Retryer = cfg.Retryer()
    526 }
    527 
    528 func resolveAWSRetryMode(cfg aws.Config, o *Options) {
    529 	if len(cfg.RetryMode) == 0 {
    530 		return
    531 	}
    532 	o.RetryMode = cfg.RetryMode
    533 }
    534 func resolveAWSRetryMaxAttempts(cfg aws.Config, o *Options) {
    535 	if cfg.RetryMaxAttempts == 0 {
    536 		return
    537 	}
    538 	o.RetryMaxAttempts = cfg.RetryMaxAttempts
    539 }
    540 
    541 func finalizeRetryMaxAttempts(o *Options) {
    542 	if o.RetryMaxAttempts == 0 {
    543 		return
    544 	}
    545 
    546 	o.Retryer = retry.AddWithMaxAttempts(o.Retryer, o.RetryMaxAttempts)
    547 }
    548 
    549 func finalizeOperationRetryMaxAttempts(o *Options, client Client) {
    550 	if v := o.RetryMaxAttempts; v == 0 || v == client.options.RetryMaxAttempts {
    551 		return
    552 	}
    553 
    554 	o.Retryer = retry.AddWithMaxAttempts(o.Retryer, o.RetryMaxAttempts)
    555 }
    556 
    557 func resolveAWSEndpointResolver(cfg aws.Config, o *Options) {
    558 	if cfg.EndpointResolver == nil && cfg.EndpointResolverWithOptions == nil {
    559 		return
    560 	}
    561 	o.EndpointResolver = withEndpointResolver(cfg.EndpointResolver, cfg.EndpointResolverWithOptions)
    562 }
    563 
    564 func resolveInterceptors(cfg aws.Config, o *Options) {
    565 	o.Interceptors = cfg.Interceptors.Copy()
    566 }
    567 
    568 func addClientUserAgent(stack *middleware.Stack, options Options) error {
    569 	ua, err := getOrAddRequestUserAgent(stack)
    570 	if err != nil {
    571 		return err
    572 	}
    573 
    574 	ua.AddSDKAgentKeyValue(awsmiddleware.APIMetadata, "route53", goModuleVersion)
    575 	if len(options.AppID) > 0 {
    576 		ua.AddSDKAgentKey(awsmiddleware.ApplicationIdentifier, options.AppID)
    577 	}
    578 
    579 	return nil
    580 }
    581 
    582 func getOrAddRequestUserAgent(stack *middleware.Stack) (*awsmiddleware.RequestUserAgent, error) {
    583 	id := (*awsmiddleware.RequestUserAgent)(nil).ID()
    584 	mw, ok := stack.Build.Get(id)
    585 	if !ok {
    586 		mw = awsmiddleware.NewRequestUserAgent()
    587 		if err := stack.Build.Add(mw, middleware.After); err != nil {
    588 			return nil, err
    589 		}
    590 	}
    591 
    592 	ua, ok := mw.(*awsmiddleware.RequestUserAgent)
    593 	if !ok {
    594 		return nil, fmt.Errorf("%T for %s middleware did not match expected type", mw, id)
    595 	}
    596 
    597 	return ua, nil
    598 }
    599 
    600 type HTTPSignerV4 interface {
    601 	SignHTTP(ctx context.Context, credentials aws.Credentials, r *http.Request, payloadHash string, service string, region string, signingTime time.Time, optFns ...func(*v4.SignerOptions)) error
    602 }
    603 
    604 func resolveHTTPSignerV4(o *Options) {
    605 	if o.HTTPSignerV4 != nil {
    606 		return
    607 	}
    608 	o.HTTPSignerV4 = newDefaultV4Signer(*o)
    609 }
    610 
    611 func newDefaultV4Signer(o Options) *v4.Signer {
    612 	return v4.NewSigner(func(so *v4.SignerOptions) {
    613 		so.Logger = o.Logger
    614 		so.LogSigning = o.ClientLogMode.IsSigning()
    615 	})
    616 }
    617 
    618 func addClientRequestID(stack *middleware.Stack) error {
    619 	return stack.Build.Add(&awsmiddleware.ClientRequestID{}, middleware.After)
    620 }
    621 
    622 func addComputeContentLength(stack *middleware.Stack) error {
    623 	return stack.Build.Add(&smithyhttp.ComputeContentLength{}, middleware.After)
    624 }
    625 
    626 func addRawResponseToMetadata(stack *middleware.Stack) error {
    627 	return stack.Deserialize.Add(&awsmiddleware.AddRawResponse{}, middleware.Before)
    628 }
    629 
    630 func addRecordResponseTiming(stack *middleware.Stack) error {
    631 	return stack.Deserialize.Add(&awsmiddleware.RecordResponseTiming{}, middleware.After)
    632 }
    633 
    634 func addSpanRetryLoop(stack *middleware.Stack, options Options) error {
    635 	return stack.Finalize.Insert(&spanRetryLoop{options: options}, "Retry", middleware.Before)
    636 }
    637 
    638 type spanRetryLoop struct {
    639 	options Options
    640 }
    641 
    642 func (*spanRetryLoop) ID() string {
    643 	return "spanRetryLoop"
    644 }
    645 
    646 func (m *spanRetryLoop) HandleFinalize(
    647 	ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler,
    648 ) (
    649 	middleware.FinalizeOutput, middleware.Metadata, error,
    650 ) {
    651 	tracer := operationTracer(m.options.TracerProvider)
    652 	ctx, span := tracer.StartSpan(ctx, "RetryLoop")
    653 	defer span.End()
    654 
    655 	return next.HandleFinalize(ctx, in)
    656 }
    657 func addStreamingEventsPayload(stack *middleware.Stack) error {
    658 	return stack.Finalize.Add(&v4.StreamingEventsPayload{}, middleware.Before)
    659 }
    660 
    661 func addUnsignedPayload(stack *middleware.Stack) error {
    662 	return stack.Finalize.Insert(&v4.UnsignedPayload{}, "ResolveEndpointV2", middleware.After)
    663 }
    664 
    665 func addComputePayloadSHA256(stack *middleware.Stack) error {
    666 	return stack.Finalize.Insert(&v4.ComputePayloadSHA256{}, "ResolveEndpointV2", middleware.After)
    667 }
    668 
    669 func addContentSHA256Header(stack *middleware.Stack) error {
    670 	return stack.Finalize.Insert(&v4.ContentSHA256Header{}, (*v4.ComputePayloadSHA256)(nil).ID(), middleware.After)
    671 }
    672 
    673 func addIsWaiterUserAgent(o *Options) {
    674 	o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
    675 		ua, err := getOrAddRequestUserAgent(stack)
    676 		if err != nil {
    677 			return err
    678 		}
    679 
    680 		ua.AddUserAgentFeature(awsmiddleware.UserAgentFeatureWaiter)
    681 		return nil
    682 	})
    683 }
    684 
    685 func addIsPaginatorUserAgent(o *Options) {
    686 	o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error {
    687 		ua, err := getOrAddRequestUserAgent(stack)
    688 		if err != nil {
    689 			return err
    690 		}
    691 
    692 		ua.AddUserAgentFeature(awsmiddleware.UserAgentFeaturePaginator)
    693 		return nil
    694 	})
    695 }
    696 
    697 func addRetry(stack *middleware.Stack, o Options) error {
    698 	attempt := retry.NewAttemptMiddleware(o.Retryer, smithyhttp.RequestCloner, func(m *retry.Attempt) {
    699 		m.LogAttempts = o.ClientLogMode.IsRetries()
    700 		m.OperationMeter = o.MeterProvider.Meter("github.com/aws/aws-sdk-go-v2/service/route53")
    701 	})
    702 	if err := stack.Finalize.Insert(attempt, "ResolveAuthScheme", middleware.Before); err != nil {
    703 		return err
    704 	}
    705 	if err := stack.Finalize.Insert(&retry.MetricsHeader{}, attempt.ID(), middleware.After); err != nil {
    706 		return err
    707 	}
    708 	return nil
    709 }
    710 
    711 // resolves dual-stack endpoint configuration
    712 func resolveUseDualStackEndpoint(cfg aws.Config, o *Options) error {
    713 	if len(cfg.ConfigSources) == 0 {
    714 		return nil
    715 	}
    716 	value, found, err := internalConfig.ResolveUseDualStackEndpoint(context.Background(), cfg.ConfigSources)
    717 	if err != nil {
    718 		return err
    719 	}
    720 	if found {
    721 		o.EndpointOptions.UseDualStackEndpoint = value
    722 	}
    723 	return nil
    724 }
    725 
    726 // resolves FIPS endpoint configuration
    727 func resolveUseFIPSEndpoint(cfg aws.Config, o *Options) error {
    728 	if len(cfg.ConfigSources) == 0 {
    729 		return nil
    730 	}
    731 	value, found, err := internalConfig.ResolveUseFIPSEndpoint(context.Background(), cfg.ConfigSources)
    732 	if err != nil {
    733 		return err
    734 	}
    735 	if found {
    736 		o.EndpointOptions.UseFIPSEndpoint = value
    737 	}
    738 	return nil
    739 }
    740 
    741 func resolveAccountID(identity smithyauth.Identity, mode aws.AccountIDEndpointMode) *string {
    742 	if mode == aws.AccountIDEndpointModeDisabled {
    743 		return nil
    744 	}
    745 
    746 	if ca, ok := identity.(*internalauthsmithy.CredentialsAdapter); ok && ca.Credentials.AccountID != "" {
    747 		return aws.String(ca.Credentials.AccountID)
    748 	}
    749 
    750 	return nil
    751 }
    752 
    753 func addTimeOffsetBuild(stack *middleware.Stack, c *Client) error {
    754 	mw := internalmiddleware.AddTimeOffsetMiddleware{Offset: c.timeOffset}
    755 	if err := stack.Build.Add(&mw, middleware.After); err != nil {
    756 		return err
    757 	}
    758 	return stack.Deserialize.Insert(&mw, "RecordResponseTiming", middleware.Before)
    759 }
    760 func initializeTimeOffsetResolver(c *Client) {
    761 	c.timeOffset = new(atomic.Int64)
    762 }
    763 
    764 func addUserAgentRetryMode(stack *middleware.Stack, options Options) error {
    765 	ua, err := getOrAddRequestUserAgent(stack)
    766 	if err != nil {
    767 		return err
    768 	}
    769 
    770 	switch options.Retryer.(type) {
    771 	case *retry.Standard:
    772 		ua.AddUserAgentFeature(awsmiddleware.UserAgentFeatureRetryModeStandard)
    773 	case *retry.AdaptiveMode:
    774 		ua.AddUserAgentFeature(awsmiddleware.UserAgentFeatureRetryModeAdaptive)
    775 	}
    776 	return nil
    777 }
    778 
    779 type setCredentialSourceMiddleware struct {
    780 	ua      *awsmiddleware.RequestUserAgent
    781 	options Options
    782 }
    783 
    784 func (m setCredentialSourceMiddleware) ID() string { return "SetCredentialSourceMiddleware" }
    785 
    786 func (m setCredentialSourceMiddleware) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) (
    787 	out middleware.BuildOutput, metadata middleware.Metadata, err error,
    788 ) {
    789 	asProviderSource, ok := m.options.Credentials.(aws.CredentialProviderSource)
    790 	if !ok {
    791 		return next.HandleBuild(ctx, in)
    792 	}
    793 	providerSources := asProviderSource.ProviderSources()
    794 	for _, source := range providerSources {
    795 		m.ua.AddCredentialsSource(source)
    796 	}
    797 	return next.HandleBuild(ctx, in)
    798 }
    799 
    800 func addCredentialSource(stack *middleware.Stack, options Options) error {
    801 	ua, err := getOrAddRequestUserAgent(stack)
    802 	if err != nil {
    803 		return err
    804 	}
    805 
    806 	mw := setCredentialSourceMiddleware{ua: ua, options: options}
    807 	return stack.Build.Insert(&mw, "UserAgent", middleware.Before)
    808 }
    809 
    810 func resolveTracerProvider(options *Options) {
    811 	if options.TracerProvider == nil {
    812 		options.TracerProvider = &tracing.NopTracerProvider{}
    813 	}
    814 }
    815 
    816 func resolveMeterProvider(options *Options) {
    817 	if options.MeterProvider == nil {
    818 		options.MeterProvider = metrics.NopMeterProvider{}
    819 	}
    820 }
    821 
    822 func addRecursionDetection(stack *middleware.Stack) error {
    823 	return stack.Build.Add(&awsmiddleware.RecursionDetection{}, middleware.After)
    824 }
    825 
    826 func addRequestIDRetrieverMiddleware(stack *middleware.Stack) error {
    827 	return stack.Deserialize.Insert(&awsmiddleware.RequestIDRetriever{}, "OperationDeserializer", middleware.Before)
    828 
    829 }
    830 
    831 func addResponseErrorMiddleware(stack *middleware.Stack) error {
    832 	return stack.Deserialize.Insert(&awshttp.ResponseErrorWrapper{}, "RequestIDRetriever", middleware.Before)
    833 
    834 }
    835 
    836 func addSanitizeURLMiddleware(stack *middleware.Stack) error {
    837 	return route53cust.AddSanitizeURLMiddleware(stack, route53cust.AddSanitizeURLMiddlewareOptions{SanitizeURLInput: sanitizeURLInput})
    838 }
    839 
    840 // Check for and split apart Route53 resource IDs, setting only the last piece.
    841 // This allows the output of one operation e.g. foo/1234 to be used as input in
    842 // another operation (e.g. it expects just '1234')
    843 func sanitizeURLInput(input interface{}) error {
    844 	switch i := input.(type) {
    845 	case *ActivateKeySigningKeyInput:
    846 		if i.HostedZoneId != nil {
    847 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    848 			v := (*i.HostedZoneId)[idx+1:]
    849 			i.HostedZoneId = &v
    850 		}
    851 
    852 	case *AssociateVPCWithHostedZoneInput:
    853 		if i.HostedZoneId != nil {
    854 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    855 			v := (*i.HostedZoneId)[idx+1:]
    856 			i.HostedZoneId = &v
    857 		}
    858 
    859 	case *ChangeResourceRecordSetsInput:
    860 		if i.HostedZoneId != nil {
    861 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    862 			v := (*i.HostedZoneId)[idx+1:]
    863 			i.HostedZoneId = &v
    864 		}
    865 
    866 	case *CreateHostedZoneInput:
    867 		if i.DelegationSetId != nil {
    868 			idx := strings.LastIndex(*i.DelegationSetId, `/`)
    869 			v := (*i.DelegationSetId)[idx+1:]
    870 			i.DelegationSetId = &v
    871 		}
    872 
    873 	case *CreateKeySigningKeyInput:
    874 		if i.HostedZoneId != nil {
    875 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    876 			v := (*i.HostedZoneId)[idx+1:]
    877 			i.HostedZoneId = &v
    878 		}
    879 
    880 	case *CreateQueryLoggingConfigInput:
    881 		if i.HostedZoneId != nil {
    882 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    883 			v := (*i.HostedZoneId)[idx+1:]
    884 			i.HostedZoneId = &v
    885 		}
    886 
    887 	case *CreateReusableDelegationSetInput:
    888 		if i.HostedZoneId != nil {
    889 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    890 			v := (*i.HostedZoneId)[idx+1:]
    891 			i.HostedZoneId = &v
    892 		}
    893 
    894 	case *CreateTrafficPolicyInstanceInput:
    895 		if i.HostedZoneId != nil {
    896 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    897 			v := (*i.HostedZoneId)[idx+1:]
    898 			i.HostedZoneId = &v
    899 		}
    900 
    901 	case *CreateVPCAssociationAuthorizationInput:
    902 		if i.HostedZoneId != nil {
    903 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    904 			v := (*i.HostedZoneId)[idx+1:]
    905 			i.HostedZoneId = &v
    906 		}
    907 
    908 	case *DeactivateKeySigningKeyInput:
    909 		if i.HostedZoneId != nil {
    910 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    911 			v := (*i.HostedZoneId)[idx+1:]
    912 			i.HostedZoneId = &v
    913 		}
    914 
    915 	case *DeleteHostedZoneInput:
    916 		if i.Id != nil {
    917 			idx := strings.LastIndex(*i.Id, `/`)
    918 			v := (*i.Id)[idx+1:]
    919 			i.Id = &v
    920 		}
    921 
    922 	case *DeleteKeySigningKeyInput:
    923 		if i.HostedZoneId != nil {
    924 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    925 			v := (*i.HostedZoneId)[idx+1:]
    926 			i.HostedZoneId = &v
    927 		}
    928 
    929 	case *DeleteReusableDelegationSetInput:
    930 		if i.Id != nil {
    931 			idx := strings.LastIndex(*i.Id, `/`)
    932 			v := (*i.Id)[idx+1:]
    933 			i.Id = &v
    934 		}
    935 
    936 	case *DeleteVPCAssociationAuthorizationInput:
    937 		if i.HostedZoneId != nil {
    938 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    939 			v := (*i.HostedZoneId)[idx+1:]
    940 			i.HostedZoneId = &v
    941 		}
    942 
    943 	case *DisableHostedZoneDNSSECInput:
    944 		if i.HostedZoneId != nil {
    945 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    946 			v := (*i.HostedZoneId)[idx+1:]
    947 			i.HostedZoneId = &v
    948 		}
    949 
    950 	case *DisassociateVPCFromHostedZoneInput:
    951 		if i.HostedZoneId != nil {
    952 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    953 			v := (*i.HostedZoneId)[idx+1:]
    954 			i.HostedZoneId = &v
    955 		}
    956 
    957 	case *EnableHostedZoneDNSSECInput:
    958 		if i.HostedZoneId != nil {
    959 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    960 			v := (*i.HostedZoneId)[idx+1:]
    961 			i.HostedZoneId = &v
    962 		}
    963 
    964 	case *GetChangeInput:
    965 		if i.Id != nil {
    966 			idx := strings.LastIndex(*i.Id, `/`)
    967 			v := (*i.Id)[idx+1:]
    968 			i.Id = &v
    969 		}
    970 
    971 	case *GetDNSSECInput:
    972 		if i.HostedZoneId != nil {
    973 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    974 			v := (*i.HostedZoneId)[idx+1:]
    975 			i.HostedZoneId = &v
    976 		}
    977 
    978 	case *GetHostedZoneInput:
    979 		if i.Id != nil {
    980 			idx := strings.LastIndex(*i.Id, `/`)
    981 			v := (*i.Id)[idx+1:]
    982 			i.Id = &v
    983 		}
    984 
    985 	case *GetHostedZoneLimitInput:
    986 		if i.HostedZoneId != nil {
    987 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
    988 			v := (*i.HostedZoneId)[idx+1:]
    989 			i.HostedZoneId = &v
    990 		}
    991 
    992 	case *GetReusableDelegationSetInput:
    993 		if i.Id != nil {
    994 			idx := strings.LastIndex(*i.Id, `/`)
    995 			v := (*i.Id)[idx+1:]
    996 			i.Id = &v
    997 		}
    998 
    999 	case *GetReusableDelegationSetLimitInput:
   1000 		if i.DelegationSetId != nil {
   1001 			idx := strings.LastIndex(*i.DelegationSetId, `/`)
   1002 			v := (*i.DelegationSetId)[idx+1:]
   1003 			i.DelegationSetId = &v
   1004 		}
   1005 
   1006 	case *ListHostedZonesInput:
   1007 		if i.DelegationSetId != nil {
   1008 			idx := strings.LastIndex(*i.DelegationSetId, `/`)
   1009 			v := (*i.DelegationSetId)[idx+1:]
   1010 			i.DelegationSetId = &v
   1011 		}
   1012 
   1013 	case *ListHostedZonesByNameInput:
   1014 		if i.HostedZoneId != nil {
   1015 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
   1016 			v := (*i.HostedZoneId)[idx+1:]
   1017 			i.HostedZoneId = &v
   1018 		}
   1019 
   1020 	case *ListQueryLoggingConfigsInput:
   1021 		if i.HostedZoneId != nil {
   1022 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
   1023 			v := (*i.HostedZoneId)[idx+1:]
   1024 			i.HostedZoneId = &v
   1025 		}
   1026 
   1027 	case *ListResourceRecordSetsInput:
   1028 		if i.HostedZoneId != nil {
   1029 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
   1030 			v := (*i.HostedZoneId)[idx+1:]
   1031 			i.HostedZoneId = &v
   1032 		}
   1033 
   1034 	case *ListTrafficPolicyInstancesInput:
   1035 		if i.HostedZoneIdMarker != nil {
   1036 			idx := strings.LastIndex(*i.HostedZoneIdMarker, `/`)
   1037 			v := (*i.HostedZoneIdMarker)[idx+1:]
   1038 			i.HostedZoneIdMarker = &v
   1039 		}
   1040 
   1041 	case *ListTrafficPolicyInstancesByHostedZoneInput:
   1042 		if i.HostedZoneId != nil {
   1043 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
   1044 			v := (*i.HostedZoneId)[idx+1:]
   1045 			i.HostedZoneId = &v
   1046 		}
   1047 
   1048 	case *ListTrafficPolicyInstancesByPolicyInput:
   1049 		if i.HostedZoneIdMarker != nil {
   1050 			idx := strings.LastIndex(*i.HostedZoneIdMarker, `/`)
   1051 			v := (*i.HostedZoneIdMarker)[idx+1:]
   1052 			i.HostedZoneIdMarker = &v
   1053 		}
   1054 
   1055 	case *ListVPCAssociationAuthorizationsInput:
   1056 		if i.HostedZoneId != nil {
   1057 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
   1058 			v := (*i.HostedZoneId)[idx+1:]
   1059 			i.HostedZoneId = &v
   1060 		}
   1061 
   1062 	case *TestDNSAnswerInput:
   1063 		if i.HostedZoneId != nil {
   1064 			idx := strings.LastIndex(*i.HostedZoneId, `/`)
   1065 			v := (*i.HostedZoneId)[idx+1:]
   1066 			i.HostedZoneId = &v
   1067 		}
   1068 
   1069 	case *UpdateHostedZoneCommentInput:
   1070 		if i.Id != nil {
   1071 			idx := strings.LastIndex(*i.Id, `/`)
   1072 			v := (*i.Id)[idx+1:]
   1073 			i.Id = &v
   1074 		}
   1075 
   1076 	default:
   1077 		break
   1078 	}
   1079 	return nil
   1080 }
   1081 
   1082 func addRequestResponseLogging(stack *middleware.Stack, o Options) error {
   1083 	return stack.Deserialize.Add(&smithyhttp.RequestResponseLogger{
   1084 		LogRequest:          o.ClientLogMode.IsRequest(),
   1085 		LogRequestWithBody:  o.ClientLogMode.IsRequestWithBody(),
   1086 		LogResponse:         o.ClientLogMode.IsResponse(),
   1087 		LogResponseWithBody: o.ClientLogMode.IsResponseWithBody(),
   1088 	}, middleware.After)
   1089 }
   1090 
   1091 type disableHTTPSMiddleware struct {
   1092 	DisableHTTPS bool
   1093 }
   1094 
   1095 func (*disableHTTPSMiddleware) ID() string {
   1096 	return "disableHTTPS"
   1097 }
   1098 
   1099 func (m *disableHTTPSMiddleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (
   1100 	out middleware.FinalizeOutput, metadata middleware.Metadata, err error,
   1101 ) {
   1102 	req, ok := in.Request.(*smithyhttp.Request)
   1103 	if !ok {
   1104 		return out, metadata, fmt.Errorf("unknown transport type %T", in.Request)
   1105 	}
   1106 
   1107 	if m.DisableHTTPS && !smithyhttp.GetHostnameImmutable(ctx) {
   1108 		req.URL.Scheme = "http"
   1109 	}
   1110 
   1111 	return next.HandleFinalize(ctx, in)
   1112 }
   1113 
   1114 func addDisableHTTPSMiddleware(stack *middleware.Stack, o Options) error {
   1115 	return stack.Finalize.Insert(&disableHTTPSMiddleware{
   1116 		DisableHTTPS: o.EndpointOptions.DisableHTTPS,
   1117 	}, "ResolveEndpointV2", middleware.After)
   1118 }
   1119 
   1120 func addInterceptBeforeRetryLoop(stack *middleware.Stack, opts Options) error {
   1121 	return stack.Finalize.Insert(&smithyhttp.InterceptBeforeRetryLoop{
   1122 		Interceptors: opts.Interceptors.BeforeRetryLoop,
   1123 	}, "Retry", middleware.Before)
   1124 }
   1125 
   1126 func addInterceptAttempt(stack *middleware.Stack, opts Options) error {
   1127 	return stack.Finalize.Insert(&smithyhttp.InterceptAttempt{
   1128 		BeforeAttempt: opts.Interceptors.BeforeAttempt,
   1129 		AfterAttempt:  opts.Interceptors.AfterAttempt,
   1130 	}, "Retry", middleware.After)
   1131 }
   1132 
   1133 func addInterceptExecution(stack *middleware.Stack, opts Options) error {
   1134 	return stack.Initialize.Add(&smithyhttp.InterceptExecution{
   1135 		BeforeExecution: opts.Interceptors.BeforeExecution,
   1136 		AfterExecution:  opts.Interceptors.AfterExecution,
   1137 	}, middleware.Before)
   1138 }
   1139 
   1140 func addInterceptBeforeSerialization(stack *middleware.Stack, opts Options) error {
   1141 	return stack.Serialize.Insert(&smithyhttp.InterceptBeforeSerialization{
   1142 		Interceptors: opts.Interceptors.BeforeSerialization,
   1143 	}, "OperationSerializer", middleware.Before)
   1144 }
   1145 
   1146 func addInterceptAfterSerialization(stack *middleware.Stack, opts Options) error {
   1147 	return stack.Serialize.Insert(&smithyhttp.InterceptAfterSerialization{
   1148 		Interceptors: opts.Interceptors.AfterSerialization,
   1149 	}, "OperationSerializer", middleware.After)
   1150 }
   1151 
   1152 func addInterceptBeforeSigning(stack *middleware.Stack, opts Options) error {
   1153 	return stack.Finalize.Insert(&smithyhttp.InterceptBeforeSigning{
   1154 		Interceptors: opts.Interceptors.BeforeSigning,
   1155 	}, "Signing", middleware.Before)
   1156 }
   1157 
   1158 func addInterceptAfterSigning(stack *middleware.Stack, opts Options) error {
   1159 	return stack.Finalize.Insert(&smithyhttp.InterceptAfterSigning{
   1160 		Interceptors: opts.Interceptors.AfterSigning,
   1161 	}, "Signing", middleware.After)
   1162 }
   1163 
   1164 func addInterceptTransmit(stack *middleware.Stack, opts Options) error {
   1165 	return stack.Deserialize.Add(&smithyhttp.InterceptTransmit{
   1166 		BeforeTransmit: opts.Interceptors.BeforeTransmit,
   1167 		AfterTransmit:  opts.Interceptors.AfterTransmit,
   1168 	}, middleware.After)
   1169 }
   1170 
   1171 func addInterceptBeforeDeserialization(stack *middleware.Stack, opts Options) error {
   1172 	return stack.Deserialize.Insert(&smithyhttp.InterceptBeforeDeserialization{
   1173 		Interceptors: opts.Interceptors.BeforeDeserialization,
   1174 	}, "OperationDeserializer", middleware.After) // (deserialize stack is called in reverse)
   1175 }
   1176 
   1177 func addInterceptAfterDeserialization(stack *middleware.Stack, opts Options) error {
   1178 	return stack.Deserialize.Insert(&smithyhttp.InterceptAfterDeserialization{
   1179 		Interceptors: opts.Interceptors.AfterDeserialization,
   1180 	}, "OperationDeserializer", middleware.Before)
   1181 }
   1182 
   1183 type spanInitializeStart struct {
   1184 }
   1185 
   1186 func (*spanInitializeStart) ID() string {
   1187 	return "spanInitializeStart"
   1188 }
   1189 
   1190 func (m *spanInitializeStart) HandleInitialize(
   1191 	ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler,
   1192 ) (
   1193 	middleware.InitializeOutput, middleware.Metadata, error,
   1194 ) {
   1195 	ctx, _ = tracing.StartSpan(ctx, "Initialize")
   1196 
   1197 	return next.HandleInitialize(ctx, in)
   1198 }
   1199 
   1200 type spanInitializeEnd struct {
   1201 }
   1202 
   1203 func (*spanInitializeEnd) ID() string {
   1204 	return "spanInitializeEnd"
   1205 }
   1206 
   1207 func (m *spanInitializeEnd) HandleInitialize(
   1208 	ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler,
   1209 ) (
   1210 	middleware.InitializeOutput, middleware.Metadata, error,
   1211 ) {
   1212 	ctx, span := tracing.PopSpan(ctx)
   1213 	span.End()
   1214 
   1215 	return next.HandleInitialize(ctx, in)
   1216 }
   1217 
   1218 type spanBuildRequestStart struct {
   1219 }
   1220 
   1221 func (*spanBuildRequestStart) ID() string {
   1222 	return "spanBuildRequestStart"
   1223 }
   1224 
   1225 func (m *spanBuildRequestStart) HandleSerialize(
   1226 	ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler,
   1227 ) (
   1228 	middleware.SerializeOutput, middleware.Metadata, error,
   1229 ) {
   1230 	ctx, _ = tracing.StartSpan(ctx, "BuildRequest")
   1231 
   1232 	return next.HandleSerialize(ctx, in)
   1233 }
   1234 
   1235 type spanBuildRequestEnd struct {
   1236 }
   1237 
   1238 func (*spanBuildRequestEnd) ID() string {
   1239 	return "spanBuildRequestEnd"
   1240 }
   1241 
   1242 func (m *spanBuildRequestEnd) HandleBuild(
   1243 	ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler,
   1244 ) (
   1245 	middleware.BuildOutput, middleware.Metadata, error,
   1246 ) {
   1247 	ctx, span := tracing.PopSpan(ctx)
   1248 	span.End()
   1249 
   1250 	return next.HandleBuild(ctx, in)
   1251 }
   1252 
   1253 func addSpanInitializeStart(stack *middleware.Stack) error {
   1254 	return stack.Initialize.Add(&spanInitializeStart{}, middleware.Before)
   1255 }
   1256 
   1257 func addSpanInitializeEnd(stack *middleware.Stack) error {
   1258 	return stack.Initialize.Add(&spanInitializeEnd{}, middleware.After)
   1259 }
   1260 
   1261 func addSpanBuildRequestStart(stack *middleware.Stack) error {
   1262 	return stack.Serialize.Add(&spanBuildRequestStart{}, middleware.Before)
   1263 }
   1264 
   1265 func addSpanBuildRequestEnd(stack *middleware.Stack) error {
   1266 	return stack.Build.Add(&spanBuildRequestEnd{}, middleware.After)
   1267 }