remove mapstructure from identity,networking,objectstorage,orchestration,pagination
diff --git a/openstack/orchestration/v1/stackevents/results.go b/openstack/orchestration/v1/stackevents/results.go
index ac94bb5..6c7f183 100644
--- a/openstack/orchestration/v1/stackevents/results.go
+++ b/openstack/orchestration/v1/stackevents/results.go
@@ -1,11 +1,6 @@
package stackevents
import (
- "fmt"
- "reflect"
- "time"
-
- "github.com/mitchellh/mapstructure"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
@@ -13,23 +8,23 @@
// Event represents a stack event.
type Event struct {
// The name of the resource for which the event occurred.
- ResourceName string `mapstructure:"resource_name"`
+ ResourceName string `json:"resource_name"`
// The time the event occurred.
- Time time.Time `mapstructure:"-"`
+ Time gophercloud.JSONRFC3339NoZ `json:"event_time"`
// The URLs to the event.
- Links []gophercloud.Link `mapstructure:"links"`
+ Links []gophercloud.Link `json:"links"`
// The logical ID of the stack resource.
- LogicalResourceID string `mapstructure:"logical_resource_id"`
+ LogicalResourceID string `json:"logical_resource_id"`
// The reason of the status of the event.
- ResourceStatusReason string `mapstructure:"resource_status_reason"`
+ ResourceStatusReason string `json:"resource_status_reason"`
// The status of the event.
- ResourceStatus string `mapstructure:"resource_status"`
+ ResourceStatus string `json:"resource_status"`
// The physical ID of the stack resource.
- PhysicalResourceID string `mapstructure:"physical_resource_id"`
+ PhysicalResourceID string `json:"physical_resource_id"`
// The event ID.
- ID string `mapstructure:"id"`
+ ID string `json:"id"`
// Properties of the stack resource.
- ResourceProperties map[string]interface{} `mapstructure:"resource_properties"`
+ ResourceProperties map[string]interface{} `json:"resource_properties"`
}
// FindResult represents the result of a Find operation.
@@ -40,32 +35,11 @@
// Extract returns a slice of Event objects and is called after a
// Find operation.
func (r FindResult) Extract() ([]Event, error) {
- if r.Err != nil {
- return nil, r.Err
+ var s struct {
+ Events []Event `json:"events"`
}
-
- var res struct {
- Res []Event `mapstructure:"events"`
- }
-
- if err := mapstructure.Decode(r.Body, &res); err != nil {
- return nil, err
- }
-
- events := r.Body.(map[string]interface{})["events"].([]interface{})
-
- for i, eventRaw := range events {
- event := eventRaw.(map[string]interface{})
- if date, ok := event["event_time"]; ok && date != nil {
- t, err := time.Parse(gophercloud.StackFmtTime, date.(string))
- if err != nil {
- return nil, err
- }
- res.Res[i].Time = t
- }
- }
-
- return res.Res, nil
+ err := r.ExtractInto(&s)
+ return s.Events, err
}
// EventPage abstracts the raw results of making a List() request against the API.
@@ -78,10 +52,7 @@
// IsEmpty returns true if a page contains no Server results.
func (r EventPage) IsEmpty() (bool, error) {
events, err := ExtractEvents(r)
- if err != nil {
- return true, err
- }
- return len(events) == 0, nil
+ return len(events) == 0, err
}
// LastMarker returns the last stack ID in a ListResult.
@@ -97,39 +68,12 @@
}
// ExtractEvents interprets the results of a single page from a List() call, producing a slice of Event entities.
-func ExtractEvents(page pagination.Page) ([]Event, error) {
- casted := page.(EventPage).Body
-
- var res struct {
- Res []Event `mapstructure:"events"`
+func ExtractEvents(r pagination.Page) ([]Event, error) {
+ var s struct {
+ Events []Event `json:"events"`
}
-
- if err := mapstructure.Decode(casted, &res); err != nil {
- return nil, err
- }
-
- var events []interface{}
- switch casted.(type) {
- case map[string]interface{}:
- events = casted.(map[string]interface{})["events"].([]interface{})
- case map[string][]interface{}:
- events = casted.(map[string][]interface{})["events"]
- default:
- return res.Res, fmt.Errorf("Unknown type: %v", reflect.TypeOf(casted))
- }
-
- for i, eventRaw := range events {
- event := eventRaw.(map[string]interface{})
- if date, ok := event["event_time"]; ok && date != nil {
- t, err := time.Parse(gophercloud.StackFmtTime, date.(string))
- if err != nil {
- return nil, err
- }
- res.Res[i].Time = t
- }
- }
-
- return res.Res, nil
+ err := (r.(EventPage)).ExtractInto(&s)
+ return s.Events, err
}
// ExtractResourceEvents interprets the results of a single page from a
@@ -146,27 +90,9 @@
// Extract returns a pointer to an Event object and is called after a
// Get operation.
func (r GetResult) Extract() (*Event, error) {
- if r.Err != nil {
- return nil, r.Err
+ var s struct {
+ Event *Event `json:"event"`
}
-
- var res struct {
- Res *Event `mapstructure:"event"`
- }
-
- if err := mapstructure.Decode(r.Body, &res); err != nil {
- return nil, err
- }
-
- event := r.Body.(map[string]interface{})["event"].(map[string]interface{})
-
- if date, ok := event["event_time"]; ok && date != nil {
- t, err := time.Parse(gophercloud.StackFmtTime, date.(string))
- if err != nil {
- return nil, err
- }
- res.Res.Time = t
- }
-
- return res.Res, nil
+ err := r.ExtractInto(&s)
+ return s.Event, err
}