1package apimanagement
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//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/autorest/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// IssueClient is the apiManagement Client
19type IssueClient struct {
20	BaseClient
21}
22
23// NewIssueClient creates an instance of the IssueClient client.
24func NewIssueClient(subscriptionID string) IssueClient {
25	return NewIssueClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewIssueClientWithBaseURI creates an instance of the IssueClient client using a custom endpoint.  Use this when
29// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewIssueClientWithBaseURI(baseURI string, subscriptionID string) IssueClient {
31	return IssueClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// Get gets API Management issue details
35// Parameters:
36// resourceGroupName - the name of the resource group.
37// serviceName - the name of the API Management service.
38// issueID - issue identifier. Must be unique in the current API Management service instance.
39func (client IssueClient) Get(ctx context.Context, resourceGroupName string, serviceName string, issueID string) (result IssueContract, err error) {
40	if tracing.IsEnabled() {
41		ctx = tracing.StartSpan(ctx, fqdn+"/IssueClient.Get")
42		defer func() {
43			sc := -1
44			if result.Response.Response != nil {
45				sc = result.Response.Response.StatusCode
46			}
47			tracing.EndSpan(ctx, sc, err)
48		}()
49	}
50	if err := validation.Validate([]validation.Validation{
51		{TargetValue: serviceName,
52			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
53				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
54				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
55		{TargetValue: issueID,
56			Constraints: []validation.Constraint{{Target: "issueID", Name: validation.MaxLength, Rule: 256, Chain: nil},
57				{Target: "issueID", Name: validation.MinLength, Rule: 1, Chain: nil},
58				{Target: "issueID", Name: validation.Pattern, Rule: `^[^*#&+:<>?]+$`, Chain: nil}}}}); err != nil {
59		return result, validation.NewError("apimanagement.IssueClient", "Get", err.Error())
60	}
61
62	req, err := client.GetPreparer(ctx, resourceGroupName, serviceName, issueID)
63	if err != nil {
64		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "Get", nil, "Failure preparing request")
65		return
66	}
67
68	resp, err := client.GetSender(req)
69	if err != nil {
70		result.Response = autorest.Response{Response: resp}
71		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "Get", resp, "Failure sending request")
72		return
73	}
74
75	result, err = client.GetResponder(resp)
76	if err != nil {
77		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "Get", resp, "Failure responding to request")
78		return
79	}
80
81	return
82}
83
84// GetPreparer prepares the Get request.
85func (client IssueClient) GetPreparer(ctx context.Context, resourceGroupName string, serviceName string, issueID string) (*http.Request, error) {
86	pathParameters := map[string]interface{}{
87		"issueId":           autorest.Encode("path", issueID),
88		"resourceGroupName": autorest.Encode("path", resourceGroupName),
89		"serviceName":       autorest.Encode("path", serviceName),
90		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
91	}
92
93	const APIVersion = "2019-01-01"
94	queryParameters := map[string]interface{}{
95		"api-version": APIVersion,
96	}
97
98	preparer := autorest.CreatePreparer(
99		autorest.AsGet(),
100		autorest.WithBaseURL(client.BaseURI),
101		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/issues/{issueId}", pathParameters),
102		autorest.WithQueryParameters(queryParameters))
103	return preparer.Prepare((&http.Request{}).WithContext(ctx))
104}
105
106// GetSender sends the Get request. The method will close the
107// http.Response Body if it receives an error.
108func (client IssueClient) GetSender(req *http.Request) (*http.Response, error) {
109	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
110}
111
112// GetResponder handles the response to the Get request. The method always
113// closes the http.Response Body.
114func (client IssueClient) GetResponder(resp *http.Response) (result IssueContract, err error) {
115	err = autorest.Respond(
116		resp,
117		azure.WithErrorUnlessStatusCode(http.StatusOK),
118		autorest.ByUnmarshallingJSON(&result),
119		autorest.ByClosing())
120	result.Response = autorest.Response{Response: resp}
121	return
122}
123
124// ListByService lists a collection of issues in the specified service instance.
125// Parameters:
126// resourceGroupName - the name of the resource group.
127// serviceName - the name of the API Management service.
128// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
129// |</br>|-------------|-------------|-------------|-------------|</br>| name | filter | ge, le, eq, ne, gt, lt
130// | substringof, contains, startswith, endswith | </br>| apiId | filter | ge, le, eq, ne, gt, lt |
131// substringof, contains, startswith, endswith | </br>| title | filter | ge, le, eq, ne, gt, lt | substringof,
132// contains, startswith, endswith | </br>| description | filter | ge, le, eq, ne, gt, lt | substringof,
133// contains, startswith, endswith | </br>| authorName | filter | ge, le, eq, ne, gt, lt | substringof,
134// contains, startswith, endswith | </br>| state | filter | eq |     | </br>
135// top - number of records to return.
136// skip - number of records to skip.
137func (client IssueClient) ListByService(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (result IssueCollectionPage, err error) {
138	if tracing.IsEnabled() {
139		ctx = tracing.StartSpan(ctx, fqdn+"/IssueClient.ListByService")
140		defer func() {
141			sc := -1
142			if result.ic.Response.Response != nil {
143				sc = result.ic.Response.Response.StatusCode
144			}
145			tracing.EndSpan(ctx, sc, err)
146		}()
147	}
148	if err := validation.Validate([]validation.Validation{
149		{TargetValue: serviceName,
150			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
151				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
152				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
153		{TargetValue: top,
154			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
155				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
156		{TargetValue: skip,
157			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
158				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
159		return result, validation.NewError("apimanagement.IssueClient", "ListByService", err.Error())
160	}
161
162	result.fn = client.listByServiceNextResults
163	req, err := client.ListByServicePreparer(ctx, resourceGroupName, serviceName, filter, top, skip)
164	if err != nil {
165		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "ListByService", nil, "Failure preparing request")
166		return
167	}
168
169	resp, err := client.ListByServiceSender(req)
170	if err != nil {
171		result.ic.Response = autorest.Response{Response: resp}
172		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "ListByService", resp, "Failure sending request")
173		return
174	}
175
176	result.ic, err = client.ListByServiceResponder(resp)
177	if err != nil {
178		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "ListByService", resp, "Failure responding to request")
179		return
180	}
181	if result.ic.hasNextLink() && result.ic.IsEmpty() {
182		err = result.NextWithContext(ctx)
183		return
184	}
185
186	return
187}
188
189// ListByServicePreparer prepares the ListByService request.
190func (client IssueClient) ListByServicePreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (*http.Request, error) {
191	pathParameters := map[string]interface{}{
192		"resourceGroupName": autorest.Encode("path", resourceGroupName),
193		"serviceName":       autorest.Encode("path", serviceName),
194		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
195	}
196
197	const APIVersion = "2019-01-01"
198	queryParameters := map[string]interface{}{
199		"api-version": APIVersion,
200	}
201	if len(filter) > 0 {
202		queryParameters["$filter"] = autorest.Encode("query", filter)
203	}
204	if top != nil {
205		queryParameters["$top"] = autorest.Encode("query", *top)
206	}
207	if skip != nil {
208		queryParameters["$skip"] = autorest.Encode("query", *skip)
209	}
210
211	preparer := autorest.CreatePreparer(
212		autorest.AsGet(),
213		autorest.WithBaseURL(client.BaseURI),
214		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/issues", pathParameters),
215		autorest.WithQueryParameters(queryParameters))
216	return preparer.Prepare((&http.Request{}).WithContext(ctx))
217}
218
219// ListByServiceSender sends the ListByService request. The method will close the
220// http.Response Body if it receives an error.
221func (client IssueClient) ListByServiceSender(req *http.Request) (*http.Response, error) {
222	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
223}
224
225// ListByServiceResponder handles the response to the ListByService request. The method always
226// closes the http.Response Body.
227func (client IssueClient) ListByServiceResponder(resp *http.Response) (result IssueCollection, err error) {
228	err = autorest.Respond(
229		resp,
230		azure.WithErrorUnlessStatusCode(http.StatusOK),
231		autorest.ByUnmarshallingJSON(&result),
232		autorest.ByClosing())
233	result.Response = autorest.Response{Response: resp}
234	return
235}
236
237// listByServiceNextResults retrieves the next set of results, if any.
238func (client IssueClient) listByServiceNextResults(ctx context.Context, lastResults IssueCollection) (result IssueCollection, err error) {
239	req, err := lastResults.issueCollectionPreparer(ctx)
240	if err != nil {
241		return result, autorest.NewErrorWithError(err, "apimanagement.IssueClient", "listByServiceNextResults", nil, "Failure preparing next results request")
242	}
243	if req == nil {
244		return
245	}
246	resp, err := client.ListByServiceSender(req)
247	if err != nil {
248		result.Response = autorest.Response{Response: resp}
249		return result, autorest.NewErrorWithError(err, "apimanagement.IssueClient", "listByServiceNextResults", resp, "Failure sending next results request")
250	}
251	result, err = client.ListByServiceResponder(resp)
252	if err != nil {
253		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "listByServiceNextResults", resp, "Failure responding to next results request")
254	}
255	return
256}
257
258// ListByServiceComplete enumerates all values, automatically crossing page boundaries as required.
259func (client IssueClient) ListByServiceComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (result IssueCollectionIterator, err error) {
260	if tracing.IsEnabled() {
261		ctx = tracing.StartSpan(ctx, fqdn+"/IssueClient.ListByService")
262		defer func() {
263			sc := -1
264			if result.Response().Response.Response != nil {
265				sc = result.page.Response().Response.Response.StatusCode
266			}
267			tracing.EndSpan(ctx, sc, err)
268		}()
269	}
270	result.page, err = client.ListByService(ctx, resourceGroupName, serviceName, filter, top, skip)
271	return
272}
273