| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package tos
- import (
- "bytes"
- "context"
- "net/http"
- "time"
- )
- func (cli *ClientV2) parseLifecycleInput(input *PutBucketLifecycleInput) putBucketLifecycleInput {
- lifecycleInput := make([]lifecycleRule, 0, len(input.Rules))
- for _, lifecycle := range input.Rules {
- var exp *expiration
- if lifecycle.Expiration != nil {
- exp = &expiration{
- Days: lifecycle.Expiration.Days,
- }
- if !lifecycle.Expiration.Date.IsZero() {
- exp.Date = lifecycle.Expiration.Date.Format(time.RFC3339)
- }
- }
- transitionList := make([]transition, 0, len(lifecycle.Transitions))
- for _, trans := range lifecycle.Transitions {
- t := transition{
- Days: trans.Days,
- StorageClass: trans.StorageClass,
- }
- if !trans.Date.IsZero() {
- t.Date = trans.Date.Format(time.RFC3339)
- }
- transitionList = append(transitionList, t)
- }
- lifecycleInput = append(lifecycleInput, lifecycleRule{
- ID: lifecycle.ID,
- Prefix: lifecycle.Prefix,
- Status: lifecycle.Status,
- Transitions: transitionList,
- Expiration: exp,
- NonCurrentVersionTransition: lifecycle.NonCurrentVersionTransition,
- NoCurrentVersionExpiration: lifecycle.NoCurrentVersionExpiration,
- Tag: lifecycle.Tag,
- AbortInCompleteMultipartUpload: lifecycle.AbortInCompleteMultipartUpload,
- })
- }
- return putBucketLifecycleInput{Rules: lifecycleInput}
- }
- func (cli *ClientV2) PutBucketLifecycle(ctx context.Context, input *PutBucketLifecycleInput) (*PutLifecycleOutput, error) {
- if input == nil {
- return nil, InputIsNilClientError
- }
- if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
- return nil, err
- }
- data, contentMD5, err := marshalInput("PutBucketLifecycleInput", cli.parseLifecycleInput(input))
- if err != nil {
- return nil, err
- }
- res, err := cli.newBuilder(input.Bucket, "").
- WithQuery("lifecycle", "").
- WithHeader(HeaderContentMD5, contentMD5).
- WithRetry(OnRetryFromStart, StatusCodeClassifier{}).
- Request(ctx, http.MethodPut, bytes.NewReader(data), cli.roundTripper(http.StatusOK))
- if err != nil {
- return nil, err
- }
- defer res.Close()
- output := PutLifecycleOutput{RequestInfo: res.RequestInfo()}
- return &output, nil
- }
- func (cli *ClientV2) GetBucketLifecycle(ctx context.Context, input *GetBucketLifecycleInput) (*GetBucketLifecycleOutput, error) {
- if input == nil {
- return nil, InputIsNilClientError
- }
- if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
- return nil, err
- }
- res, err := cli.newBuilder(input.Bucket, "").
- WithQuery("lifecycle", "").
- WithRetry(nil, StatusCodeClassifier{}).
- Request(ctx, http.MethodGet, nil, cli.roundTripper(http.StatusOK))
- if err != nil {
- return nil, err
- }
- defer res.Close()
- output := GetBucketLifecycleOutput{RequestInfo: res.RequestInfo()}
- if err = marshalOutput(output.RequestID, res.Body, &output); err != nil {
- return nil, err
- }
- return &output, nil
- }
- func (cli *ClientV2) DeleteBucketLifecycle(ctx context.Context, input *DeleteBucketLifecycleInput) (*DeleteBucketLifecycleOutput, error) {
- if input == nil {
- return nil, InputIsNilClientError
- }
- if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
- return nil, err
- }
- res, err := cli.newBuilder(input.Bucket, "").
- WithQuery("lifecycle", "").
- WithRetry(nil, StatusCodeClassifier{}).
- Request(ctx, http.MethodDelete, nil, cli.roundTripper(http.StatusNoContent))
- if err != nil {
- return nil, err
- }
- defer res.Close()
- output := DeleteBucketLifecycleOutput{RequestInfo: res.RequestInfo()}
- return &output, nil
- }
|