diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2018-01-28 22:47:35 +0100 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2018-01-28 22:47:35 +0100 |
| commit | 3834e49c90c39f4c95e3b9e7bb52b35204a75625 (patch) | |
| tree | 480a3e2867dc076c459ee2279e98eb546bc6ca10 /account.go | |
| parent | a9595114a691fd04ba043c1b1564741a107bbcdd (diff) | |
| download | go-schwift-3834e49c90c39f4c95e3b9e7bb52b35204a75625.tar.gz | |
sketch out how requests could work
Diffstat (limited to 'account.go')
| -rw-r--r-- | account.go | 58 |
1 files changed, 58 insertions, 0 deletions
@@ -20,6 +20,7 @@ package schwift import ( "fmt" + "net/http" "regexp" "github.com/gophercloud/gophercloud" @@ -31,6 +32,8 @@ type Account struct { //URL parts baseURL string name string + //cache + metadata *AccountMetadata } //////////////////////////////////////////////////////////////////////////////// @@ -85,5 +88,60 @@ func (a *Account) Client() *gophercloud.ServiceClient { //////////////////////////////////////////////////////////////////////////////// // account metadata +//AccountMetadata contains the metadata for an account. The `Raw` attribute +//contains the raw set of headers returned from a HEAD or GET request on the +//account. The other attributes contain the parsed values of common headers. +type AccountMetadata struct { + Exists bool + BytesUsed uint64 //from X-Account-Bytes-Used + ContainerCount uint64 //from X-Account-Container-Count + ObjectCount uint64 //from X-Account-Object-Count + //TODO account quota + Raw http.Header +} + +//Metadata returns the metadata for this account. If the account does not exist, +func (a *Account) Metadata() (AccountMetadata, error) { + if a.metadata != nil { + return *a.metadata, nil + } + + resp, err := Request{ + Method: "HEAD", + ExpectStatusCodes: []int{200}, + }.Do(a.client) + if err != nil { + return AccountMetadata{}, err + } + + a.metadata, err = parseAccountMetadata(resp) + if err != nil { + return AccountMetadata{}, err + } + return *a.metadata, nil +} + +func parseAccountMetadata(resp *http.Response) (*AccountMetadata, error) { + bytesUsed, err := parseUnsignedIntHeader(resp, "X-Account-Bytes-Used") + if err != nil { + return nil, err + } + containerCount, err := parseUnsignedIntHeader(resp, "X-Account-Container-Count") + if err != nil { + return nil, err + } + objectCount, err := parseUnsignedIntHeader(resp, "X-Account-Object-Count") + if err != nil { + return nil, err + } + return &AccountMetadata{ + Exists: true, + BytesUsed: bytesUsed, + ContainerCount: containerCount, + ObjectCount: objectCount, + Raw: resp.Header, + }, nil +} + //////////////////////////////////////////////////////////////////////////////// // container listing |
