package customizations

import (
	
	

	
	
)

// removeBucketFromPathMiddleware needs to be executed after serialize step is performed
type removeBucketFromPathMiddleware struct {
}

func ( *removeBucketFromPathMiddleware) () string {
	return "S3:RemoveBucketFromPathMiddleware"
}

func ( *removeBucketFromPathMiddleware) (
	 context.Context,  middleware.SerializeInput,  middleware.SerializeHandler,
) (
	 middleware.SerializeOutput,  middleware.Metadata,  error,
) {
	// check if a bucket removal from HTTP path is required
	,  := getRemoveBucketFromPath()
	if ! {
		return .HandleSerialize(, )
	}

	,  := .Request.(*http.Request)
	if ! {
		return , , fmt.Errorf("unknown request type %T", )
	}

	removeBucketFromPath(.URL, )
	return .HandleSerialize(, )
}

type removeBucketKey struct {
	bucket string
}

// setBucketToRemoveOnContext sets the bucket name to be removed.
//
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
// to clear all stack values.
func ( context.Context,  string) context.Context {
	return middleware.WithStackValue(, removeBucketKey{}, )
}

// getRemoveBucketFromPath returns the bucket name to remove from the path.
//
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
// to clear all stack values.
func ( context.Context) (string, bool) {
	,  := middleware.GetStackValue(, removeBucketKey{}).(string)
	return , 
}