Right, that's a smarter way to share a method.
diff --git a/openstack/compute/v2/servers/results.go b/openstack/compute/v2/servers/results.go
index 8e967f0..29cbf13 100644
--- a/openstack/compute/v2/servers/results.go
+++ b/openstack/compute/v2/servers/results.go
@@ -65,8 +65,12 @@
AdminPass string `mapstructure:"adminPass"`
}
-// extractServer interprets the result of a call expected to return data on a single server.
-func extractServer(r gophercloud.CommonResult) (*Server, error) {
+type serverResult struct {
+ gophercloud.CommonResult
+}
+
+// Extract interprets any serverResult as a Server, if possible.
+func (r serverResult) Extract() (*Server, error) {
if r.Err != nil {
return nil, r.Err
}
@@ -81,42 +85,22 @@
// CreateResult temporarily contains the response from a Create call.
type CreateResult struct {
- gophercloud.CommonResult
-}
-
-// Extract interprets a CreateResult as a Server, if possible.
-func (r CreateResult) Extract() (*Server, error) {
- return extractServer(r.CommonResult)
+ serverResult
}
// GetResult temporarily contains the response from a Get call.
type GetResult struct {
- gophercloud.CommonResult
-}
-
-// Extract interprets a GetResult as a Server, if possible.
-func (r GetResult) Extract() (*Server, error) {
- return extractServer(r.CommonResult)
+ serverResult
}
// UpdateResult temporarily contains the response from an Update call.
type UpdateResult struct {
- gophercloud.CommonResult
-}
-
-// Extract interprets an UpdateResult as a Server, if possible.
-func (r UpdateResult) Extract() (*Server, error) {
- return extractServer(r.CommonResult)
+ serverResult
}
// RebuildResult temporarily contains the response from a Rebuild call.
type RebuildResult struct {
- gophercloud.CommonResult
-}
-
-// Extract interprets a RebuildResult as a Server, if possible.
-func (r RebuildResult) Extract() (*Server, error) {
- return extractServer(r.CommonResult)
+ serverResult
}
// ExtractServers interprets the results of a single page from a List() call, producing a slice of Server entities.