| package users |
| |
| import ( |
| "github.com/gophercloud/gophercloud" |
| db "github.com/gophercloud/gophercloud/openstack/db/v1/databases" |
| "github.com/gophercloud/gophercloud/pagination" |
| ) |
| |
| // User represents a database user |
| type User struct { |
| // The user name |
| Name string |
| |
| // The user password |
| Password string |
| |
| // The databases associated with this user |
| Databases []db.Database |
| } |
| |
| // CreateResult represents the result of a create operation. |
| type CreateResult struct { |
| gophercloud.ErrResult |
| } |
| |
| // DeleteResult represents the result of a delete operation. |
| type DeleteResult struct { |
| gophercloud.ErrResult |
| } |
| |
| // UserPage represents a single page of a paginated user collection. |
| type UserPage struct { |
| pagination.LinkedPageBase |
| } |
| |
| // IsEmpty checks to see whether the collection is empty. |
| func (page UserPage) IsEmpty() (bool, error) { |
| users, err := ExtractUsers(page) |
| return len(users) == 0, err |
| } |
| |
| // NextPageURL will retrieve the next page URL. |
| func (page UserPage) NextPageURL() (string, error) { |
| var s struct { |
| Links []gophercloud.Link `json:"users_links"` |
| } |
| err := page.ExtractInto(&s) |
| if err != nil { |
| return "", err |
| } |
| return gophercloud.ExtractNextURL(s.Links) |
| } |
| |
| // ExtractUsers will convert a generic pagination struct into a more |
| // relevant slice of User structs. |
| func ExtractUsers(r pagination.Page) ([]User, error) { |
| var s struct { |
| Users []User `json:"users"` |
| } |
| err := (r.(UserPage)).ExtractInto(&s) |
| return s.Users, err |
| } |