src

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

content_type.go (1235B)


      1 package http
      2 
      3 import (
      4 	"context"
      5 	"fmt"
      6 	"github.com/aws/smithy-go/middleware"
      7 	smithyhttp "github.com/aws/smithy-go/transport/http"
      8 )
      9 
     10 // removeContentTypeHeader is a build middleware that removes
     11 // content type header if content-length header is unset or
     12 // is set to zero,
     13 type removeContentTypeHeader struct {
     14 }
     15 
     16 // ID the name of the middleware.
     17 func (m *removeContentTypeHeader) ID() string {
     18 	return "RemoveContentTypeHeader"
     19 }
     20 
     21 // HandleBuild adds or appends the constructed user agent to the request.
     22 func (m *removeContentTypeHeader) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) (
     23 	out middleware.BuildOutput, metadata middleware.Metadata, err error,
     24 ) {
     25 	req, ok := in.Request.(*smithyhttp.Request)
     26 	if !ok {
     27 		return out, metadata, fmt.Errorf("unknown transport type %T", in)
     28 	}
     29 
     30 	// remove contentTypeHeader when content-length is zero
     31 	if req.ContentLength == 0 {
     32 		req.Header.Del("content-type")
     33 	}
     34 
     35 	return next.HandleBuild(ctx, in)
     36 }
     37 
     38 // RemoveContentTypeHeader removes content-type header if
     39 // content length is unset or equal to zero.
     40 func RemoveContentTypeHeader(stack *middleware.Stack) error {
     41 	return stack.Build.Add(&removeContentTypeHeader{}, middleware.After)
     42 }