refactor 'ExtractHeader' to 'gophercloud' proper
diff --git a/openstack/objectstorage/v1/accounts/results.go b/openstack/objectstorage/v1/accounts/results.go
index b254db9..abae026 100644
--- a/openstack/objectstorage/v1/accounts/results.go
+++ b/openstack/objectstorage/v1/accounts/results.go
@@ -1,23 +1,14 @@
 package accounts
 
 import (
-	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
 )
 
-type headerResult struct {
-	gophercloud.Result
-}
-
-func (hr headerResult) ExtractHeader() (http.Header, error) {
-	return hr.Header, hr.Err
-}
-
 // GetResult is returned from a call to the Get function.
 type GetResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -39,5 +30,5 @@
 
 // UpdateResult is returned from a call to the Update function.
 type UpdateResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
diff --git a/openstack/objectstorage/v1/containers/results.go b/openstack/objectstorage/v1/containers/results.go
index e3cddc4..74f3286 100644
--- a/openstack/objectstorage/v1/containers/results.go
+++ b/openstack/objectstorage/v1/containers/results.go
@@ -2,7 +2,6 @@
 
 import (
 	"fmt"
-	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
@@ -97,17 +96,9 @@
 	}
 }
 
-type headerResult struct {
-	gophercloud.Result
-}
-
-func (hr headerResult) ExtractHeader() (http.Header, error) {
-	return hr.Header, hr.Err
-}
-
 // GetResult represents the result of a get operation.
 type GetResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -130,19 +121,19 @@
 // the headers from the HTTP response, you can invoke the 'ExtractHeader'
 // method on the result struct.
 type CreateResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // UpdateResult represents the result of an update operation. To extract the
 // the headers from the HTTP response, you can invoke the 'ExtractHeader'
 // method on the result struct.
 type UpdateResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // DeleteResult represents the result of a delete operation. To extract the
 // the headers from the HTTP response, you can invoke the 'ExtractHeader'
 // method on the result struct.
 type DeleteResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
diff --git a/openstack/objectstorage/v1/objects/results.go b/openstack/objectstorage/v1/objects/results.go
index 274d8a6..102d94c 100644
--- a/openstack/objectstorage/v1/objects/results.go
+++ b/openstack/objectstorage/v1/objects/results.go
@@ -4,7 +4,6 @@
 	"fmt"
 	"io"
 	"io/ioutil"
-	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
@@ -98,17 +97,9 @@
 	}
 }
 
-type headerResult struct {
-	gophercloud.Result
-}
-
-func (hr headerResult) ExtractHeader() (http.Header, error) {
-	return hr.Header, hr.Err
-}
-
 // DownloadResult is a *http.Response that is returned from a call to the Download function.
 type DownloadResult struct {
-	headerResult
+	gophercloud.HeaderResult
 	Body io.ReadCloser
 }
 
@@ -131,7 +122,7 @@
 
 // GetResult is a *http.Response that is returned from a call to the Get function.
 type GetResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -152,20 +143,20 @@
 
 // CreateResult represents the result of a create operation.
 type CreateResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // UpdateResult represents the result of an update operation.
 type UpdateResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // DeleteResult represents the result of a delete operation.
 type DeleteResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
 
 // CopyResult represents the result of a copy operation.
 type CopyResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
diff --git a/rackspace/objectstorage/v1/cdncontainers/results.go b/rackspace/objectstorage/v1/cdncontainers/results.go
index 05367e2..a5097ca 100644
--- a/rackspace/objectstorage/v1/cdncontainers/results.go
+++ b/rackspace/objectstorage/v1/cdncontainers/results.go
@@ -1,20 +1,8 @@
 package cdncontainers
 
-import (
-	"net/http"
-
-	"github.com/rackspace/gophercloud"
-)
-
-type headerResult struct {
-	gophercloud.Result
-}
-
-func (hr headerResult) ExtractHeader() (http.Header, error) {
-	return hr.Header, hr.Err
-}
+import "github.com/rackspace/gophercloud"
 
 // EnableResult represents the result of a get operation.
 type EnableResult struct {
-	headerResult
+	gophercloud.HeaderResult
 }
diff --git a/results.go b/results.go
index e60088e..e691cd8 100644
--- a/results.go
+++ b/results.go
@@ -40,6 +40,21 @@
 	return r.Err
 }
 
+// HeaderResult represents a result that only contains an `error` (possibly nil)
+// and an http.Header. This is used, for example, by the `objectstorage` packages
+// in `openstack` because most of the operations don't return response bodies. This
+// object is a gopherclou.Result without the `Body` field.
+type HeaderResult struct {
+	Header http.Header
+	Err    error
+}
+
+// ExtractHeader will return the http.Header and error from the HeaderResult.
+// Usage: header, err := objects.Create(client, "my_container", objects.CreateOpts{}).ExtractHeader()
+func (hr HeaderResult) ExtractHeader() (http.Header, error) {
+	return hr.Header, hr.Err
+}
+
 // RFC3339Milli describes a time format used by API responses.
 const RFC3339Milli = "2006-01-02T15:04:05.999999Z"