github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/pagination/marker.go (about)

     1  package pagination
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  
     7  	"github.com/huaweicloud/golangsdk"
     8  )
     9  
    10  // MarkerPage is a stricter Page interface that describes additional functionality required for use with NewMarkerPager.
    11  // For convenience, embed the MarkedPageBase struct.
    12  type MarkerPage interface {
    13  	Page
    14  
    15  	// LastMarker returns the last "marker" value on this page.
    16  	LastMarker() (string, error)
    17  }
    18  
    19  // MarkerPageBase is a page in a collection that's paginated by "limit" and "marker" query parameters.
    20  type MarkerPageBase struct {
    21  	PageResult
    22  
    23  	// Owner is a reference to the embedding struct.
    24  	Owner MarkerPage
    25  }
    26  
    27  // NextPageURL generates the URL for the page of results after this one.
    28  func (current MarkerPageBase) NextPageURL() (string, error) {
    29  	currentURL := current.URL
    30  
    31  	mark, err := current.Owner.LastMarker()
    32  	if err != nil {
    33  		return "", err
    34  	}
    35  
    36  	q := currentURL.Query()
    37  	q.Set("marker", mark)
    38  	currentURL.RawQuery = q.Encode()
    39  
    40  	return currentURL.String(), nil
    41  }
    42  
    43  // IsEmpty satisifies the IsEmpty method of the Page interface
    44  func (current MarkerPageBase) IsEmpty() (bool, error) {
    45  	if b, ok := current.Body.([]interface{}); ok {
    46  		return len(b) == 0, nil
    47  	}
    48  	err := golangsdk.ErrUnexpectedType{}
    49  	err.Expected = "[]interface{}"
    50  	err.Actual = fmt.Sprintf("%v", reflect.TypeOf(current.Body))
    51  	return true, err
    52  }
    53  
    54  // GetBody returns the linked page's body. This method is needed to satisfy the
    55  // Page interface.
    56  func (current MarkerPageBase) GetBody() interface{} {
    57  	return current.Body
    58  }