func TestBuildHeaders(t *testing.T) { testStruct := struct { Accept string `h:"Accept"` Num int `h:"Number,required"` Style bool `h:"Style"` }{ Accept: "application/json", Num: 4, Style: true, } expected := map[string]string{"Accept": "application/json", "Number": "4", "Style": "true"} actual, err := gophercloud.BuildHeaders(&testStruct) th.CheckNoErr(t, err) th.CheckDeepEquals(t, expected, actual) testStruct.Num = 0 _, err = gophercloud.BuildHeaders(&testStruct) if err == nil { t.Errorf("Expected error: 'Required header not set'") } _, err = gophercloud.BuildHeaders(map[string]interface{}{"Number": 4}) if err == nil { t.Errorf("Expected error: 'Options type is not a struct'") } }
// ToObjectCreateParams formats a CreateOpts into a query string and map of // headers. func (opts CreateOpts) ToObjectCreateParams() (io.Reader, map[string]string, string, error) { q, err := gophercloud.BuildQueryString(opts) if err != nil { return nil, nil, "", err } h, err := gophercloud.BuildHeaders(opts) if err != nil { return nil, nil, "", err } for k, v := range opts.Metadata { h["X-Object-Meta-"+k] = v } hash := md5.New() buf := bytes.NewBuffer([]byte{}) _, err = io.Copy(io.MultiWriter(hash, buf), opts.Content) if err != nil { return nil, nil, "", err } localChecksum := fmt.Sprintf("%x", hash.Sum(nil)) h["ETag"] = localChecksum return buf, h, q.String(), nil }
// ToAccountUpdateMap formats an UpdateOpts into a map[string]string of headers. func (opts UpdateOpts) ToAccountUpdateMap() (map[string]string, error) { headers, err := gophercloud.BuildHeaders(opts) if err != nil { return nil, err } for k, v := range opts.Metadata { headers["X-Account-Meta-"+k] = v } return headers, err }
// ToObjectUpdateMap formats a UpdateOpts into a map of headers. func (opts UpdateOpts) ToObjectUpdateMap() (map[string]string, error) { h, err := gophercloud.BuildHeaders(opts) if err != nil { return nil, err } for k, v := range opts.Metadata { h["X-Object-Meta-"+k] = v } return h, nil }
// ToContainerCreateMap formats a CreateOpts into a map of headers. func (opts CreateOpts) ToContainerCreateMap() (map[string]string, error) { h, err := gophercloud.BuildHeaders(opts) if err != nil { return nil, err } for k, v := range opts.Metadata { h["X-Container-Meta-"+k] = v } return h, nil }
// ToObjectDownloadParams formats a DownloadOpts into a query string and map of // headers. func (opts DownloadOpts) ToObjectDownloadParams() (map[string]string, string, error) { q, err := gophercloud.BuildQueryString(opts) if err != nil { return nil, "", err } h, err := gophercloud.BuildHeaders(opts) if err != nil { return nil, q.String(), err } return h, q.String(), nil }
// ToAccountGetMap formats a GetOpts into a map[string]string of headers. func (opts GetOpts) ToAccountGetMap() (map[string]string, error) { return gophercloud.BuildHeaders(opts) }
// ToAuthOptsMap formats an AuthOpts structure into a request body. func (opts AuthOpts) ToAuthOptsMap() (map[string]string, error) { return gophercloud.BuildHeaders(opts) }