blob: fbfb2cfcad990f27dcfdb5d0b34019670d0e2827 [file] [log] [blame]
Jamie Hannaford82523522015-02-17 16:53:29 +01001package datastores
2
3import (
4 "github.com/mitchellh/mapstructure"
5 "github.com/rackspace/gophercloud"
6 "github.com/rackspace/gophercloud/pagination"
7)
8
9type Version struct {
10 ID string
11 Links []gophercloud.Link
12 Name string
13}
14
15type Datastore struct {
16 DefaultVersion string `json:"default_version" mapstructure:"default_version"`
17 ID string
18 Links []gophercloud.Link
19 Name string
20 Versions []Version
21}
22
23type GetResult struct {
24 gophercloud.Result
25}
26
27type GetVersionResult struct {
28 gophercloud.Result
29}
30
31type DatastorePage struct {
32 pagination.SinglePageBase
33}
34
35func (r DatastorePage) IsEmpty() (bool, error) {
36 is, err := ExtractDatastores(r)
37 if err != nil {
38 return true, err
39 }
40 return len(is) == 0, nil
41}
42
43func ExtractDatastores(page pagination.Page) ([]Datastore, error) {
44 casted := page.(DatastorePage).Body
45
46 var resp struct {
47 Datastores []Datastore `mapstructure:"datastores" json:"datastores"`
48 }
49
50 err := mapstructure.Decode(casted, &resp)
51 return resp.Datastores, err
52}
53
54func (r GetResult) Extract() (*Datastore, error) {
55 if r.Err != nil {
56 return nil, r.Err
57 }
58
59 var response struct {
60 Datastore Datastore `mapstructure:"datastore"`
61 }
62
63 err := mapstructure.Decode(r.Body, &response)
64 return &response.Datastore, err
65}
66
67type VersionPage struct {
68 pagination.SinglePageBase
69}
70
71func (r VersionPage) IsEmpty() (bool, error) {
72 is, err := ExtractVersions(r)
73 if err != nil {
74 return true, err
75 }
76 return len(is) == 0, nil
77}
78
79func ExtractVersions(page pagination.Page) ([]Version, error) {
80 casted := page.(VersionPage).Body
81
82 var resp struct {
83 Versions []Version `mapstructure:"versions" json:"versions"`
84 }
85
86 err := mapstructure.Decode(casted, &resp)
87 return resp.Versions, err
88}
89
90func (r GetVersionResult) Extract() (*Version, error) {
91 if r.Err != nil {
92 return nil, r.Err
93 }
94
95 var response struct {
96 Version Version `mapstructure:"version"`
97 }
98
99 err := mapstructure.Decode(r.Body, &response)
100 return &response.Version, err
101}