1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
package messages
import (
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
// commonResult is the response of a base result.
type commonResult struct {
gophercloud.Result
}
// CreateResult is the response of a Create operations.
type CreateResult struct {
gophercloud.Result
}
// MessagePage contains a single page of all clusters from a ListDetails call.
type MessagePage struct {
pagination.LinkedPageBase
}
// DeleteResult is the result from a Delete operation. Call its ExtractErr
// method to determine if the call succeeded or failed.
type DeleteResult struct {
gophercloud.ErrResult
}
// CreateResult is the response of a Create operations.
type PopResult struct {
gophercloud.Result
}
// GetMessagesResult is the response of a GetMessages operations.
type GetMessagesResult struct {
gophercloud.Result
}
// GetResult is the response of a Get operations.
type GetResult struct {
gophercloud.Result
}
// Message represents a message on a queue.
type Message struct {
Body map[string]interface{} `json:"body"`
Age int `json:"age"`
Href string `json:"href"`
ID string `json:"id"`
TTL int `json:"ttl"`
Checksum string `json:"checksum"`
}
// PopMessage represents a message returned from PopMessages.
type PopMessage struct {
Body map[string]interface{} `json:"body"`
Age int `json:"age"`
ID string `json:"id"`
TTL int `json:"ttl"`
ClaimCount int `json:"claim_count"`
ClaimID string `json:"claim_id"`
}
// ResourceList represents the result of creating a message.
type ResourceList struct {
Resources []string `json:"resources"`
}
// Extract interprets any CreateResult as a ResourceList.
func (r CreateResult) Extract() (ResourceList, error) {
var s ResourceList
err := r.ExtractInto(&s)
return s, err
}
// Extract interprets any PopResult as a list of PopMessage.
func (r PopResult) Extract() ([]PopMessage, error) {
var s struct {
PopMessages []PopMessage `json:"messages"`
}
err := r.ExtractInto(&s)
return s.PopMessages, err
}
// Extract interprets any GetMessagesResult as a list of Message.
func (r GetMessagesResult) Extract() ([]Message, error) {
var s struct {
Messages []Message `json:"messages"`
}
err := r.ExtractInto(&s)
return s.Messages, err
}
// Extract interprets any GetResult as a Message.
func (r GetResult) Extract() (Message, error) {
var s Message
err := r.ExtractInto(&s)
return s, err
}
// ExtractMessage extracts message into a list of Message.
func ExtractMessages(r pagination.Page) ([]Message, error) {
var s struct {
Messages []Message `json:"messages"`
}
err := (r.(MessagePage)).ExtractInto(&s)
return s.Messages, err
}
// IsEmpty determines if a MessagePage contains any results.
func (r MessagePage) IsEmpty() (bool, error) {
if r.StatusCode == 204 {
return true, nil
}
s, err := ExtractMessages(r)
return len(s) == 0, err
}
// NextPageURL uses the response's embedded link reference to navigate to the
// next page of results.
func (r MessagePage) NextPageURL() (string, error) {
var s struct {
Links []gophercloud.Link `json:"links"`
}
err := r.ExtractInto(&s)
if err != nil {
return "", err
}
next, err := gophercloud.ExtractNextURL(s.Links)
if err != nil {
return "", err
}
return nextPageURL(r.URL.String(), next)
}
|