mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
6681a86211
There are three "deeper" changes included with this update: 1) The `Detach` function got removed from the `StorageActionsService` in favor of `DetachByDropletID` (which is now used in `resource_digitalocean_volume.go`). 2) The `Update` function got removed from `TagsService` (renaming a tag has been deprecated in the API). 3) Every function in godo now takes a `context.Context` as first argument, so I've changed all calls to send in a `context.Background()`.
85 lines
1.6 KiB
Go
85 lines
1.6 KiB
Go
package godo
|
|
|
|
import (
|
|
"net/url"
|
|
"strconv"
|
|
|
|
"github.com/digitalocean/godo/context"
|
|
)
|
|
|
|
// Links manages links that are returned along with a List
|
|
type Links struct {
|
|
Pages *Pages `json:"pages,omitempty"`
|
|
Actions []LinkAction `json:"actions,omitempty"`
|
|
}
|
|
|
|
// Pages are pages specified in Links
|
|
type Pages struct {
|
|
First string `json:"first,omitempty"`
|
|
Prev string `json:"prev,omitempty"`
|
|
Last string `json:"last,omitempty"`
|
|
Next string `json:"next,omitempty"`
|
|
}
|
|
|
|
// LinkAction is a pointer to an action
|
|
type LinkAction struct {
|
|
ID int `json:"id,omitempty"`
|
|
Rel string `json:"rel,omitempty"`
|
|
HREF string `json:"href,omitempty"`
|
|
}
|
|
|
|
// CurrentPage is current page of the list
|
|
func (l *Links) CurrentPage() (int, error) {
|
|
return l.Pages.current()
|
|
}
|
|
|
|
func (p *Pages) current() (int, error) {
|
|
switch {
|
|
case p == nil:
|
|
return 1, nil
|
|
case p.Prev == "" && p.Next != "":
|
|
return 1, nil
|
|
case p.Prev != "":
|
|
prevPage, err := pageForURL(p.Prev)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
return prevPage + 1, nil
|
|
}
|
|
|
|
return 0, nil
|
|
}
|
|
|
|
// IsLastPage returns true if the current page is the last
|
|
func (l *Links) IsLastPage() bool {
|
|
if l.Pages == nil {
|
|
return true
|
|
}
|
|
return l.Pages.isLast()
|
|
}
|
|
|
|
func (p *Pages) isLast() bool {
|
|
return p.Last == ""
|
|
}
|
|
|
|
func pageForURL(urlText string) (int, error) {
|
|
u, err := url.ParseRequestURI(urlText)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
pageStr := u.Query().Get("page")
|
|
page, err := strconv.Atoi(pageStr)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
return page, nil
|
|
}
|
|
|
|
// Get a link action by id.
|
|
func (la *LinkAction) Get(ctx context.Context, client *Client) (*Action, *Response, error) {
|
|
return client.Actions.Get(ctx, la.ID)
|
|
}
|