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 "strings" 19) 20 21// ContentItemClient contains the methods for the ContentItem group. 22// Don't use this type directly, use NewContentItemClient() instead. 23type ContentItemClient struct { 24 con *armcore.Connection 25 subscriptionID string 26} 27 28// NewContentItemClient creates a new instance of ContentItemClient with the specified values. 29func NewContentItemClient(con *armcore.Connection, subscriptionID string) *ContentItemClient { 30 return &ContentItemClient{con: con, subscriptionID: subscriptionID} 31} 32 33// CreateOrUpdate - Creates a new developer portal's content item specified by the provided content type. 34// If the operation fails it returns the *ErrorResponse error type. 35func (client *ContentItemClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemCreateOrUpdateOptions) (ContentItemCreateOrUpdateResponse, error) { 36 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, options) 37 if err != nil { 38 return ContentItemCreateOrUpdateResponse{}, err 39 } 40 resp, err := client.con.Pipeline().Do(req) 41 if err != nil { 42 return ContentItemCreateOrUpdateResponse{}, err 43 } 44 if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) { 45 return ContentItemCreateOrUpdateResponse{}, client.createOrUpdateHandleError(resp) 46 } 47 return client.createOrUpdateHandleResponse(resp) 48} 49 50// createOrUpdateCreateRequest creates the CreateOrUpdate request. 51func (client *ContentItemClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemCreateOrUpdateOptions) (*azcore.Request, error) { 52 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}" 53 if resourceGroupName == "" { 54 return nil, errors.New("parameter resourceGroupName cannot be empty") 55 } 56 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 57 if serviceName == "" { 58 return nil, errors.New("parameter serviceName cannot be empty") 59 } 60 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 61 if contentTypeID == "" { 62 return nil, errors.New("parameter contentTypeID cannot be empty") 63 } 64 urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID)) 65 if contentItemID == "" { 66 return nil, errors.New("parameter contentItemID cannot be empty") 67 } 68 urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID)) 69 if client.subscriptionID == "" { 70 return nil, errors.New("parameter client.subscriptionID cannot be empty") 71 } 72 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 73 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 74 if err != nil { 75 return nil, err 76 } 77 req.Telemetry(telemetryInfo) 78 reqQP := req.URL.Query() 79 reqQP.Set("api-version", "2020-12-01") 80 req.URL.RawQuery = reqQP.Encode() 81 if options != nil && options.IfMatch != nil { 82 req.Header.Set("If-Match", *options.IfMatch) 83 } 84 req.Header.Set("Accept", "application/json") 85 return req, nil 86} 87 88// createOrUpdateHandleResponse handles the CreateOrUpdate response. 89func (client *ContentItemClient) createOrUpdateHandleResponse(resp *azcore.Response) (ContentItemCreateOrUpdateResponse, error) { 90 result := ContentItemCreateOrUpdateResponse{RawResponse: resp.Response} 91 if val := resp.Header.Get("ETag"); val != "" { 92 result.ETag = &val 93 } 94 if err := resp.UnmarshalAsJSON(&result.ContentItemContract); err != nil { 95 return ContentItemCreateOrUpdateResponse{}, err 96 } 97 return result, nil 98} 99 100// createOrUpdateHandleError handles the CreateOrUpdate error response. 101func (client *ContentItemClient) createOrUpdateHandleError(resp *azcore.Response) error { 102 body, err := resp.Payload() 103 if err != nil { 104 return azcore.NewResponseError(err, resp.Response) 105 } 106 errType := ErrorResponse{raw: string(body)} 107 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 108 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 109 } 110 return azcore.NewResponseError(&errType, resp.Response) 111} 112 113// Delete - Removes the specified developer portal's content item. 114// If the operation fails it returns the *ErrorResponse error type. 115func (client *ContentItemClient) Delete(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, ifMatch string, options *ContentItemDeleteOptions) (ContentItemDeleteResponse, error) { 116 req, err := client.deleteCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, ifMatch, options) 117 if err != nil { 118 return ContentItemDeleteResponse{}, err 119 } 120 resp, err := client.con.Pipeline().Do(req) 121 if err != nil { 122 return ContentItemDeleteResponse{}, err 123 } 124 if !resp.HasStatusCode(http.StatusOK, http.StatusNoContent) { 125 return ContentItemDeleteResponse{}, client.deleteHandleError(resp) 126 } 127 return ContentItemDeleteResponse{RawResponse: resp.Response}, nil 128} 129 130// deleteCreateRequest creates the Delete request. 131func (client *ContentItemClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, ifMatch string, options *ContentItemDeleteOptions) (*azcore.Request, error) { 132 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}" 133 if resourceGroupName == "" { 134 return nil, errors.New("parameter resourceGroupName cannot be empty") 135 } 136 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 137 if serviceName == "" { 138 return nil, errors.New("parameter serviceName cannot be empty") 139 } 140 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 141 if contentTypeID == "" { 142 return nil, errors.New("parameter contentTypeID cannot be empty") 143 } 144 urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID)) 145 if contentItemID == "" { 146 return nil, errors.New("parameter contentItemID cannot be empty") 147 } 148 urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID)) 149 if client.subscriptionID == "" { 150 return nil, errors.New("parameter client.subscriptionID cannot be empty") 151 } 152 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 153 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 154 if err != nil { 155 return nil, err 156 } 157 req.Telemetry(telemetryInfo) 158 reqQP := req.URL.Query() 159 reqQP.Set("api-version", "2020-12-01") 160 req.URL.RawQuery = reqQP.Encode() 161 req.Header.Set("If-Match", ifMatch) 162 req.Header.Set("Accept", "application/json") 163 return req, nil 164} 165 166// deleteHandleError handles the Delete error response. 167func (client *ContentItemClient) deleteHandleError(resp *azcore.Response) error { 168 body, err := resp.Payload() 169 if err != nil { 170 return azcore.NewResponseError(err, resp.Response) 171 } 172 errType := ErrorResponse{raw: string(body)} 173 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 174 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 175 } 176 return azcore.NewResponseError(&errType, resp.Response) 177} 178 179// Get - Returns the developer portal's content item specified by its identifier. 180// If the operation fails it returns the *ErrorResponse error type. 181func (client *ContentItemClient) Get(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetOptions) (ContentItemGetResponse, error) { 182 req, err := client.getCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, options) 183 if err != nil { 184 return ContentItemGetResponse{}, err 185 } 186 resp, err := client.con.Pipeline().Do(req) 187 if err != nil { 188 return ContentItemGetResponse{}, err 189 } 190 if !resp.HasStatusCode(http.StatusOK) { 191 return ContentItemGetResponse{}, client.getHandleError(resp) 192 } 193 return client.getHandleResponse(resp) 194} 195 196// getCreateRequest creates the Get request. 197func (client *ContentItemClient) getCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetOptions) (*azcore.Request, error) { 198 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}" 199 if resourceGroupName == "" { 200 return nil, errors.New("parameter resourceGroupName cannot be empty") 201 } 202 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 203 if serviceName == "" { 204 return nil, errors.New("parameter serviceName cannot be empty") 205 } 206 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 207 if contentTypeID == "" { 208 return nil, errors.New("parameter contentTypeID cannot be empty") 209 } 210 urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID)) 211 if contentItemID == "" { 212 return nil, errors.New("parameter contentItemID cannot be empty") 213 } 214 urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID)) 215 if client.subscriptionID == "" { 216 return nil, errors.New("parameter client.subscriptionID cannot be empty") 217 } 218 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 219 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 220 if err != nil { 221 return nil, err 222 } 223 req.Telemetry(telemetryInfo) 224 reqQP := req.URL.Query() 225 reqQP.Set("api-version", "2020-12-01") 226 req.URL.RawQuery = reqQP.Encode() 227 req.Header.Set("Accept", "application/json") 228 return req, nil 229} 230 231// getHandleResponse handles the Get response. 232func (client *ContentItemClient) getHandleResponse(resp *azcore.Response) (ContentItemGetResponse, error) { 233 result := ContentItemGetResponse{RawResponse: resp.Response} 234 if val := resp.Header.Get("ETag"); val != "" { 235 result.ETag = &val 236 } 237 if err := resp.UnmarshalAsJSON(&result.ContentItemContract); err != nil { 238 return ContentItemGetResponse{}, err 239 } 240 return result, nil 241} 242 243// getHandleError handles the Get error response. 244func (client *ContentItemClient) getHandleError(resp *azcore.Response) error { 245 body, err := resp.Payload() 246 if err != nil { 247 return azcore.NewResponseError(err, resp.Response) 248 } 249 errType := ErrorResponse{raw: string(body)} 250 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 251 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 252 } 253 return azcore.NewResponseError(&errType, resp.Response) 254} 255 256// GetEntityTag - Returns the entity state (ETag) version of the developer portal's content item specified by its identifier. 257// If the operation fails it returns the *ErrorResponse error type. 258func (client *ContentItemClient) GetEntityTag(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetEntityTagOptions) (ContentItemGetEntityTagResponse, error) { 259 req, err := client.getEntityTagCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, options) 260 if err != nil { 261 return ContentItemGetEntityTagResponse{}, err 262 } 263 resp, err := client.con.Pipeline().Do(req) 264 if err != nil { 265 return ContentItemGetEntityTagResponse{}, err 266 } 267 return client.getEntityTagHandleResponse(resp) 268} 269 270// getEntityTagCreateRequest creates the GetEntityTag request. 271func (client *ContentItemClient) getEntityTagCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetEntityTagOptions) (*azcore.Request, error) { 272 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}" 273 if resourceGroupName == "" { 274 return nil, errors.New("parameter resourceGroupName cannot be empty") 275 } 276 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 277 if serviceName == "" { 278 return nil, errors.New("parameter serviceName cannot be empty") 279 } 280 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 281 if contentTypeID == "" { 282 return nil, errors.New("parameter contentTypeID cannot be empty") 283 } 284 urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID)) 285 if contentItemID == "" { 286 return nil, errors.New("parameter contentItemID cannot be empty") 287 } 288 urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID)) 289 if client.subscriptionID == "" { 290 return nil, errors.New("parameter client.subscriptionID cannot be empty") 291 } 292 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 293 req, err := azcore.NewRequest(ctx, http.MethodHead, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 294 if err != nil { 295 return nil, err 296 } 297 req.Telemetry(telemetryInfo) 298 reqQP := req.URL.Query() 299 reqQP.Set("api-version", "2020-12-01") 300 req.URL.RawQuery = reqQP.Encode() 301 req.Header.Set("Accept", "application/json") 302 return req, nil 303} 304 305// getEntityTagHandleResponse handles the GetEntityTag response. 306func (client *ContentItemClient) getEntityTagHandleResponse(resp *azcore.Response) (ContentItemGetEntityTagResponse, error) { 307 result := ContentItemGetEntityTagResponse{RawResponse: resp.Response} 308 if val := resp.Header.Get("ETag"); val != "" { 309 result.ETag = &val 310 } 311 if resp.StatusCode >= 200 && resp.StatusCode < 300 { 312 result.Success = true 313 } 314 return result, nil 315} 316 317// ListByService - Lists developer portal's content items specified by the provided content type. 318// If the operation fails it returns the *ErrorResponse error type. 319func (client *ContentItemClient) ListByService(resourceGroupName string, serviceName string, contentTypeID string, options *ContentItemListByServiceOptions) ContentItemListByServicePager { 320 return &contentItemListByServicePager{ 321 client: client, 322 requester: func(ctx context.Context) (*azcore.Request, error) { 323 return client.listByServiceCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, options) 324 }, 325 advancer: func(ctx context.Context, resp ContentItemListByServiceResponse) (*azcore.Request, error) { 326 return azcore.NewRequest(ctx, http.MethodGet, *resp.ContentItemCollection.NextLink) 327 }, 328 } 329} 330 331// listByServiceCreateRequest creates the ListByService request. 332func (client *ContentItemClient) listByServiceCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, options *ContentItemListByServiceOptions) (*azcore.Request, error) { 333 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems" 334 if resourceGroupName == "" { 335 return nil, errors.New("parameter resourceGroupName cannot be empty") 336 } 337 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 338 if serviceName == "" { 339 return nil, errors.New("parameter serviceName cannot be empty") 340 } 341 urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName)) 342 if contentTypeID == "" { 343 return nil, errors.New("parameter contentTypeID cannot be empty") 344 } 345 urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID)) 346 if client.subscriptionID == "" { 347 return nil, errors.New("parameter client.subscriptionID cannot be empty") 348 } 349 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 350 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 351 if err != nil { 352 return nil, err 353 } 354 req.Telemetry(telemetryInfo) 355 reqQP := req.URL.Query() 356 reqQP.Set("api-version", "2020-12-01") 357 req.URL.RawQuery = reqQP.Encode() 358 req.Header.Set("Accept", "application/json") 359 return req, nil 360} 361 362// listByServiceHandleResponse handles the ListByService response. 363func (client *ContentItemClient) listByServiceHandleResponse(resp *azcore.Response) (ContentItemListByServiceResponse, error) { 364 result := ContentItemListByServiceResponse{RawResponse: resp.Response} 365 if err := resp.UnmarshalAsJSON(&result.ContentItemCollection); err != nil { 366 return ContentItemListByServiceResponse{}, err 367 } 368 return result, nil 369} 370 371// listByServiceHandleError handles the ListByService error response. 372func (client *ContentItemClient) listByServiceHandleError(resp *azcore.Response) error { 373 body, err := resp.Payload() 374 if err != nil { 375 return azcore.NewResponseError(err, resp.Response) 376 } 377 errType := ErrorResponse{raw: string(body)} 378 if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil { 379 return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response) 380 } 381 return azcore.NewResponseError(&errType, resp.Response) 382} 383