Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

Commit 511d88c

Browse files
author
Samuel Ortiz
committed
imageservice: Use pagination for returning the image members list
Signed-off-by: Samuel Ortiz <[email protected]>
1 parent e6f92c9 commit 511d88c

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

openstack/imageservice/v2/members/requests.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55

66
"github.com/rackspace/gophercloud"
7+
"github.com/rackspace/gophercloud/pagination"
78
)
89

910
// Create member for specific image
@@ -48,10 +49,12 @@ func Create(client *gophercloud.ServiceClient, id string, member string) CreateM
4849

4950
// List members returns list of members for specifed image id
5051
// More details: http://developer.openstack.org/api-ref-image-v2.html#listImageMembers-v2
51-
func List(client *gophercloud.ServiceClient, id string) ListMembersResult {
52-
var res ListMembersResult
53-
_, res.Err = client.Get(listMembersURL(client, id), &res.Body, &gophercloud.RequestOpts{OkCodes: []int{200}})
54-
return res
52+
func List(client *gophercloud.ServiceClient, id string) pagination.Pager {
53+
createPage := func(r pagination.PageResult) pagination.Page {
54+
return MemberPage{pagination.SinglePageBase(r)}
55+
}
56+
57+
return pagination.NewPager(client, listMembersURL(client, id), createPage)
5558
}
5659

5760
// Get image member details.

openstack/imageservice/v2/members/results.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
"github.com/mitchellh/mapstructure"
77
"github.com/rackspace/gophercloud"
8+
"github.com/rackspace/gophercloud/pagination"
89
)
910

1011
// ImageMember model
@@ -74,6 +75,31 @@ func (lm ListMembersResult) Extract() ([]ImageMember, error) {
7475
return results.ImageMembers, err
7576
}
7677

78+
// MemberPage is a single page of Members results.
79+
type MemberPage struct {
80+
pagination.SinglePageBase
81+
}
82+
83+
// ExtractMembers returns a slice of Members contained in a single page of results.
84+
func ExtractMembers(page pagination.Page) ([]ImageMember, error) {
85+
casted := page.(MemberPage).Body
86+
var response struct {
87+
ImageMembers []ImageMember `mapstructure:"members"`
88+
}
89+
90+
err := mapstructure.Decode(casted, &response)
91+
return response.ImageMembers, err
92+
}
93+
94+
// IsEmpty determines whether or not a page of Members contains any results.
95+
func (page MemberPage) IsEmpty() (bool, error) {
96+
tenants, err := ExtractMembers(page)
97+
if err != nil {
98+
return false, err
99+
}
100+
return len(tenants) == 0, nil
101+
}
102+
77103
// MemberDetailsResult model
78104
type MemberDetailsResult struct {
79105
gophercloud.Result

0 commit comments

Comments
 (0)