diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2018-02-19 14:40:33 +0100 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2018-02-19 14:40:33 +0100 |
| commit | 1a84987c7e28094f4e65bfb0fa03fdf5059ef6cc (patch) | |
| tree | 26e8afc474d838259a75cbb7c62bd942bc7e8d37 /iterator.go | |
| parent | be80f087d7857d7ca1418aa797eadde39806cbf8 (diff) | |
| download | go-schwift-1a84987c7e28094f4e65bfb0fa03fdf5059ef6cc.tar.gz | |
initialize .Headers on accounts/containers during GET requests
Diffstat (limited to 'iterator.go')
| -rw-r--r-- | iterator.go | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/iterator.go b/iterator.go index aebeb91..acbc449 100644 --- a/iterator.go +++ b/iterator.go @@ -20,6 +20,7 @@ package schwift import ( "encoding/json" + "net/http" "strconv" "strings" ) @@ -32,6 +33,9 @@ type iteratorInterface interface { getPrefix() string getHeaders() map[string]string getOptions() *RequestOptions + //putHeader initializes the AccountHeaders/ContainerHeaders field of the + //Account/Container using the response headers from the GET request. + putHeader(http.Header) error } func (i ContainerIterator) getAccount() *Account { return i.Account } @@ -40,12 +44,30 @@ func (i ContainerIterator) getPrefix() string { return i.Prefix } func (i ContainerIterator) getHeaders() map[string]string { return i.Headers } func (i ContainerIterator) getOptions() *RequestOptions { return i.Options } +func (i ContainerIterator) putHeader(hdr http.Header) error { + headers := AccountHeaders(headersFromHTTP(hdr)) + if err := headers.Validate(); err != nil { + return err + } + i.Account.headers = &headers + return nil +} + func (i ObjectIterator) getAccount() *Account { return i.Container.Account() } func (i ObjectIterator) getContainerName() string { return i.Container.Name() } func (i ObjectIterator) getPrefix() string { return i.Prefix } func (i ObjectIterator) getHeaders() map[string]string { return i.Headers } func (i ObjectIterator) getOptions() *RequestOptions { return i.Options } +func (i ObjectIterator) putHeader(hdr http.Header) error { + headers := ContainerHeaders(headersFromHTTP(hdr)) + if err := headers.Validate(); err != nil { + return err + } + i.Container.headers = &headers + return nil +} + //iteratorBase provides shared behavior for ContainerIterator and ObjectIterator. type iteratorBase struct { i iteratorInterface @@ -116,7 +138,7 @@ func (b *iteratorBase) nextPage(limit int) ([]string, error) { b.eof = false b.marker = result[len(result)-1] } - return result, nil + return result, b.i.putHeader(resp.Header) } func (b *iteratorBase) nextPageDetailed(limit int, data interface{}) error { @@ -133,6 +155,9 @@ func (b *iteratorBase) nextPageDetailed(limit int, data interface{}) error { if err == nil { err = closeErr } + if err == nil { + err = b.i.putHeader(resp.Header) + } return err } |
