aboutsummaryrefslogtreecommitdiff
path: root/request.go
diff options
context:
space:
mode:
Diffstat (limited to 'request.go')
-rw-r--r--request.go34
1 files changed, 27 insertions, 7 deletions
diff --git a/request.go b/request.go
index b96670b..3e089c0 100644
--- a/request.go
+++ b/request.go
@@ -26,20 +26,39 @@ import (
"strings"
)
-//RequestOptions contains additional headers and values for a request.
+//RequestOptions is used to pass additional headers and values to aa request.
+//
+//When preparing a RequestOptions instance with additional headers, the
+//preferred way is to create an AccountHeaders, ContainerHeaders and
+//ObjectHeaders instance and use the type-safe API on these types. Then use the
+//ToOpts() method on that instance. For example:
+//
+// hdr := NewObjectHeaders()
+// hdr.ContentType().Set("image/png")
+// hdr.Metadata().Set("color", "blue")
+// opts := hdr.ToOpts() //type *schwift.RequestOptions
+//
type RequestOptions struct {
- Values url.Values
+ Headers Headers
+ Values url.Values
}
-func cloneRequestOptions(orig *RequestOptions) *RequestOptions {
+func cloneRequestOptions(orig *RequestOptions, additional Headers) *RequestOptions {
result := RequestOptions{
- Values: make(url.Values),
+ Headers: make(Headers),
+ Values: make(url.Values),
}
if orig != nil {
+ for k, v := range orig.Headers {
+ result.Headers[k] = v
+ }
for k, v := range orig.Values {
result.Values[k] = v
}
}
+ for k, v := range additional {
+ result.Headers[k] = v
+ }
return &result
}
@@ -48,7 +67,6 @@ type Request struct {
Method string //"GET", "HEAD", "PUT", "POST" or "DELETE"
ContainerName string //empty for requests on accounts
ObjectName string //empty for requests on accounts/containers
- Headers http.Header
Options *RequestOptions
Body io.Reader
//ExpectStatusCodes can be left empty to disable this check, otherwise
@@ -102,8 +120,10 @@ func (r Request) Do(backend Backend) (*http.Response, error) {
return nil, err
}
- for k, v := range r.Headers {
- req.Header[k] = v
+ if r.Options != nil {
+ for k, v := range r.Options.Headers {
+ req.Header[k] = []string{v}
+ }
}
if r.Body != nil {
req.Header.Set("Expect", "100-continue")