github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/networking/v2/extensions/security/groups/results.go (about) 1 package groups 2 3 import ( 4 "github.com/huaweicloud/golangsdk" 5 "github.com/huaweicloud/golangsdk/openstack/networking/v2/extensions/security/rules" 6 "github.com/huaweicloud/golangsdk/pagination" 7 ) 8 9 // SecGroup represents a container for security group rules. 10 type SecGroup struct { 11 // The UUID for the security group. 12 ID string 13 14 // Human-readable name for the security group. Might not be unique. 15 // Cannot be named "default" as that is automatically created for a tenant. 16 Name string 17 18 // The security group description. 19 Description string 20 21 // A slice of security group rules that dictate the permitted behaviour for 22 // traffic entering and leaving the group. 23 Rules []rules.SecGroupRule `json:"security_group_rules"` 24 25 // TenantID is the project owner of the security group. 26 TenantID string `json:"tenant_id"` 27 28 // ProjectID is the project owner of the security group. 29 ProjectID string `json:"project_id"` 30 } 31 32 // SecGroupPage is the page returned by a pager when traversing over a 33 // collection of security groups. 34 type SecGroupPage struct { 35 pagination.LinkedPageBase 36 } 37 38 // NextPageURL is invoked when a paginated collection of security groups has 39 // reached the end of a page and the pager seeks to traverse over a new one. In 40 // order to do this, it needs to construct the next page's URL. 41 func (r SecGroupPage) NextPageURL() (string, error) { 42 var s struct { 43 Links []golangsdk.Link `json:"security_groups_links"` 44 } 45 err := r.ExtractInto(&s) 46 if err != nil { 47 return "", err 48 } 49 50 return golangsdk.ExtractNextURL(s.Links) 51 } 52 53 // IsEmpty checks whether a SecGroupPage struct is empty. 54 func (r SecGroupPage) IsEmpty() (bool, error) { 55 is, err := ExtractGroups(r) 56 return len(is) == 0, err 57 } 58 59 // ExtractGroups accepts a Page struct, specifically a SecGroupPage struct, 60 // and extracts the elements into a slice of SecGroup structs. In other words, 61 // a generic collection is mapped into a relevant slice. 62 func ExtractGroups(r pagination.Page) ([]SecGroup, error) { 63 var s struct { 64 SecGroups []SecGroup `json:"security_groups"` 65 } 66 err := (r.(SecGroupPage)).ExtractInto(&s) 67 return s.SecGroups, err 68 } 69 70 type commonResult struct { 71 golangsdk.Result 72 } 73 74 // Extract is a function that accepts a result and extracts a security group. 75 func (r commonResult) Extract() (*SecGroup, error) { 76 var s struct { 77 SecGroup *SecGroup `json:"security_group"` 78 } 79 err := r.ExtractInto(&s) 80 return s.SecGroup, err 81 } 82 83 // CreateResult represents the result of a create operation. Call its Extract 84 // method to interpret it as a SecGroup. 85 type CreateResult struct { 86 commonResult 87 } 88 89 // UpdateResult represents the result of an update operation. Call its Extract 90 // method to interpret it as a SecGroup. 91 type UpdateResult struct { 92 commonResult 93 } 94 95 // GetResult represents the result of a get operation. Call its Extract 96 // method to interpret it as a SecGroup. 97 type GetResult struct { 98 commonResult 99 } 100 101 // DeleteResult represents the result of a delete operation. Call its 102 // ExtractErr method to determine if the request succeeded or failed. 103 type DeleteResult struct { 104 golangsdk.ErrResult 105 }