github.com/gophercloud/gophercloud@v1.11.0/openstack/compute/apiversions/results.go (about)

     1  package apiversions
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/gophercloud/gophercloud"
     7  	"github.com/gophercloud/gophercloud/pagination"
     8  )
     9  
    10  // APIVersion represents an API version for the Nova service.
    11  type APIVersion struct {
    12  	// ID is the unique identifier of the API version.
    13  	ID string `json:"id"`
    14  
    15  	// MinVersion is the minimum microversion supported.
    16  	MinVersion string `json:"min_version"`
    17  
    18  	// Status is the API versions status.
    19  	Status string `json:"status"`
    20  
    21  	// Updated is the date when the API was last updated.
    22  	Updated time.Time `json:"updated"`
    23  
    24  	// Version is the maximum microversion supported.
    25  	Version string `json:"version"`
    26  }
    27  
    28  // APIVersionPage is the page returned by a pager when traversing over a
    29  // collection of API versions.
    30  type APIVersionPage struct {
    31  	pagination.SinglePageBase
    32  }
    33  
    34  // IsEmpty checks whether an APIVersionPage struct is empty.
    35  func (r APIVersionPage) IsEmpty() (bool, error) {
    36  	if r.StatusCode == 204 {
    37  		return true, nil
    38  	}
    39  
    40  	is, err := ExtractAPIVersions(r)
    41  	return len(is) == 0, err
    42  }
    43  
    44  // ExtractAPIVersions takes a collection page, extracts all of the elements,
    45  // and returns them a slice of APIVersion structs. It is effectively a cast.
    46  func ExtractAPIVersions(r pagination.Page) ([]APIVersion, error) {
    47  	var s struct {
    48  		Versions []APIVersion `json:"versions"`
    49  	}
    50  	err := (r.(APIVersionPage)).ExtractInto(&s)
    51  	return s.Versions, err
    52  }
    53  
    54  // GetResult represents the result of a get operation.
    55  type GetResult struct {
    56  	gophercloud.Result
    57  }
    58  
    59  // Extract is a function that accepts a result and extracts an API version resource.
    60  func (r GetResult) Extract() (*APIVersion, error) {
    61  	var s struct {
    62  		Version *APIVersion `json:"version"`
    63  	}
    64  	err := r.ExtractInto(&s)
    65  
    66  	if s.Version == nil && err == nil {
    67  		return nil, ErrVersionNotFound{}
    68  	}
    69  
    70  	return s.Version, err
    71  }