1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package s3
4
5import (
6	"context"
7	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
8	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
9	s3cust "github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations"
10	"github.com/aws/aws-sdk-go-v2/service/s3/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// Sets the versioning state of an existing bucket. To set the versioning state,
16// you must be the bucket owner. You can set the versioning state with one of the
17// following values: Enabled—Enables versioning for the objects in the bucket. All
18// objects added to the bucket receive a unique version ID. Suspended—Disables
19// versioning for the objects in the bucket. All objects added to the bucket
20// receive the version ID null. If the versioning state has never been set on a
21// bucket, it has no versioning state; a GetBucketVersioning
22// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html)
23// request does not return a versioning state value. If the bucket owner enables
24// MFA Delete in the bucket versioning configuration, the bucket owner must include
25// the x-amz-mfa request header and the Status and the MfaDelete request elements
26// in a request to set the versioning state of the bucket. If you have an object
27// expiration lifecycle policy in your non-versioned bucket and you want to
28// maintain the same permanent delete behavior when you enable versioning, you must
29// add a noncurrent expiration policy. The noncurrent expiration lifecycle policy
30// will manage the deletes of the noncurrent object versions in the version-enabled
31// bucket. (A version-enabled bucket maintains one current and zero or more
32// noncurrent object versions.) For more information, see Lifecycle and Versioning
33// (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config).
34// Related Resources
35//
36// * CreateBucket
37// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)
38//
39// *
40// DeleteBucket
41// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html)
42//
43// *
44// GetBucketVersioning
45// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html)
46func (c *Client) PutBucketVersioning(ctx context.Context, params *PutBucketVersioningInput, optFns ...func(*Options)) (*PutBucketVersioningOutput, error) {
47	if params == nil {
48		params = &PutBucketVersioningInput{}
49	}
50
51	result, metadata, err := c.invokeOperation(ctx, "PutBucketVersioning", params, optFns, addOperationPutBucketVersioningMiddlewares)
52	if err != nil {
53		return nil, err
54	}
55
56	out := result.(*PutBucketVersioningOutput)
57	out.ResultMetadata = metadata
58	return out, nil
59}
60
61type PutBucketVersioningInput struct {
62
63	// The bucket name.
64	//
65	// This member is required.
66	Bucket *string
67
68	// Container for setting the versioning state.
69	//
70	// This member is required.
71	VersioningConfiguration *types.VersioningConfiguration
72
73	// >The base64-encoded 128-bit MD5 digest of the data. You must use this header as
74	// a message integrity check to verify that the request body was not corrupted in
75	// transit. For more information, see RFC 1864
76	// (http://www.ietf.org/rfc/rfc1864.txt). For requests made using the AWS Command
77	// Line Interface (CLI) or AWS SDKs, this field is calculated automatically.
78	ContentMD5 *string
79
80	// The account ID of the expected bucket owner. If the bucket is owned by a
81	// different account, the request will fail with an HTTP 403 (Access Denied) error.
82	ExpectedBucketOwner *string
83
84	// The concatenation of the authentication device's serial number, a space, and the
85	// value that is displayed on your authentication device.
86	MFA *string
87}
88
89type PutBucketVersioningOutput struct {
90	// Metadata pertaining to the operation's result.
91	ResultMetadata middleware.Metadata
92}
93
94func addOperationPutBucketVersioningMiddlewares(stack *middleware.Stack, options Options) (err error) {
95	err = stack.Serialize.Add(&awsRestxml_serializeOpPutBucketVersioning{}, middleware.After)
96	if err != nil {
97		return err
98	}
99	err = stack.Deserialize.Add(&awsRestxml_deserializeOpPutBucketVersioning{}, middleware.After)
100	if err != nil {
101		return err
102	}
103	if err = addSetLoggerMiddleware(stack, options); err != nil {
104		return err
105	}
106	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
107		return err
108	}
109	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
110		return err
111	}
112	if err = addResolveEndpointMiddleware(stack, options); err != nil {
113		return err
114	}
115	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
116		return err
117	}
118	if err = addRetryMiddlewares(stack, options); err != nil {
119		return err
120	}
121	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
122		return err
123	}
124	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
125		return err
126	}
127	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
128		return err
129	}
130	if err = addClientUserAgent(stack); err != nil {
131		return err
132	}
133	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
134		return err
135	}
136	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
137		return err
138	}
139	if err = addOpPutBucketVersioningValidationMiddleware(stack); err != nil {
140		return err
141	}
142	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opPutBucketVersioning(options.Region), middleware.Before); err != nil {
143		return err
144	}
145	if err = addMetadataRetrieverMiddleware(stack); err != nil {
146		return err
147	}
148	if err = addPutBucketVersioningUpdateEndpoint(stack, options); err != nil {
149		return err
150	}
151	if err = addResponseErrorMiddleware(stack); err != nil {
152		return err
153	}
154	if err = v4.AddContentSHA256HeaderMiddleware(stack); err != nil {
155		return err
156	}
157	if err = disableAcceptEncodingGzip(stack); err != nil {
158		return err
159	}
160	if err = addRequestResponseLogging(stack, options); err != nil {
161		return err
162	}
163	if err = smithyhttp.AddContentChecksumMiddleware(stack); err != nil {
164		return err
165	}
166	return nil
167}
168
169func newServiceMetadataMiddleware_opPutBucketVersioning(region string) *awsmiddleware.RegisterServiceMetadata {
170	return &awsmiddleware.RegisterServiceMetadata{
171		Region:        region,
172		ServiceID:     ServiceID,
173		SigningName:   "s3",
174		OperationName: "PutBucketVersioning",
175	}
176}
177
178// getPutBucketVersioningBucketMember returns a pointer to string denoting a
179// provided bucket member valueand a boolean indicating if the input has a modeled
180// bucket name,
181func getPutBucketVersioningBucketMember(input interface{}) (*string, bool) {
182	in := input.(*PutBucketVersioningInput)
183	if in.Bucket == nil {
184		return nil, false
185	}
186	return in.Bucket, true
187}
188func addPutBucketVersioningUpdateEndpoint(stack *middleware.Stack, options Options) error {
189	return s3cust.UpdateEndpoint(stack, s3cust.UpdateEndpointOptions{
190		Accessor: s3cust.UpdateEndpointParameterAccessor{
191			GetBucketFromInput: getPutBucketVersioningBucketMember,
192		},
193		UsePathStyle:            options.UsePathStyle,
194		UseAccelerate:           options.UseAccelerate,
195		SupportsAccelerate:      true,
196		TargetS3ObjectLambda:    false,
197		EndpointResolver:        options.EndpointResolver,
198		EndpointResolverOptions: options.EndpointOptions,
199		UseDualstack:            options.UseDualstack,
200		UseARNRegion:            options.UseARNRegion,
201	})
202}
203