Use a method to change the CreatePage function.
diff --git a/openstack/identity/v2/extensions/delegate.go b/openstack/identity/v2/extensions/delegate.go
index b3f921a..77bf7fb 100644
--- a/openstack/identity/v2/extensions/delegate.go
+++ b/openstack/identity/v2/extensions/delegate.go
@@ -79,11 +79,9 @@
// List returns a Pager which allows you to iterate over the full collection of extensions.
// It does not accept query parameters.
func List(c *gophercloud.ServiceClient) pagination.Pager {
- pager := common.List(c)
- pager.CreatePage = func(r pagination.LastHTTPResponse) pagination.Page {
+ return common.List(c).WithPageCreator(func(r pagination.LastHTTPResponse) pagination.Page {
return ExtensionPage{
ExtensionPage: common.ExtensionPage{SinglePageBase: pagination.SinglePageBase(r)},
}
- }
- return pager
+ })
}
diff --git a/pagination/pager.go b/pagination/pager.go
index 50ea055..75fe408 100644
--- a/pagination/pager.go
+++ b/pagination/pager.go
@@ -31,9 +31,9 @@
type Pager struct {
client *gophercloud.ServiceClient
- InitialURL string
+ initialURL string
- CreatePage func(r LastHTTPResponse) Page
+ createPage func(r LastHTTPResponse) Page
Err error
@@ -46,8 +46,18 @@
func NewPager(client *gophercloud.ServiceClient, initialURL string, createPage func(r LastHTTPResponse) Page) Pager {
return Pager{
client: client,
- InitialURL: initialURL,
- CreatePage: createPage,
+ initialURL: initialURL,
+ createPage: createPage,
+ }
+}
+
+// WithPageCreator returns a new Pager that substitutes a different page creation function. This is
+// useful for overriding List functions in delegation.
+func (p Pager) WithPageCreator(createPage func(r LastHTTPResponse) Page) Pager {
+ return Pager{
+ client: p.client,
+ initialURL: p.initialURL,
+ createPage: createPage,
}
}
@@ -62,7 +72,7 @@
return nil, err
}
- return p.CreatePage(remembered), nil
+ return p.createPage(remembered), nil
}
// EachPage iterates over each page returned by a Pager, yielding one at a time to a handler function.
@@ -71,7 +81,7 @@
if p.Err != nil {
return p.Err
}
- currentURL := p.InitialURL
+ currentURL := p.initialURL
for {
currentPage, err := p.fetchNextPage(currentURL)
if err != nil {
diff --git a/rackspace/identity/v2/extensions/delegate.go b/rackspace/identity/v2/extensions/delegate.go
index ffbcf92..3500cfd 100644
--- a/rackspace/identity/v2/extensions/delegate.go
+++ b/rackspace/identity/v2/extensions/delegate.go
@@ -43,11 +43,9 @@
// List returns a Pager which allows you to iterate over the full collection of extensions.
// It does not accept query parameters.
func List(c *gophercloud.ServiceClient) pagination.Pager {
- pager := os.List(c)
- pager.CreatePage = func(r pagination.LastHTTPResponse) pagination.Page {
+ return os.List(c).WithPageCreator(func(r pagination.LastHTTPResponse) pagination.Page {
return ExtensionPage{
ExtensionPage: common.ExtensionPage{SinglePageBase: pagination.SinglePageBase(r)},
}
- }
- return pager
+ })
}