initial os-quota-set api; GET unit test
diff --git a/openstack/compute/v2/extensions/quota/results.go b/openstack/compute/v2/extensions/quota/results.go
new file mode 100644
index 0000000..07031f1
--- /dev/null
+++ b/openstack/compute/v2/extensions/quota/results.go
@@ -0,0 +1,117 @@
+package quotas
+
+import (
+	"github.com/mitchellh/mapstructure"
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/pagination"
+)
+
+// Quota is a set of operational limits that allow for control of compute usage.
+const sample = `
+{
+  "quota_set" : {
+	"fixed_ips" : -1,
+	"security_groups" : 10,
+	"id" : "56b6c3eb639e48c691052919e5a60dc3",
+	"injected_files" : 5,
+	"injected_file_path_bytes" : 255,
+	"cores" : 108,
+	"security_group_rules" : 20,
+	"keypairs" : 10,
+	"instances" : 25,
+	"ram" : 204800,
+	"metadata_items" : 128,
+	"injected_file_content_bytes" : 10240
+  }
+}
+`
+
+type Quota struct {
+	//ID is tenant associated with this quota_set
+	ID string `mapstructure:"id"`
+	//FixedIps is number of fixed ips alloted this quota_set
+	FixedIps int `mapstructure:"fixed_ips"`
+	// FloatingIps is number of floatinh ips alloted this quota_set
+	FloatingIps int `mapstructure:"floating_ips"`
+	// InjectedFileContentBytes is content bytes allowed for each injected file
+	InjectedFileContentBytes int `mapstructure:"injected_file_content_bytes"`
+	// InjectedFilePathBytes is allowed bytes for each injected file path
+	InjectedFilePathBytes int `mapstructure:"injected_file_path_bytes"`
+	// InjectedFiles is injected files allowed for each project
+	InjectedFiles int `mapstructure:"injected_files"`
+	// KeyPairs is number of ssh keypairs
+	KeyPairs int `mapstructure:"keypairs"`
+	// MetadataItems is number of metadata items allowed for each instance
+	MetadataItems int `mapstructure:"metadata_items"`
+	// Ram is megabytes allowed for each instance
+	Ram int `mapstructure:"ram"`
+	// SecurityGroupRules is rules allowed for each security group
+	SecurityGroupRules int `mapstructure:"security_group_rules"`
+	// SecurityGroups security groups allowed for each project
+	SecurityGroups int `mapstructure:"security_groups"`
+	// Cores is number of instance cores allowed for each project
+	Cores int `mapstructure:"cores"`
+	// Instances is number of instances allowed for each project
+	Instances int `mapstructure:"instances"`
+}
+
+// QuotaPage stores a single, only page of Quota results from a List call.
+type QuotaPage struct {
+	pagination.SinglePageBase
+}
+
+// IsEmpty determines whether or not a QuotaPage is empty.
+func (page QuotaPage) IsEmpty() (bool, error) {
+	ks, err := ExtractQuotas(page)
+	return len(ks) == 0, err
+}
+
+// ExtractQuotas interprets a page of results as a slice of Quotas.
+func ExtractQuotas(page pagination.Page) ([]Quota, error) {
+	var resp struct {
+		Quotas []Quota `mapstructure:"quotas"`
+	}
+
+	err := mapstructure.Decode(page.(QuotaPage).Body, &resp)
+	results := make([]Quota, len(resp.Quotas))
+	for i, q := range resp.Quotas {
+		results[i] = q
+	}
+	return results, err
+}
+
+type quotaResult struct {
+	gophercloud.Result
+}
+
+// Extract is a method that attempts to interpret any Quota resource response as a Quota struct.
+func (r quotaResult) Extract() (*Quota, error) {
+	if r.Err != nil {
+		return nil, r.Err
+	}
+
+	var res struct {
+		Quota *Quota `json:"quota_set" mapstructure:"quota_set"`
+	}
+
+	err := mapstructure.Decode(r.Body, &res)
+	return res.Quota, err
+}
+
+// CreateResult is the response from a Create operation. Call its Extract method to interpret it
+// as a Quota.
+type CreateResult struct {
+	quotaResult
+}
+
+// GetResult is the response from a Get operation. Call its Extract method to interpret it
+// as a Quota.
+type GetResult struct {
+	quotaResult
+}
+
+// DeleteResult is the response from a Delete operation. Call its Extract method to determine if
+// the call succeeded or failed.
+type DeleteResult struct {
+	gophercloud.ErrResult
+}