github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/obs/extension.go (about)

     1  // Copyright 2019 Huawei Technologies Co.,Ltd.
     2  // Licensed under the Apache License, Version 2.0 (the "License"); you may not use
     3  // this file except in compliance with the License.  You may obtain a copy of the
     4  // License at
     5  //
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software distributed
     9  // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    10  // CONDITIONS OF ANY KIND, either express or implied.  See the License for the
    11  // specific language governing permissions and limitations under the License.
    12  
    13  package obs
    14  
    15  import (
    16  	"fmt"
    17  	"strconv"
    18  	"strings"
    19  )
    20  
    21  type extensionOptions interface{}
    22  type extensionHeaders func(headers map[string][]string, isObs bool) error
    23  type extensionProgressListener func() ProgressListener
    24  
    25  func WithProgress(progressListener ProgressListener) extensionProgressListener {
    26  	return func() ProgressListener {
    27  		return progressListener
    28  	}
    29  }
    30  
    31  func setHeaderPrefix(key string, value string) extensionHeaders {
    32  	return func(headers map[string][]string, isObs bool) error {
    33  		if strings.TrimSpace(value) == "" {
    34  			return fmt.Errorf("set header %s with empty value", key)
    35  		}
    36  		setHeaders(headers, key, []string{value}, isObs)
    37  		return nil
    38  	}
    39  }
    40  
    41  // WithReqPaymentHeader sets header for requester-pays
    42  func WithReqPaymentHeader(requester PayerType) extensionHeaders {
    43  	return setHeaderPrefix(REQUEST_PAYER, string(requester))
    44  }
    45  
    46  func WithTrafficLimitHeader(trafficLimit int64) extensionHeaders {
    47  	return setHeaderPrefix(TRAFFIC_LIMIT, strconv.FormatInt(trafficLimit, 10))
    48  }
    49  
    50  func WithCallbackHeader(callback string) extensionHeaders {
    51  	return setHeaderPrefix(CALLBACK, string(callback))
    52  }
    53  
    54  func WithCustomHeader(key string, value string) extensionHeaders {
    55  	return func(headers map[string][]string, isObs bool) error {
    56  		if strings.TrimSpace(value) == "" {
    57  			return fmt.Errorf("set header %s with empty value", key)
    58  		}
    59  		headers[key] = []string{value}
    60  		return nil
    61  	}
    62  }