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  }