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 = "2018-06-01-preview"
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       | Supported operators    | Supported functions               |
129// |-------------|------------------------|-----------------------------------|
130//
131// |name | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith|
132// |apiId | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith|
133// |title | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith|
134// |description | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith|
135// |authorName | ge, le, eq, ne, gt, lt | substringof, contains, startswith, endswith|
136// |state | eq |    |
137// top - number of records to return.
138// skip - number of records to skip.
139func (client IssueClient) ListByService(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (result IssueCollectionPage, err error) {
140	if tracing.IsEnabled() {
141		ctx = tracing.StartSpan(ctx, fqdn+"/IssueClient.ListByService")
142		defer func() {
143			sc := -1
144			if result.ic.Response.Response != nil {
145				sc = result.ic.Response.Response.StatusCode
146			}
147			tracing.EndSpan(ctx, sc, err)
148		}()
149	}
150	if err := validation.Validate([]validation.Validation{
151		{TargetValue: serviceName,
152			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
153				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
154				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
155		{TargetValue: top,
156			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
157				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
158		{TargetValue: skip,
159			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
160				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
161		return result, validation.NewError("apimanagement.IssueClient", "ListByService", err.Error())
162	}
163
164	result.fn = client.listByServiceNextResults
165	req, err := client.ListByServicePreparer(ctx, resourceGroupName, serviceName, filter, top, skip)
166	if err != nil {
167		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "ListByService", nil, "Failure preparing request")
168		return
169	}
170
171	resp, err := client.ListByServiceSender(req)
172	if err != nil {
173		result.ic.Response = autorest.Response{Response: resp}
174		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "ListByService", resp, "Failure sending request")
175		return
176	}
177
178	result.ic, err = client.ListByServiceResponder(resp)
179	if err != nil {
180		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "ListByService", resp, "Failure responding to request")
181		return
182	}
183	if result.ic.hasNextLink() && result.ic.IsEmpty() {
184		err = result.NextWithContext(ctx)
185		return
186	}
187
188	return
189}
190
191// ListByServicePreparer prepares the ListByService request.
192func (client IssueClient) ListByServicePreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (*http.Request, error) {
193	pathParameters := map[string]interface{}{
194		"resourceGroupName": autorest.Encode("path", resourceGroupName),
195		"serviceName":       autorest.Encode("path", serviceName),
196		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
197	}
198
199	const APIVersion = "2018-06-01-preview"
200	queryParameters := map[string]interface{}{
201		"api-version": APIVersion,
202	}
203	if len(filter) > 0 {
204		queryParameters["$filter"] = autorest.Encode("query", filter)
205	}
206	if top != nil {
207		queryParameters["$top"] = autorest.Encode("query", *top)
208	}
209	if skip != nil {
210		queryParameters["$skip"] = autorest.Encode("query", *skip)
211	}
212
213	preparer := autorest.CreatePreparer(
214		autorest.AsGet(),
215		autorest.WithBaseURL(client.BaseURI),
216		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/issues", pathParameters),
217		autorest.WithQueryParameters(queryParameters))
218	return preparer.Prepare((&http.Request{}).WithContext(ctx))
219}
220
221// ListByServiceSender sends the ListByService request. The method will close the
222// http.Response Body if it receives an error.
223func (client IssueClient) ListByServiceSender(req *http.Request) (*http.Response, error) {
224	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
225}
226
227// ListByServiceResponder handles the response to the ListByService request. The method always
228// closes the http.Response Body.
229func (client IssueClient) ListByServiceResponder(resp *http.Response) (result IssueCollection, err error) {
230	err = autorest.Respond(
231		resp,
232		azure.WithErrorUnlessStatusCode(http.StatusOK),
233		autorest.ByUnmarshallingJSON(&result),
234		autorest.ByClosing())
235	result.Response = autorest.Response{Response: resp}
236	return
237}
238
239// listByServiceNextResults retrieves the next set of results, if any.
240func (client IssueClient) listByServiceNextResults(ctx context.Context, lastResults IssueCollection) (result IssueCollection, err error) {
241	req, err := lastResults.issueCollectionPreparer(ctx)
242	if err != nil {
243		return result, autorest.NewErrorWithError(err, "apimanagement.IssueClient", "listByServiceNextResults", nil, "Failure preparing next results request")
244	}
245	if req == nil {
246		return
247	}
248	resp, err := client.ListByServiceSender(req)
249	if err != nil {
250		result.Response = autorest.Response{Response: resp}
251		return result, autorest.NewErrorWithError(err, "apimanagement.IssueClient", "listByServiceNextResults", resp, "Failure sending next results request")
252	}
253	result, err = client.ListByServiceResponder(resp)
254	if err != nil {
255		err = autorest.NewErrorWithError(err, "apimanagement.IssueClient", "listByServiceNextResults", resp, "Failure responding to next results request")
256	}
257	return
258}
259
260// ListByServiceComplete enumerates all values, automatically crossing page boundaries as required.
261func (client IssueClient) ListByServiceComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (result IssueCollectionIterator, err error) {
262	if tracing.IsEnabled() {
263		ctx = tracing.StartSpan(ctx, fqdn+"/IssueClient.ListByService")
264		defer func() {
265			sc := -1
266			if result.Response().Response.Response != nil {
267				sc = result.page.Response().Response.Response.StatusCode
268			}
269			tracing.EndSpan(ctx, sc, err)
270		}()
271	}
272	result.page, err = client.ListByService(ctx, resourceGroupName, serviceName, filter, top, skip)
273	return
274}
275