src

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

middleware.go (1526B)


      1 package middleware
      2 
      3 import (
      4 	"context"
      5 	"sync/atomic"
      6 	"time"
      7 
      8 	internalcontext "github.com/aws/aws-sdk-go-v2/internal/context"
      9 	"github.com/aws/smithy-go/middleware"
     10 )
     11 
     12 // AddTimeOffsetMiddleware sets a value representing clock skew on the request context.
     13 // This can be read by other operations (such as signing) to correct the date value they send
     14 // on the request
     15 type AddTimeOffsetMiddleware struct {
     16 	Offset *atomic.Int64
     17 }
     18 
     19 // ID the identifier for AddTimeOffsetMiddleware
     20 func (m *AddTimeOffsetMiddleware) ID() string { return "AddTimeOffsetMiddleware" }
     21 
     22 // HandleBuild sets a value for attemptSkew on the request context if one is set on the client.
     23 func (m AddTimeOffsetMiddleware) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) (
     24 	out middleware.BuildOutput, metadata middleware.Metadata, err error,
     25 ) {
     26 	if m.Offset != nil {
     27 		offset := time.Duration(m.Offset.Load())
     28 		ctx = internalcontext.SetAttemptSkewContext(ctx, offset)
     29 	}
     30 	return next.HandleBuild(ctx, in)
     31 }
     32 
     33 // HandleDeserialize gets the clock skew context from the context, and if set, sets it on the pointer
     34 // held by AddTimeOffsetMiddleware
     35 func (m *AddTimeOffsetMiddleware) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) (
     36 	out middleware.DeserializeOutput, metadata middleware.Metadata, err error,
     37 ) {
     38 	if v := internalcontext.GetAttemptSkewContext(ctx); v != 0 {
     39 		m.Offset.Store(v.Nanoseconds())
     40 	}
     41 	return next.HandleDeserialize(ctx, in)
     42 }