Feature/filestorage availabilityzones list (#153)
* sfs: Add support for Availability Zone List
* sfs: Add acceptance tests for Availability zones List
* sfs: Fix review comments
diff --git a/openstack/sharedfilesystems/v2/availabilityzones/results.go b/openstack/sharedfilesystems/v2/availabilityzones/results.go
new file mode 100644
index 0000000..83a76c1
--- /dev/null
+++ b/openstack/sharedfilesystems/v2/availabilityzones/results.go
@@ -0,0 +1,59 @@
+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
+}