Rackspace Auto Scale: Add policies List()
diff --git a/rackspace/autoscale/v1/policies/results.go b/rackspace/autoscale/v1/policies/results.go
new file mode 100644
index 0000000..4a6c2ba
--- /dev/null
+++ b/rackspace/autoscale/v1/policies/results.go
@@ -0,0 +1,85 @@
+package policies
+
+import (
+ "github.com/mitchellh/mapstructure"
+
+ "github.com/rackspace/gophercloud"
+ "github.com/rackspace/gophercloud/pagination"
+)
+
+type policyResult struct {
+ gophercloud.Result
+}
+
+// Policy represents a scaling policy.
+type Policy struct {
+ // UUID for the policy.
+ ID string `mapstructure:"id" json:"id"`
+
+ // Name of the policy.
+ Name string `mapstructure:"name" json:"name"`
+
+ // Type of scaling policy.
+ Type Type `mapstructure:"type" json:"type"`
+
+ // Cooldown period, in seconds.
+ Cooldown int `mapstructure:"cooldown" json:"cooldown"`
+
+ // Number of servers added or, if negative, removed.
+ Change interface{} `mapstructure:"change" json:"change"`
+
+ // Percent change to make in the number of servers.
+ ChangePercent interface{} `mapstructure:"changePercent" json:"changePercent"`
+
+ // Desired capacity of the of the associated group.
+ DesiredCapacity interface{} `mapstructure:"desiredCapacity" json:"desiredCapacity"`
+
+ // Additional configuration options for some types of policy.
+ Args map[string]interface{} `mapstructure:"args" json:"args"`
+}
+
+// Type represents a type of scaling policy.
+type Type string
+
+const (
+ // Schedule policies run at given times.
+ Schedule Type = "schedule"
+
+ // Webhook policies are triggered by HTTP requests.
+ Webhook Type = "webhook"
+)
+
+// PolicyPage is the page returned by a pager when traversing over a collection
+// of scaling policies.
+type PolicyPage struct {
+ pagination.SinglePageBase
+}
+
+// IsEmpty returns true if a page contains no Policy results.
+func (page PolicyPage) IsEmpty() (bool, error) {
+ policies, err := ExtractPolicies(page)
+
+ if err != nil {
+ return true, err
+ }
+
+ return len(policies) == 0, nil
+}
+
+// ExtractPolicies interprets the results of a single page from a List() call,
+// producing a slice of Policies.
+func ExtractPolicies(page pagination.Page) ([]Policy, error) {
+ casted := page.(PolicyPage).Body
+
+ var response struct {
+ Policies []Policy `mapstructure:"policies"`
+ }
+
+ err := mapstructure.Decode(casted, &response)
+
+ if err != nil {
+ return nil, err
+ }
+
+ return response.Policies, err
+}