| package gophercloud |
| |
| import "net/http" |
| |
| // Result acts as a base struct that other results can embed. |
| type Result struct { |
| // Resp is the deserialized JSON structure returned from the server. |
| Resp map[string]interface{} |
| |
| // Headers contains the HTTP header structure from the original response. |
| Headers http.Header |
| |
| // Err is an error that occurred during the operation. It's deferred until extraction to make |
| // it easier to chain operations. |
| Err error |
| } |
| |
| // RFC3339Milli describes a time format used by API responses. |
| const RFC3339Milli = "2006-01-02T15:04:05.999999Z" |
| |
| // Link represents a structure that enables paginated collections how to |
| // traverse backward or forward. The "Rel" field is usually either "next". |
| type Link struct { |
| Href string `mapstructure:"href"` |
| Rel string `mapstructure:"rel"` |
| } |
| |
| // ExtractNextURL attempts to extract the next URL from a JSON structure. It |
| // follows the common structure of nesting back and next links. |
| func ExtractNextURL(links []Link) (string, error) { |
| var url string |
| |
| for _, l := range links { |
| if l.Rel == "next" { |
| url = l.Href |
| } |
| } |
| |
| if url == "" { |
| return "", nil |
| } |
| |
| return url, nil |
| } |