blob: 83a76c1a838388c0cd5fc8f4fefe32f05a44dbc1 [file] [log] [blame]
package availabilityzones
import (
"encoding/json"
"time"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
// AvailabilityZone contains all the information associated with an OpenStack
// AvailabilityZone.
type AvailabilityZone struct {
// The availability zone ID.
ID string `json:"id"`
// The name of the availability zone.
Name string `json:"name"`
// The date and time stamp when the availability zone was created.
CreatedAt time.Time `json:"-"`
// The date and time stamp when the availability zone was updated.
UpdatedAt time.Time `json:"-"`
}
type commonResult struct {
gophercloud.Result
}
// ListResult contains the response body and error from a List request.
type AvailabilityZonePage struct {
pagination.SinglePageBase
}
// ExtractAvailabilityZones will get the AvailabilityZone objects out of the shareTypeAccessResult object.
func ExtractAvailabilityZones(r pagination.Page) ([]AvailabilityZone, error) {
var a struct {
AvailabilityZone []AvailabilityZone `json:"availability_zones"`
}
err := (r.(AvailabilityZonePage)).ExtractInto(&a)
return a.AvailabilityZone, err
}
func (r *AvailabilityZone) UnmarshalJSON(b []byte) error {
type tmp AvailabilityZone
var s struct {
tmp
CreatedAt gophercloud.JSONRFC3339MilliNoZ `json:"created_at"`
UpdatedAt gophercloud.JSONRFC3339MilliNoZ `json:"updated_at"`
}
err := json.Unmarshal(b, &s)
if err != nil {
return err
}
*r = AvailabilityZone(s.tmp)
r.CreatedAt = time.Time(s.CreatedAt)
r.UpdatedAt = time.Time(s.UpdatedAt)
return nil
}