| package services |
| |
| import ( |
| "github.com/gophercloud/gophercloud" |
| "github.com/gophercloud/gophercloud/pagination" |
| ) |
| |
| type commonResult struct { |
| gophercloud.Result |
| } |
| |
| // Extract interprets a GetResult, CreateResult or UpdateResult as a concrete Service. |
| // An error is returned if the original call or the extraction failed. |
| func (r commonResult) Extract() (*Service, error) { |
| var s struct { |
| Service *Service `json:"service"` |
| } |
| err := r.ExtractInto(&s) |
| return s.Service, err |
| } |
| |
| // CreateResult is the deferred result of a Create call. |
| type CreateResult struct { |
| commonResult |
| } |
| |
| // GetResult is the deferred result of a Get call. |
| type GetResult struct { |
| commonResult |
| } |
| |
| // UpdateResult is the deferred result of an Update call. |
| type UpdateResult struct { |
| commonResult |
| } |
| |
| // DeleteResult is the deferred result of an Delete call. |
| type DeleteResult struct { |
| gophercloud.ErrResult |
| } |
| |
| // Service is the result of a list or information query. |
| type Service struct { |
| Description string `json:"description` |
| ID string `json:"id"` |
| Name string `json:"name"` |
| Type string `json:"type"` |
| } |
| |
| // ServicePage is a single page of Service results. |
| type ServicePage struct { |
| pagination.LinkedPageBase |
| } |
| |
| // IsEmpty returns true if the page contains no results. |
| func (p ServicePage) IsEmpty() (bool, error) { |
| services, err := ExtractServices(p) |
| return len(services) == 0, err |
| } |
| |
| // ExtractServices extracts a slice of Services from a Collection acquired from List. |
| func ExtractServices(r pagination.Page) ([]Service, error) { |
| var s struct { |
| Services []Service `json:"services"` |
| } |
| err := (r.(ServicePage)).ExtractInto(&s) |
| return s.Services, err |
| } |