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