github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/cloudlets/v3/policy_property.go (about) 1 package v3 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "net/http" 8 "net/url" 9 "strconv" 10 11 "github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/edgegriderr" 12 validation "github.com/go-ozzo/ozzo-validation/v4" 13 ) 14 15 type ( 16 // ListActivePolicyPropertiesRequest contains request parameters for ListActivePolicyProperties 17 ListActivePolicyPropertiesRequest struct { 18 PolicyID int64 19 Page int 20 Size int 21 } 22 23 // ListActivePolicyPropertiesResponse contains the response data from ListActivePolicyProperties operation. 24 ListActivePolicyPropertiesResponse struct { 25 Page Page `json:"page"` 26 PolicyProperties []ListPolicyPropertiesItem `json:"content"` 27 Links []Link `json:"links"` 28 } 29 30 // ListPolicyPropertiesItem represents associated active properties information. 31 ListPolicyPropertiesItem struct { 32 GroupID int64 `json:"groupId"` 33 ID int64 `json:"id"` 34 Name string `json:"name"` 35 Network Network `json:"network"` 36 PolicyVersion int64 `json:"version"` 37 } 38 39 // Link represents hypermedia link to help navigate through the result set. 40 Link struct { 41 Href string `json:"href"` 42 Rel string `json:"rel"` 43 } 44 45 // Page contains informational data about pagination. 46 Page struct { 47 Number int `json:"number"` 48 Size int `json:"size"` 49 TotalElements int `json:"totalElements"` 50 TotalPages int `json:"totalPages"` 51 } 52 ) 53 54 var ( 55 // ErrListActivePolicyProperties is returned when ListActivePolicyProperties fails. 56 ErrListActivePolicyProperties = errors.New("list active policy properties") 57 ) 58 59 // Validate validates ListActivePolicyPropertiesRequest. 60 func (r ListActivePolicyPropertiesRequest) Validate() error { 61 return edgegriderr.ParseValidationErrors(validation.Errors{ 62 "PolicyID": validation.Validate(r.PolicyID, validation.Required), 63 "Page": validation.Validate(r.Page, validation.Min(0)), 64 "Size": validation.Validate(r.Size, validation.Min(10)), 65 }) 66 } 67 68 func (c *cloudlets) ListActivePolicyProperties(ctx context.Context, params ListActivePolicyPropertiesRequest) (*ListActivePolicyPropertiesResponse, error) { 69 logger := c.Log(ctx) 70 logger.Debug("ListActivePolicyProperties") 71 72 if err := params.Validate(); err != nil { 73 return nil, fmt.Errorf("%s: %w: %s", ErrListActivePolicyProperties, ErrStructValidation, err) 74 } 75 76 uri, err := url.Parse(fmt.Sprintf("/cloudlets/v3/policies/%d/properties", params.PolicyID)) 77 if err != nil { 78 return nil, fmt.Errorf("%w: failed to parse url: %s", ErrListActivePolicyProperties, err) 79 } 80 81 q := uri.Query() 82 if params.Page != 0 { 83 q.Add("page", strconv.Itoa(params.Page)) 84 } 85 if params.Size != 0 { 86 q.Add("size", strconv.Itoa(params.Size)) 87 } 88 uri.RawQuery = q.Encode() 89 90 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri.String(), nil) 91 if err != nil { 92 return nil, fmt.Errorf("%w: failed to create request: %s", ErrListActivePolicyProperties, err) 93 } 94 95 var result ListActivePolicyPropertiesResponse 96 resp, err := c.Exec(req, &result) 97 if err != nil { 98 return nil, fmt.Errorf("%w: request failed: %s", ErrListActivePolicyProperties, err) 99 } 100 101 if resp.StatusCode != http.StatusOK { 102 return nil, fmt.Errorf("%s: %w", ErrListActivePolicyProperties, c.Error(resp)) 103 } 104 105 return &result, nil 106 }