1// +build go1.13 2 3// Copyright (c) Microsoft Corporation. All rights reserved. 4// Licensed under the MIT License. See License.txt in the project root for license information. 5// Code generated by Microsoft (R) AutoRest Code Generator. 6// Changes may cause incorrect behavior and will be lost if the code is regenerated. 7 8package armapimanagement 9 10import ( 11 "context" 12 "errors" 13 "fmt" 14 "github.com/Azure/azure-sdk-for-go/sdk/armcore" 15 "github.com/Azure/azure-sdk-for-go/sdk/azcore" 16 "net/http" 17 "net/url" 18 "strconv" 19 "strings" 20) 21 22// GroupClient contains the methods for the Group group. 23// Don't use this type directly, use NewGroupClient() instead. 24type GroupClient struct { 25 con *armcore.Connection 26 subscriptionID string 27} 28 29// NewGroupClient creates a new instance of GroupClient with the specified values. 30func NewGroupClient(con *armcore.Connection, subscriptionID string) *GroupClient { 31 return &GroupClient{con: con, subscriptionID: subscriptionID} 32} 33 34// CreateOrUpdate - Creates or Updates a group. 35// If the operation fails it returns the *ErrorResponse error type. 36func (client *GroupClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serviceName string, groupID string, parameters GroupCreateParameters, options *GroupCreateOrUpdateOptions) (GroupCreateOrUpdateResponse, error) { 37 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, serviceName, groupID, parameters, options) 38 if err != nil { 39 return GroupCreateOrUpdateResponse{}, err 40 } 41 resp, err := client.con.Pipeline().Do(req) 42 if err != nil { 43 return GroupCreateOrUpdateResponse{}, err 44 } 45 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 46 return GroupCreateOrUpdateResponse{}, client.createOrUpdateHandleError(resp) 47 } 48 return client.createOrUpdateHandleResponse(resp) 49} 50 51// createOrUpdateCreateRequest creates the CreateOrUpdate request. 52func (client *GroupClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, groupID string, parameters GroupCreateParameters, options *GroupCreateOrUpdateOptions) (*azcore.Request, error) { 53 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/groups/{groupId}" 54 if resourceGroupName == "" { 55 return nil, errors.New("parameter resourceGroupName cannot be empty") 56 } 57 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 58 if serviceName == "" { 59 return nil, errors.New("parameter serviceName cannot be empty") 60 } 61 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 62 if groupID == "" { 63 return nil, errors.New("parameter groupID cannot be empty") 64 } 65 urlPath = strings.ReplaceAll(urlPath, "{groupId}", url.PathEscape(groupID)) 66 if client.subscriptionID == "" { 67 return nil, errors.New("parameter client.subscriptionID cannot be empty") 68 } 69 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 70 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 71 if err != nil { 72 return nil, err 73 } 74 req.Telemetry(telemetryInfo) 75 reqQP := req.URL.Query() 76 reqQP.Set("api-version", "2020-12-01") 77 req.URL.RawQuery = reqQP.Encode() 78 if options != nil && options.IfMatch != nil { 79 req.Header.Set("If-Match", *options.IfMatch) 80 } 81 req.Header.Set("Accept", "application/json") 82 return req, req.MarshalAsJSON(parameters) 83} 84 85// createOrUpdateHandleResponse handles the CreateOrUpdate response. 86func (client *GroupClient) createOrUpdateHandleResponse(resp *azcore.Response) (GroupCreateOrUpdateResponse, error) { 87 result := GroupCreateOrUpdateResponse{RawResponse: resp.Response} 88 if val := resp.Header.Get("ETag"); val != "" { 89 result.ETag = &val 90 } 91 if err := resp.UnmarshalAsJSON(&result.GroupContract); err != nil { 92 return GroupCreateOrUpdateResponse{}, err 93 } 94 return result, nil 95} 96 97// createOrUpdateHandleError handles the CreateOrUpdate error response. 98func (client *GroupClient) createOrUpdateHandleError(resp *azcore.Response) error { 99 body, err := resp.Payload() 100 if err != nil { 101 return azcore.NewResponseError(err, resp.Response) 102 } 103 errType := ErrorResponse{raw: string(body)} 104 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 105 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 106 } 107 return azcore.NewResponseError(&errType, resp.Response) 108} 109 110// Delete - Deletes specific group of the API Management service instance. 111// If the operation fails it returns the *ErrorResponse error type. 112func (client *GroupClient) Delete(ctx context.Context, resourceGroupName string, serviceName string, groupID string, ifMatch string, options *GroupDeleteOptions) (GroupDeleteResponse, error) { 113 req, err := client.deleteCreateRequest(ctx, resourceGroupName, serviceName, groupID, ifMatch, options) 114 if err != nil { 115 return GroupDeleteResponse{}, err 116 } 117 resp, err := client.con.Pipeline().Do(req) 118 if err != nil { 119 return GroupDeleteResponse{}, err 120 } 121 if !resp.HasStatusCode(http.StatusOK, http.StatusNoContent) { 122 return GroupDeleteResponse{}, client.deleteHandleError(resp) 123 } 124 return GroupDeleteResponse{RawResponse: resp.Response}, nil 125} 126 127// deleteCreateRequest creates the Delete request. 128func (client *GroupClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, groupID string, ifMatch string, options *GroupDeleteOptions) (*azcore.Request, error) { 129 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/groups/{groupId}" 130 if resourceGroupName == "" { 131 return nil, errors.New("parameter resourceGroupName cannot be empty") 132 } 133 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 134 if serviceName == "" { 135 return nil, errors.New("parameter serviceName cannot be empty") 136 } 137 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 138 if groupID == "" { 139 return nil, errors.New("parameter groupID cannot be empty") 140 } 141 urlPath = strings.ReplaceAll(urlPath, "{groupId}", url.PathEscape(groupID)) 142 if client.subscriptionID == "" { 143 return nil, errors.New("parameter client.subscriptionID cannot be empty") 144 } 145 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 146 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 147 if err != nil { 148 return nil, err 149 } 150 req.Telemetry(telemetryInfo) 151 reqQP := req.URL.Query() 152 reqQP.Set("api-version", "2020-12-01") 153 req.URL.RawQuery = reqQP.Encode() 154 req.Header.Set("If-Match", ifMatch) 155 req.Header.Set("Accept", "application/json") 156 return req, nil 157} 158 159// deleteHandleError handles the Delete error response. 160func (client *GroupClient) deleteHandleError(resp *azcore.Response) error { 161 body, err := resp.Payload() 162 if err != nil { 163 return azcore.NewResponseError(err, resp.Response) 164 } 165 errType := ErrorResponse{raw: string(body)} 166 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 167 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 168 } 169 return azcore.NewResponseError(&errType, resp.Response) 170} 171 172// Get - Gets the details of the group specified by its identifier. 173// If the operation fails it returns the *ErrorResponse error type. 174func (client *GroupClient) Get(ctx context.Context, resourceGroupName string, serviceName string, groupID string, options *GroupGetOptions) (GroupGetResponse, error) { 175 req, err := client.getCreateRequest(ctx, resourceGroupName, serviceName, groupID, options) 176 if err != nil { 177 return GroupGetResponse{}, err 178 } 179 resp, err := client.con.Pipeline().Do(req) 180 if err != nil { 181 return GroupGetResponse{}, err 182 } 183 if !resp.HasStatusCode(http.StatusOK) { 184 return GroupGetResponse{}, client.getHandleError(resp) 185 } 186 return client.getHandleResponse(resp) 187} 188 189// getCreateRequest creates the Get request. 190func (client *GroupClient) getCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, groupID string, options *GroupGetOptions) (*azcore.Request, error) { 191 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/groups/{groupId}" 192 if resourceGroupName == "" { 193 return nil, errors.New("parameter resourceGroupName cannot be empty") 194 } 195 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 196 if serviceName == "" { 197 return nil, errors.New("parameter serviceName cannot be empty") 198 } 199 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 200 if groupID == "" { 201 return nil, errors.New("parameter groupID cannot be empty") 202 } 203 urlPath = strings.ReplaceAll(urlPath, "{groupId}", url.PathEscape(groupID)) 204 if client.subscriptionID == "" { 205 return nil, errors.New("parameter client.subscriptionID cannot be empty") 206 } 207 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 208 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 209 if err != nil { 210 return nil, err 211 } 212 req.Telemetry(telemetryInfo) 213 reqQP := req.URL.Query() 214 reqQP.Set("api-version", "2020-12-01") 215 req.URL.RawQuery = reqQP.Encode() 216 req.Header.Set("Accept", "application/json") 217 return req, nil 218} 219 220// getHandleResponse handles the Get response. 221func (client *GroupClient) getHandleResponse(resp *azcore.Response) (GroupGetResponse, error) { 222 result := GroupGetResponse{RawResponse: resp.Response} 223 if val := resp.Header.Get("ETag"); val != "" { 224 result.ETag = &val 225 } 226 if err := resp.UnmarshalAsJSON(&result.GroupContract); err != nil { 227 return GroupGetResponse{}, err 228 } 229 return result, nil 230} 231 232// getHandleError handles the Get error response. 233func (client *GroupClient) getHandleError(resp *azcore.Response) error { 234 body, err := resp.Payload() 235 if err != nil { 236 return azcore.NewResponseError(err, resp.Response) 237 } 238 errType := ErrorResponse{raw: string(body)} 239 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 240 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 241 } 242 return azcore.NewResponseError(&errType, resp.Response) 243} 244 245// GetEntityTag - Gets the entity state (Etag) version of the group specified by its identifier. 246// If the operation fails it returns the *ErrorResponse error type. 247func (client *GroupClient) GetEntityTag(ctx context.Context, resourceGroupName string, serviceName string, groupID string, options *GroupGetEntityTagOptions) (GroupGetEntityTagResponse, error) { 248 req, err := client.getEntityTagCreateRequest(ctx, resourceGroupName, serviceName, groupID, options) 249 if err != nil { 250 return GroupGetEntityTagResponse{}, err 251 } 252 resp, err := client.con.Pipeline().Do(req) 253 if err != nil { 254 return GroupGetEntityTagResponse{}, err 255 } 256 return client.getEntityTagHandleResponse(resp) 257} 258 259// getEntityTagCreateRequest creates the GetEntityTag request. 260func (client *GroupClient) getEntityTagCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, groupID string, options *GroupGetEntityTagOptions) (*azcore.Request, error) { 261 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/groups/{groupId}" 262 if resourceGroupName == "" { 263 return nil, errors.New("parameter resourceGroupName cannot be empty") 264 } 265 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 266 if serviceName == "" { 267 return nil, errors.New("parameter serviceName cannot be empty") 268 } 269 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 270 if groupID == "" { 271 return nil, errors.New("parameter groupID cannot be empty") 272 } 273 urlPath = strings.ReplaceAll(urlPath, "{groupId}", url.PathEscape(groupID)) 274 if client.subscriptionID == "" { 275 return nil, errors.New("parameter client.subscriptionID cannot be empty") 276 } 277 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 278 req, err := azcore.NewRequest(ctx, http.MethodHead, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 279 if err != nil { 280 return nil, err 281 } 282 req.Telemetry(telemetryInfo) 283 reqQP := req.URL.Query() 284 reqQP.Set("api-version", "2020-12-01") 285 req.URL.RawQuery = reqQP.Encode() 286 req.Header.Set("Accept", "application/json") 287 return req, nil 288} 289 290// getEntityTagHandleResponse handles the GetEntityTag response. 291func (client *GroupClient) getEntityTagHandleResponse(resp *azcore.Response) (GroupGetEntityTagResponse, error) { 292 result := GroupGetEntityTagResponse{RawResponse: resp.Response} 293 if val := resp.Header.Get("ETag"); val != "" { 294 result.ETag = &val 295 } 296 if resp.StatusCode >= 200 && resp.StatusCode < 300 { 297 result.Success = true 298 } 299 return result, nil 300} 301 302// ListByService - Lists a collection of groups defined within a service instance. 303// If the operation fails it returns the *ErrorResponse error type. 304func (client *GroupClient) ListByService(resourceGroupName string, serviceName string, options *GroupListByServiceOptions) GroupListByServicePager { 305 return &groupListByServicePager{ 306 client: client, 307 requester: func(ctx context.Context) (*azcore.Request, error) { 308 return client.listByServiceCreateRequest(ctx, resourceGroupName, serviceName, options) 309 }, 310 advancer: func(ctx context.Context, resp GroupListByServiceResponse) (*azcore.Request, error) { 311 return azcore.NewRequest(ctx, http.MethodGet, *resp.GroupCollection.NextLink) 312 }, 313 } 314} 315 316// listByServiceCreateRequest creates the ListByService request. 317func (client *GroupClient) listByServiceCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, options *GroupListByServiceOptions) (*azcore.Request, error) { 318 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/groups" 319 if resourceGroupName == "" { 320 return nil, errors.New("parameter resourceGroupName cannot be empty") 321 } 322 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 323 if serviceName == "" { 324 return nil, errors.New("parameter serviceName cannot be empty") 325 } 326 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 327 if client.subscriptionID == "" { 328 return nil, errors.New("parameter client.subscriptionID cannot be empty") 329 } 330 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 331 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 332 if err != nil { 333 return nil, err 334 } 335 req.Telemetry(telemetryInfo) 336 reqQP := req.URL.Query() 337 if options != nil && options.Filter != nil { 338 reqQP.Set("$filter", *options.Filter) 339 } 340 if options != nil && options.Top != nil { 341 reqQP.Set("$top", strconv.FormatInt(int64(*options.Top), 10)) 342 } 343 if options != nil && options.Skip != nil { 344 reqQP.Set("$skip", strconv.FormatInt(int64(*options.Skip), 10)) 345 } 346 reqQP.Set("api-version", "2020-12-01") 347 req.URL.RawQuery = reqQP.Encode() 348 req.Header.Set("Accept", "application/json") 349 return req, nil 350} 351 352// listByServiceHandleResponse handles the ListByService response. 353func (client *GroupClient) listByServiceHandleResponse(resp *azcore.Response) (GroupListByServiceResponse, error) { 354 result := GroupListByServiceResponse{RawResponse: resp.Response} 355 if err := resp.UnmarshalAsJSON(&result.GroupCollection); err != nil { 356 return GroupListByServiceResponse{}, err 357 } 358 return result, nil 359} 360 361// listByServiceHandleError handles the ListByService error response. 362func (client *GroupClient) listByServiceHandleError(resp *azcore.Response) error { 363 body, err := resp.Payload() 364 if err != nil { 365 return azcore.NewResponseError(err, resp.Response) 366 } 367 errType := ErrorResponse{raw: string(body)} 368 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 369 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 370 } 371 return azcore.NewResponseError(&errType, resp.Response) 372} 373 374// Update - Updates the details of the group specified by its identifier. 375// If the operation fails it returns the *ErrorResponse error type. 376func (client *GroupClient) Update(ctx context.Context, resourceGroupName string, serviceName string, groupID string, ifMatch string, parameters GroupUpdateParameters, options *GroupUpdateOptions) (GroupUpdateResponse, error) { 377 req, err := client.updateCreateRequest(ctx, resourceGroupName, serviceName, groupID, ifMatch, parameters, options) 378 if err != nil { 379 return GroupUpdateResponse{}, err 380 } 381 resp, err := client.con.Pipeline().Do(req) 382 if err != nil { 383 return GroupUpdateResponse{}, err 384 } 385 if !resp.HasStatusCode(http.StatusOK) { 386 return GroupUpdateResponse{}, client.updateHandleError(resp) 387 } 388 return client.updateHandleResponse(resp) 389} 390 391// updateCreateRequest creates the Update request. 392func (client *GroupClient) updateCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, groupID string, ifMatch string, parameters GroupUpdateParameters, options *GroupUpdateOptions) (*azcore.Request, error) { 393 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/groups/{groupId}" 394 if resourceGroupName == "" { 395 return nil, errors.New("parameter resourceGroupName cannot be empty") 396 } 397 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 398 if serviceName == "" { 399 return nil, errors.New("parameter serviceName cannot be empty") 400 } 401 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 402 if groupID == "" { 403 return nil, errors.New("parameter groupID cannot be empty") 404 } 405 urlPath = strings.ReplaceAll(urlPath, "{groupId}", url.PathEscape(groupID)) 406 if client.subscriptionID == "" { 407 return nil, errors.New("parameter client.subscriptionID cannot be empty") 408 } 409 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 410 req, err := azcore.NewRequest(ctx, http.MethodPatch, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 411 if err != nil { 412 return nil, err 413 } 414 req.Telemetry(telemetryInfo) 415 reqQP := req.URL.Query() 416 reqQP.Set("api-version", "2020-12-01") 417 req.URL.RawQuery = reqQP.Encode() 418 req.Header.Set("If-Match", ifMatch) 419 req.Header.Set("Accept", "application/json") 420 return req, req.MarshalAsJSON(parameters) 421} 422 423// updateHandleResponse handles the Update response. 424func (client *GroupClient) updateHandleResponse(resp *azcore.Response) (GroupUpdateResponse, error) { 425 result := GroupUpdateResponse{RawResponse: resp.Response} 426 if val := resp.Header.Get("ETag"); val != "" { 427 result.ETag = &val 428 } 429 if err := resp.UnmarshalAsJSON(&result.GroupContract); err != nil { 430 return GroupUpdateResponse{}, err 431 } 432 return result, nil 433} 434 435// updateHandleError handles the Update error response. 436func (client *GroupClient) updateHandleError(resp *azcore.Response) error { 437 body, err := resp.Payload() 438 if err != nil { 439 return azcore.NewResponseError(err, resp.Response) 440 } 441 errType := ErrorResponse{raw: string(body)} 442 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 443 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 444 } 445 return azcore.NewResponseError(&errType, resp.Response) 446} 447