virtual interfaces operations & unit tests; networks unit tests
diff --git a/rackspace/networking/v2/networks/results.go b/rackspace/networking/v2/networks/results.go
index 2334faf..823c56e 100644
--- a/rackspace/networking/v2/networks/results.go
+++ b/rackspace/networking/v2/networks/results.go
@@ -1,38 +1,38 @@
package networks
import (
- "github.com/mitchellh/mapstructure"
- "github.com/rackspace/gophercloud"
- "github.com/rackspace/gophercloud/pagination"
+ "github.com/mitchellh/mapstructure"
+ "github.com/rackspace/gophercloud"
+ "github.com/rackspace/gophercloud/pagination"
)
type commonResult struct {
- gophercloud.Result
+ gophercloud.Result
}
// Extract is a function that accepts a result and extracts a network resource.
func (r commonResult) Extract() (*Network, error) {
- if r.Err != nil {
- return nil, r.Err
- }
+ if r.Err != nil {
+ return nil, r.Err
+ }
- var res struct {
- Network *Network `json:"network"`
- }
+ var res struct {
+ Network *Network `json:"network"`
+ }
- err := mapstructure.Decode(r.Body, &res)
+ err := mapstructure.Decode(r.Body, &res)
- return res.Network, err
+ return res.Network, err
}
// CreateResult represents the result of a create operation.
type CreateResult struct {
- commonResult
+ commonResult
}
// GetResult represents the result of a get operation.
type GetResult struct {
- commonResult
+ commonResult
}
// DeleteResult represents the result of a delete operation.
@@ -40,31 +40,40 @@
// Network represents, well, a network.
type Network struct {
- // UUID for the network
- ID string `mapstructure:"id" json:"id"`
+ // UUID for the network
+ ID string `mapstructure:"id" json:"id"`
- // Human-readable name for the network. Might not be unique.
- Label string `mapstructure:"label" json:"label"`
+ // Human-readable name for the network. Might not be unique.
+ Label string `mapstructure:"label" json:"label"`
- // Classless Inter-Domain Routing
- CIDR string `mapstructure:"cidr" json:"cidr"`
+ // Classless Inter-Domain Routing
+ CIDR string `mapstructure:"cidr" json:"cidr"`
}
// NetworkPage is the page returned by a pager when traversing over a
// collection of networks.
type NetworkPage struct {
- pagination.SinglePageBase
+ pagination.SinglePageBase
+}
+
+// IsEmpty returns true if the NetworkPage contains no Networks.
+func (r NetworkPage) IsEmpty() (bool, error) {
+ networks, err := ExtractNetworks(r)
+ if err != nil {
+ return true, err
+ }
+ return len(networks) == 0, nil
}
// ExtractNetworks accepts a Page struct, specifically a NetworkPage struct,
// and extracts the elements into a slice of Network structs. In other words,
// a generic collection is mapped into a relevant slice.
func ExtractNetworks(page pagination.Page) ([]Network, error) {
- var resp struct {
- Networks []Network `mapstructure:"networks" json:"networks"`
- }
+ var resp struct {
+ Networks []Network `mapstructure:"networks" json:"networks"`
+ }
- err := mapstructure.Decode(page.(NetworkPage).Body, &resp)
+ err := mapstructure.Decode(page.(NetworkPage).Body, &resp)
- return resp.Networks, err
+ return resp.Networks, err
}