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// NotificationClient is the apiManagement Client
19type NotificationClient struct {
20	BaseClient
21}
22
23// NewNotificationClient creates an instance of the NotificationClient client.
24func NewNotificationClient(subscriptionID string) NotificationClient {
25	return NewNotificationClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewNotificationClientWithBaseURI creates an instance of the NotificationClient client using a custom endpoint.  Use
29// this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewNotificationClientWithBaseURI(baseURI string, subscriptionID string) NotificationClient {
31	return NotificationClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// CreateOrUpdate create or Update API Management publisher notification.
35// Parameters:
36// resourceGroupName - the name of the resource group.
37// serviceName - the name of the API Management service.
38// notificationName - notification Name Identifier.
39// ifMatch - eTag of the Entity. Not required when creating an entity, but required when updating an entity.
40func (client NotificationClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serviceName string, notificationName NotificationName, ifMatch string) (result NotificationContract, err error) {
41	if tracing.IsEnabled() {
42		ctx = tracing.StartSpan(ctx, fqdn+"/NotificationClient.CreateOrUpdate")
43		defer func() {
44			sc := -1
45			if result.Response.Response != nil {
46				sc = result.Response.Response.StatusCode
47			}
48			tracing.EndSpan(ctx, sc, err)
49		}()
50	}
51	if err := validation.Validate([]validation.Validation{
52		{TargetValue: serviceName,
53			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
54				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
55				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}}}); err != nil {
56		return result, validation.NewError("apimanagement.NotificationClient", "CreateOrUpdate", err.Error())
57	}
58
59	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, serviceName, notificationName, ifMatch)
60	if err != nil {
61		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "CreateOrUpdate", nil, "Failure preparing request")
62		return
63	}
64
65	resp, err := client.CreateOrUpdateSender(req)
66	if err != nil {
67		result.Response = autorest.Response{Response: resp}
68		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "CreateOrUpdate", resp, "Failure sending request")
69		return
70	}
71
72	result, err = client.CreateOrUpdateResponder(resp)
73	if err != nil {
74		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "CreateOrUpdate", resp, "Failure responding to request")
75		return
76	}
77
78	return
79}
80
81// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
82func (client NotificationClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, serviceName string, notificationName NotificationName, ifMatch string) (*http.Request, error) {
83	pathParameters := map[string]interface{}{
84		"notificationName":  autorest.Encode("path", notificationName),
85		"resourceGroupName": autorest.Encode("path", resourceGroupName),
86		"serviceName":       autorest.Encode("path", serviceName),
87		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
88	}
89
90	const APIVersion = "2018-06-01-preview"
91	queryParameters := map[string]interface{}{
92		"api-version": APIVersion,
93	}
94
95	preparer := autorest.CreatePreparer(
96		autorest.AsPut(),
97		autorest.WithBaseURL(client.BaseURI),
98		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/notifications/{notificationName}", pathParameters),
99		autorest.WithQueryParameters(queryParameters))
100	if len(ifMatch) > 0 {
101		preparer = autorest.DecoratePreparer(preparer,
102			autorest.WithHeader("If-Match", autorest.String(ifMatch)))
103	}
104	return preparer.Prepare((&http.Request{}).WithContext(ctx))
105}
106
107// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
108// http.Response Body if it receives an error.
109func (client NotificationClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
110	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
111}
112
113// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
114// closes the http.Response Body.
115func (client NotificationClient) CreateOrUpdateResponder(resp *http.Response) (result NotificationContract, err error) {
116	err = autorest.Respond(
117		resp,
118		azure.WithErrorUnlessStatusCode(http.StatusOK),
119		autorest.ByUnmarshallingJSON(&result),
120		autorest.ByClosing())
121	result.Response = autorest.Response{Response: resp}
122	return
123}
124
125// Get gets the details of the Notification specified by its identifier.
126// Parameters:
127// resourceGroupName - the name of the resource group.
128// serviceName - the name of the API Management service.
129// notificationName - notification Name Identifier.
130func (client NotificationClient) Get(ctx context.Context, resourceGroupName string, serviceName string, notificationName NotificationName) (result NotificationContract, err error) {
131	if tracing.IsEnabled() {
132		ctx = tracing.StartSpan(ctx, fqdn+"/NotificationClient.Get")
133		defer func() {
134			sc := -1
135			if result.Response.Response != nil {
136				sc = result.Response.Response.StatusCode
137			}
138			tracing.EndSpan(ctx, sc, err)
139		}()
140	}
141	if err := validation.Validate([]validation.Validation{
142		{TargetValue: serviceName,
143			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
144				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
145				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}}}); err != nil {
146		return result, validation.NewError("apimanagement.NotificationClient", "Get", err.Error())
147	}
148
149	req, err := client.GetPreparer(ctx, resourceGroupName, serviceName, notificationName)
150	if err != nil {
151		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "Get", nil, "Failure preparing request")
152		return
153	}
154
155	resp, err := client.GetSender(req)
156	if err != nil {
157		result.Response = autorest.Response{Response: resp}
158		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "Get", resp, "Failure sending request")
159		return
160	}
161
162	result, err = client.GetResponder(resp)
163	if err != nil {
164		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "Get", resp, "Failure responding to request")
165		return
166	}
167
168	return
169}
170
171// GetPreparer prepares the Get request.
172func (client NotificationClient) GetPreparer(ctx context.Context, resourceGroupName string, serviceName string, notificationName NotificationName) (*http.Request, error) {
173	pathParameters := map[string]interface{}{
174		"notificationName":  autorest.Encode("path", notificationName),
175		"resourceGroupName": autorest.Encode("path", resourceGroupName),
176		"serviceName":       autorest.Encode("path", serviceName),
177		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
178	}
179
180	const APIVersion = "2018-06-01-preview"
181	queryParameters := map[string]interface{}{
182		"api-version": APIVersion,
183	}
184
185	preparer := autorest.CreatePreparer(
186		autorest.AsGet(),
187		autorest.WithBaseURL(client.BaseURI),
188		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/notifications/{notificationName}", pathParameters),
189		autorest.WithQueryParameters(queryParameters))
190	return preparer.Prepare((&http.Request{}).WithContext(ctx))
191}
192
193// GetSender sends the Get request. The method will close the
194// http.Response Body if it receives an error.
195func (client NotificationClient) GetSender(req *http.Request) (*http.Response, error) {
196	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
197}
198
199// GetResponder handles the response to the Get request. The method always
200// closes the http.Response Body.
201func (client NotificationClient) GetResponder(resp *http.Response) (result NotificationContract, err error) {
202	err = autorest.Respond(
203		resp,
204		azure.WithErrorUnlessStatusCode(http.StatusOK),
205		autorest.ByUnmarshallingJSON(&result),
206		autorest.ByClosing())
207	result.Response = autorest.Response{Response: resp}
208	return
209}
210
211// ListByService lists a collection of properties defined within a service instance.
212// Parameters:
213// resourceGroupName - the name of the resource group.
214// serviceName - the name of the API Management service.
215// top - number of records to return.
216// skip - number of records to skip.
217func (client NotificationClient) ListByService(ctx context.Context, resourceGroupName string, serviceName string, top *int32, skip *int32) (result NotificationCollectionPage, err error) {
218	if tracing.IsEnabled() {
219		ctx = tracing.StartSpan(ctx, fqdn+"/NotificationClient.ListByService")
220		defer func() {
221			sc := -1
222			if result.nc.Response.Response != nil {
223				sc = result.nc.Response.Response.StatusCode
224			}
225			tracing.EndSpan(ctx, sc, err)
226		}()
227	}
228	if err := validation.Validate([]validation.Validation{
229		{TargetValue: serviceName,
230			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
231				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
232				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
233		{TargetValue: top,
234			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
235				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
236		{TargetValue: skip,
237			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
238				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
239		return result, validation.NewError("apimanagement.NotificationClient", "ListByService", err.Error())
240	}
241
242	result.fn = client.listByServiceNextResults
243	req, err := client.ListByServicePreparer(ctx, resourceGroupName, serviceName, top, skip)
244	if err != nil {
245		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "ListByService", nil, "Failure preparing request")
246		return
247	}
248
249	resp, err := client.ListByServiceSender(req)
250	if err != nil {
251		result.nc.Response = autorest.Response{Response: resp}
252		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "ListByService", resp, "Failure sending request")
253		return
254	}
255
256	result.nc, err = client.ListByServiceResponder(resp)
257	if err != nil {
258		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "ListByService", resp, "Failure responding to request")
259		return
260	}
261	if result.nc.hasNextLink() && result.nc.IsEmpty() {
262		err = result.NextWithContext(ctx)
263		return
264	}
265
266	return
267}
268
269// ListByServicePreparer prepares the ListByService request.
270func (client NotificationClient) ListByServicePreparer(ctx context.Context, resourceGroupName string, serviceName string, top *int32, skip *int32) (*http.Request, error) {
271	pathParameters := map[string]interface{}{
272		"resourceGroupName": autorest.Encode("path", resourceGroupName),
273		"serviceName":       autorest.Encode("path", serviceName),
274		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
275	}
276
277	const APIVersion = "2018-06-01-preview"
278	queryParameters := map[string]interface{}{
279		"api-version": APIVersion,
280	}
281	if top != nil {
282		queryParameters["$top"] = autorest.Encode("query", *top)
283	}
284	if skip != nil {
285		queryParameters["$skip"] = autorest.Encode("query", *skip)
286	}
287
288	preparer := autorest.CreatePreparer(
289		autorest.AsGet(),
290		autorest.WithBaseURL(client.BaseURI),
291		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/notifications", pathParameters),
292		autorest.WithQueryParameters(queryParameters))
293	return preparer.Prepare((&http.Request{}).WithContext(ctx))
294}
295
296// ListByServiceSender sends the ListByService request. The method will close the
297// http.Response Body if it receives an error.
298func (client NotificationClient) ListByServiceSender(req *http.Request) (*http.Response, error) {
299	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
300}
301
302// ListByServiceResponder handles the response to the ListByService request. The method always
303// closes the http.Response Body.
304func (client NotificationClient) ListByServiceResponder(resp *http.Response) (result NotificationCollection, err error) {
305	err = autorest.Respond(
306		resp,
307		azure.WithErrorUnlessStatusCode(http.StatusOK),
308		autorest.ByUnmarshallingJSON(&result),
309		autorest.ByClosing())
310	result.Response = autorest.Response{Response: resp}
311	return
312}
313
314// listByServiceNextResults retrieves the next set of results, if any.
315func (client NotificationClient) listByServiceNextResults(ctx context.Context, lastResults NotificationCollection) (result NotificationCollection, err error) {
316	req, err := lastResults.notificationCollectionPreparer(ctx)
317	if err != nil {
318		return result, autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "listByServiceNextResults", nil, "Failure preparing next results request")
319	}
320	if req == nil {
321		return
322	}
323	resp, err := client.ListByServiceSender(req)
324	if err != nil {
325		result.Response = autorest.Response{Response: resp}
326		return result, autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "listByServiceNextResults", resp, "Failure sending next results request")
327	}
328	result, err = client.ListByServiceResponder(resp)
329	if err != nil {
330		err = autorest.NewErrorWithError(err, "apimanagement.NotificationClient", "listByServiceNextResults", resp, "Failure responding to next results request")
331	}
332	return
333}
334
335// ListByServiceComplete enumerates all values, automatically crossing page boundaries as required.
336func (client NotificationClient) ListByServiceComplete(ctx context.Context, resourceGroupName string, serviceName string, top *int32, skip *int32) (result NotificationCollectionIterator, err error) {
337	if tracing.IsEnabled() {
338		ctx = tracing.StartSpan(ctx, fqdn+"/NotificationClient.ListByService")
339		defer func() {
340			sc := -1
341			if result.Response().Response.Response != nil {
342				sc = result.page.Response().Response.Response.StatusCode
343			}
344			tracing.EndSpan(ctx, sc, err)
345		}()
346	}
347	result.page, err = client.ListByService(ctx, resourceGroupName, serviceName, top, skip)
348	return
349}
350