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// IssueClient contains the methods for the Issue group.
23// Don't use this type directly, use NewIssueClient() instead.
24type IssueClient struct {
25	con            *armcore.Connection
26	subscriptionID string
27}
28
29// NewIssueClient creates a new instance of IssueClient with the specified values.
30func NewIssueClient(con *armcore.Connection, subscriptionID string) *IssueClient {
31	return &IssueClient{con: con, subscriptionID: subscriptionID}
32}
33
34// Get - Gets API Management issue details
35// If the operation fails it returns the *ErrorResponse error type.
36func (client *IssueClient) Get(ctx context.Context, resourceGroupName string, serviceName string, issueID string, options *IssueGetOptions) (IssueGetResponse, error) {
37	req, err := client.getCreateRequest(ctx, resourceGroupName, serviceName, issueID, options)
38	if err != nil {
39		return IssueGetResponse{}, err
40	}
41	resp, err := client.con.Pipeline().Do(req)
42	if err != nil {
43		return IssueGetResponse{}, err
44	}
45	if !resp.HasStatusCode(http.StatusOK) {
46		return IssueGetResponse{}, client.getHandleError(resp)
47	}
48	return client.getHandleResponse(resp)
49}
50
51// getCreateRequest creates the Get request.
52func (client *IssueClient) getCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, issueID string, options *IssueGetOptions) (*azcore.Request, error) {
53	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/issues/{issueId}"
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 issueID == "" {
63		return nil, errors.New("parameter issueID cannot be empty")
64	}
65	urlPath = strings.ReplaceAll(urlPath, "{issueId}", url.PathEscape(issueID))
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.MethodGet, 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	req.Header.Set("Accept", "application/json")
79	return req, nil
80}
81
82// getHandleResponse handles the Get response.
83func (client *IssueClient) getHandleResponse(resp *azcore.Response) (IssueGetResponse, error) {
84	result := IssueGetResponse{RawResponse: resp.Response}
85	if val := resp.Header.Get("ETag"); val != "" {
86		result.ETag = &val
87	}
88	if err := resp.UnmarshalAsJSON(&result.IssueContract); err != nil {
89		return IssueGetResponse{}, err
90	}
91	return result, nil
92}
93
94// getHandleError handles the Get error response.
95func (client *IssueClient) getHandleError(resp *azcore.Response) error {
96	body, err := resp.Payload()
97	if err != nil {
98		return azcore.NewResponseError(err, resp.Response)
99	}
100	errType := ErrorResponse{raw: string(body)}
101	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
102		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
103	}
104	return azcore.NewResponseError(&errType, resp.Response)
105}
106
107// ListByService - Lists a collection of issues in the specified service instance.
108// If the operation fails it returns the *ErrorResponse error type.
109func (client *IssueClient) ListByService(resourceGroupName string, serviceName string, options *IssueListByServiceOptions) IssueListByServicePager {
110	return &issueListByServicePager{
111		client: client,
112		requester: func(ctx context.Context) (*azcore.Request, error) {
113			return client.listByServiceCreateRequest(ctx, resourceGroupName, serviceName, options)
114		},
115		advancer: func(ctx context.Context, resp IssueListByServiceResponse) (*azcore.Request, error) {
116			return azcore.NewRequest(ctx, http.MethodGet, *resp.IssueCollection.NextLink)
117		},
118	}
119}
120
121// listByServiceCreateRequest creates the ListByService request.
122func (client *IssueClient) listByServiceCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, options *IssueListByServiceOptions) (*azcore.Request, error) {
123	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/issues"
124	if resourceGroupName == "" {
125		return nil, errors.New("parameter resourceGroupName cannot be empty")
126	}
127	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
128	if serviceName == "" {
129		return nil, errors.New("parameter serviceName cannot be empty")
130	}
131	urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName))
132	if client.subscriptionID == "" {
133		return nil, errors.New("parameter client.subscriptionID cannot be empty")
134	}
135	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
136	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
137	if err != nil {
138		return nil, err
139	}
140	req.Telemetry(telemetryInfo)
141	reqQP := req.URL.Query()
142	if options != nil && options.Filter != nil {
143		reqQP.Set("$filter", *options.Filter)
144	}
145	if options != nil && options.Top != nil {
146		reqQP.Set("$top", strconv.FormatInt(int64(*options.Top), 10))
147	}
148	if options != nil && options.Skip != nil {
149		reqQP.Set("$skip", strconv.FormatInt(int64(*options.Skip), 10))
150	}
151	reqQP.Set("api-version", "2020-12-01")
152	req.URL.RawQuery = reqQP.Encode()
153	req.Header.Set("Accept", "application/json")
154	return req, nil
155}
156
157// listByServiceHandleResponse handles the ListByService response.
158func (client *IssueClient) listByServiceHandleResponse(resp *azcore.Response) (IssueListByServiceResponse, error) {
159	result := IssueListByServiceResponse{RawResponse: resp.Response}
160	if err := resp.UnmarshalAsJSON(&result.IssueCollection); err != nil {
161		return IssueListByServiceResponse{}, err
162	}
163	return result, nil
164}
165
166// listByServiceHandleError handles the ListByService error response.
167func (client *IssueClient) listByServiceHandleError(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