|  | package extensions | 
|  |  | 
|  | import ( | 
|  | "github.com/gophercloud/gophercloud" | 
|  | "github.com/gophercloud/gophercloud/pagination" | 
|  | ) | 
|  |  | 
|  | // GetResult temporarily stores the result of a Get call. | 
|  | // Use its Extract() method to interpret it as an Extension. | 
|  | type GetResult struct { | 
|  | gophercloud.Result | 
|  | } | 
|  |  | 
|  | // Extract interprets a GetResult as an Extension. | 
|  | func (r GetResult) Extract() (*Extension, error) { | 
|  | var s struct { | 
|  | Extension *Extension `json:"extension"` | 
|  | } | 
|  | err := r.ExtractInto(&s) | 
|  | return s.Extension, err | 
|  | } | 
|  |  | 
|  | // Extension is a struct that represents an OpenStack extension. | 
|  | type Extension struct { | 
|  | Updated     string        `json:"updated"` | 
|  | Name        string        `json:"name"` | 
|  | Links       []interface{} `json:"links"` | 
|  | Namespace   string        `json:"namespace"` | 
|  | Alias       string        `json:"alias"` | 
|  | Description string        `json:"description"` | 
|  | } | 
|  |  | 
|  | // ExtensionPage is the page returned by a pager when traversing over a collection of extensions. | 
|  | type ExtensionPage struct { | 
|  | pagination.SinglePageBase | 
|  | } | 
|  |  | 
|  | // IsEmpty checks whether an ExtensionPage struct is empty. | 
|  | func (r ExtensionPage) IsEmpty() (bool, error) { | 
|  | is, err := ExtractExtensions(r) | 
|  | return len(is) == 0, err | 
|  | } | 
|  |  | 
|  | // ExtractExtensions accepts a Page struct, specifically an ExtensionPage struct, and extracts the | 
|  | // elements into a slice of Extension structs. | 
|  | // In other words, a generic collection is mapped into a relevant slice. | 
|  | func ExtractExtensions(r pagination.Page) ([]Extension, error) { | 
|  | var s struct { | 
|  | Extensions []Extension `json:"extensions"` | 
|  | } | 
|  | err := (r.(ExtensionPage)).ExtractInto(&s) | 
|  | return s.Extensions, err | 
|  | } |