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// Places an Object Retention configuration on an object. This action is not
16// supported by Amazon S3 on Outposts. Related Resources
17//
18// * Locking Objects
19// (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html)
20func (c *Client) PutObjectRetention(ctx context.Context, params *PutObjectRetentionInput, optFns ...func(*Options)) (*PutObjectRetentionOutput, error) {
21	if params == nil {
22		params = &PutObjectRetentionInput{}
23	}
24
25	result, metadata, err := c.invokeOperation(ctx, "PutObjectRetention", params, optFns, addOperationPutObjectRetentionMiddlewares)
26	if err != nil {
27		return nil, err
28	}
29
30	out := result.(*PutObjectRetentionOutput)
31	out.ResultMetadata = metadata
32	return out, nil
33}
34
35type PutObjectRetentionInput struct {
36
37	// The bucket name that contains the object you want to apply this Object Retention
38	// configuration to. When using this API with an access point, you must direct
39	// requests to the access point hostname. The access point hostname takes the form
40	// AccessPointName-AccountId.s3-accesspoint.Region.amazonaws.com. When using this
41	// operation with an access point through the AWS SDKs, you provide the access
42	// point ARN in place of the bucket name. For more information about access point
43	// ARNs, see Using Access Points
44	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html) in
45	// the Amazon Simple Storage Service Developer Guide.
46	//
47	// This member is required.
48	Bucket *string
49
50	// The key name for the object that you want to apply this Object Retention
51	// configuration to.
52	//
53	// This member is required.
54	Key *string
55
56	// Indicates whether this operation should bypass Governance-mode restrictions.
57	BypassGovernanceRetention bool
58
59	// The MD5 hash for the request body. For requests made using the AWS Command Line
60	// Interface (CLI) or AWS SDKs, this field is calculated automatically.
61	ContentMD5 *string
62
63	// The account id of the expected bucket owner. If the bucket is owned by a
64	// different account, the request will fail with an HTTP 403 (Access Denied) error.
65	ExpectedBucketOwner *string
66
67	// Confirms that the requester knows that they will be charged for the request.
68	// Bucket owners need not specify this parameter in their requests. For information
69	// about downloading objects from requester pays buckets, see Downloading Objects
70	// in Requestor Pays Buckets
71	// (https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html)
72	// in the Amazon S3 Developer Guide.
73	RequestPayer types.RequestPayer
74
75	// The container element for the Object Retention configuration.
76	Retention *types.ObjectLockRetention
77
78	// The version ID for the object that you want to apply this Object Retention
79	// configuration to.
80	VersionId *string
81}
82
83type PutObjectRetentionOutput struct {
84
85	// If present, indicates that the requester was successfully charged for the
86	// request.
87	RequestCharged types.RequestCharged
88
89	// Metadata pertaining to the operation's result.
90	ResultMetadata middleware.Metadata
91}
92
93func addOperationPutObjectRetentionMiddlewares(stack *middleware.Stack, options Options) (err error) {
94	err = stack.Serialize.Add(&awsRestxml_serializeOpPutObjectRetention{}, middleware.After)
95	if err != nil {
96		return err
97	}
98	err = stack.Deserialize.Add(&awsRestxml_deserializeOpPutObjectRetention{}, middleware.After)
99	if err != nil {
100		return err
101	}
102	if err = addSetLoggerMiddleware(stack, options); err != nil {
103		return err
104	}
105	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
106		return err
107	}
108	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
109		return err
110	}
111	if err = addResolveEndpointMiddleware(stack, options); err != nil {
112		return err
113	}
114	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
115		return err
116	}
117	if err = addRetryMiddlewares(stack, options); err != nil {
118		return err
119	}
120	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
121		return err
122	}
123	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
124		return err
125	}
126	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
127		return err
128	}
129	if err = addClientUserAgent(stack); err != nil {
130		return err
131	}
132	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
133		return err
134	}
135	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
136		return err
137	}
138	if err = addOpPutObjectRetentionValidationMiddleware(stack); err != nil {
139		return err
140	}
141	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opPutObjectRetention(options.Region), middleware.Before); err != nil {
142		return err
143	}
144	if err = addMetadataRetrieverMiddleware(stack); err != nil {
145		return err
146	}
147	if err = addPutObjectRetentionUpdateEndpoint(stack, options); err != nil {
148		return err
149	}
150	if err = addResponseErrorMiddleware(stack); err != nil {
151		return err
152	}
153	if err = v4.AddContentSHA256HeaderMiddleware(stack); err != nil {
154		return err
155	}
156	if err = disableAcceptEncodingGzip(stack); err != nil {
157		return err
158	}
159	if err = addRequestResponseLogging(stack, options); err != nil {
160		return err
161	}
162	if err = smithyhttp.AddContentChecksumMiddleware(stack); err != nil {
163		return err
164	}
165	return nil
166}
167
168func newServiceMetadataMiddleware_opPutObjectRetention(region string) *awsmiddleware.RegisterServiceMetadata {
169	return &awsmiddleware.RegisterServiceMetadata{
170		Region:        region,
171		ServiceID:     ServiceID,
172		SigningName:   "s3",
173		OperationName: "PutObjectRetention",
174	}
175}
176
177// getPutObjectRetentionBucketMember returns a pointer to string denoting a
178// provided bucket member valueand a boolean indicating if the input has a modeled
179// bucket name,
180func getPutObjectRetentionBucketMember(input interface{}) (*string, bool) {
181	in := input.(*PutObjectRetentionInput)
182	if in.Bucket == nil {
183		return nil, false
184	}
185	return in.Bucket, true
186}
187func addPutObjectRetentionUpdateEndpoint(stack *middleware.Stack, options Options) error {
188	return s3cust.UpdateEndpoint(stack, s3cust.UpdateEndpointOptions{
189		Accessor: s3cust.UpdateEndpointParameterAccessor{
190			GetBucketFromInput: getPutObjectRetentionBucketMember,
191		},
192		UsePathStyle:            options.UsePathStyle,
193		UseAccelerate:           options.UseAccelerate,
194		SupportsAccelerate:      true,
195		EndpointResolver:        options.EndpointResolver,
196		EndpointResolverOptions: options.EndpointOptions,
197		UseDualstack:            options.UseDualstack,
198		UseARNRegion:            options.UseARNRegion,
199	})
200}
201