1package managednetwork
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// PeeringPoliciesClient is the the Microsoft Azure Managed Network management API provides a RESTful set of web
19// services that interact with Microsoft Azure Networks service to programmatically view, control, change, and monitor
20// your entire Azure network centrally and with ease.
21type PeeringPoliciesClient struct {
22	BaseClient
23}
24
25// NewPeeringPoliciesClient creates an instance of the PeeringPoliciesClient client.
26func NewPeeringPoliciesClient(subscriptionID string) PeeringPoliciesClient {
27	return NewPeeringPoliciesClientWithBaseURI(DefaultBaseURI, subscriptionID)
28}
29
30// NewPeeringPoliciesClientWithBaseURI creates an instance of the PeeringPoliciesClient client using a custom endpoint.
31// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
32func NewPeeringPoliciesClientWithBaseURI(baseURI string, subscriptionID string) PeeringPoliciesClient {
33	return PeeringPoliciesClient{NewWithBaseURI(baseURI, subscriptionID)}
34}
35
36// CreateOrUpdate the Put ManagedNetworkPeeringPolicies operation creates/updates a new Managed Network Peering Policy
37// Parameters:
38// managedNetworkPolicy - parameters supplied to create/update a Managed Network Peering Policy
39// resourceGroupName - the name of the resource group.
40// managedNetworkName - the name of the Managed Network.
41// managedNetworkPeeringPolicyName - the name of the Managed Network Peering Policy.
42func (client PeeringPoliciesClient) CreateOrUpdate(ctx context.Context, managedNetworkPolicy PeeringPolicy, resourceGroupName string, managedNetworkName string, managedNetworkPeeringPolicyName string) (result PeeringPoliciesCreateOrUpdateFuture, err error) {
43	if tracing.IsEnabled() {
44		ctx = tracing.StartSpan(ctx, fqdn+"/PeeringPoliciesClient.CreateOrUpdate")
45		defer func() {
46			sc := -1
47			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
48				sc = result.FutureAPI.Response().StatusCode
49			}
50			tracing.EndSpan(ctx, sc, err)
51		}()
52	}
53	req, err := client.CreateOrUpdatePreparer(ctx, managedNetworkPolicy, resourceGroupName, managedNetworkName, managedNetworkPeeringPolicyName)
54	if err != nil {
55		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "CreateOrUpdate", nil, "Failure preparing request")
56		return
57	}
58
59	result, err = client.CreateOrUpdateSender(req)
60	if err != nil {
61		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "CreateOrUpdate", nil, "Failure sending request")
62		return
63	}
64
65	return
66}
67
68// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
69func (client PeeringPoliciesClient) CreateOrUpdatePreparer(ctx context.Context, managedNetworkPolicy PeeringPolicy, resourceGroupName string, managedNetworkName string, managedNetworkPeeringPolicyName string) (*http.Request, error) {
70	pathParameters := map[string]interface{}{
71		"managedNetworkName":              autorest.Encode("path", managedNetworkName),
72		"managedNetworkPeeringPolicyName": autorest.Encode("path", managedNetworkPeeringPolicyName),
73		"resourceGroupName":               autorest.Encode("path", resourceGroupName),
74		"subscriptionId":                  autorest.Encode("path", client.SubscriptionID),
75	}
76
77	const APIVersion = "2019-06-01-preview"
78	queryParameters := map[string]interface{}{
79		"api-version": APIVersion,
80	}
81
82	preparer := autorest.CreatePreparer(
83		autorest.AsContentType("application/json; charset=utf-8"),
84		autorest.AsPut(),
85		autorest.WithBaseURL(client.BaseURI),
86		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedNetwork/managedNetworks/{managedNetworkName}/managedNetworkPeeringPolicies/{managedNetworkPeeringPolicyName}", pathParameters),
87		autorest.WithJSON(managedNetworkPolicy),
88		autorest.WithQueryParameters(queryParameters))
89	return preparer.Prepare((&http.Request{}).WithContext(ctx))
90}
91
92// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
93// http.Response Body if it receives an error.
94func (client PeeringPoliciesClient) CreateOrUpdateSender(req *http.Request) (future PeeringPoliciesCreateOrUpdateFuture, err error) {
95	var resp *http.Response
96	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
97	if err != nil {
98		return
99	}
100	var azf azure.Future
101	azf, err = azure.NewFutureFromResponse(resp)
102	future.FutureAPI = &azf
103	future.Result = future.result
104	return
105}
106
107// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
108// closes the http.Response Body.
109func (client PeeringPoliciesClient) CreateOrUpdateResponder(resp *http.Response) (result PeeringPolicy, err error) {
110	err = autorest.Respond(
111		resp,
112		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
113		autorest.ByUnmarshallingJSON(&result),
114		autorest.ByClosing())
115	result.Response = autorest.Response{Response: resp}
116	return
117}
118
119// Delete the Delete ManagedNetworkPeeringPolicies operation deletes a Managed Network Peering Policy, specified by the
120// resource group, Managed Network name, and peering policy name
121// Parameters:
122// resourceGroupName - the name of the resource group.
123// managedNetworkName - the name of the Managed Network.
124// managedNetworkPeeringPolicyName - the name of the Managed Network Peering Policy.
125func (client PeeringPoliciesClient) Delete(ctx context.Context, resourceGroupName string, managedNetworkName string, managedNetworkPeeringPolicyName string) (result PeeringPoliciesDeleteFuture, err error) {
126	if tracing.IsEnabled() {
127		ctx = tracing.StartSpan(ctx, fqdn+"/PeeringPoliciesClient.Delete")
128		defer func() {
129			sc := -1
130			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
131				sc = result.FutureAPI.Response().StatusCode
132			}
133			tracing.EndSpan(ctx, sc, err)
134		}()
135	}
136	req, err := client.DeletePreparer(ctx, resourceGroupName, managedNetworkName, managedNetworkPeeringPolicyName)
137	if err != nil {
138		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "Delete", nil, "Failure preparing request")
139		return
140	}
141
142	result, err = client.DeleteSender(req)
143	if err != nil {
144		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "Delete", nil, "Failure sending request")
145		return
146	}
147
148	return
149}
150
151// DeletePreparer prepares the Delete request.
152func (client PeeringPoliciesClient) DeletePreparer(ctx context.Context, resourceGroupName string, managedNetworkName string, managedNetworkPeeringPolicyName string) (*http.Request, error) {
153	pathParameters := map[string]interface{}{
154		"managedNetworkName":              autorest.Encode("path", managedNetworkName),
155		"managedNetworkPeeringPolicyName": autorest.Encode("path", managedNetworkPeeringPolicyName),
156		"resourceGroupName":               autorest.Encode("path", resourceGroupName),
157		"subscriptionId":                  autorest.Encode("path", client.SubscriptionID),
158	}
159
160	const APIVersion = "2019-06-01-preview"
161	queryParameters := map[string]interface{}{
162		"api-version": APIVersion,
163	}
164
165	preparer := autorest.CreatePreparer(
166		autorest.AsDelete(),
167		autorest.WithBaseURL(client.BaseURI),
168		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedNetwork/managedNetworks/{managedNetworkName}/managedNetworkPeeringPolicies/{managedNetworkPeeringPolicyName}", pathParameters),
169		autorest.WithQueryParameters(queryParameters))
170	return preparer.Prepare((&http.Request{}).WithContext(ctx))
171}
172
173// DeleteSender sends the Delete request. The method will close the
174// http.Response Body if it receives an error.
175func (client PeeringPoliciesClient) DeleteSender(req *http.Request) (future PeeringPoliciesDeleteFuture, err error) {
176	var resp *http.Response
177	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
178	if err != nil {
179		return
180	}
181	var azf azure.Future
182	azf, err = azure.NewFutureFromResponse(resp)
183	future.FutureAPI = &azf
184	future.Result = future.result
185	return
186}
187
188// DeleteResponder handles the response to the Delete request. The method always
189// closes the http.Response Body.
190func (client PeeringPoliciesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
191	err = autorest.Respond(
192		resp,
193		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
194		autorest.ByClosing())
195	result.Response = resp
196	return
197}
198
199// Get the Get ManagedNetworkPeeringPolicies operation gets a Managed Network Peering Policy resource, specified by the
200// resource group, Managed Network name, and peering policy name
201// Parameters:
202// resourceGroupName - the name of the resource group.
203// managedNetworkName - the name of the Managed Network.
204// managedNetworkPeeringPolicyName - the name of the Managed Network Peering Policy.
205func (client PeeringPoliciesClient) Get(ctx context.Context, resourceGroupName string, managedNetworkName string, managedNetworkPeeringPolicyName string) (result PeeringPolicy, err error) {
206	if tracing.IsEnabled() {
207		ctx = tracing.StartSpan(ctx, fqdn+"/PeeringPoliciesClient.Get")
208		defer func() {
209			sc := -1
210			if result.Response.Response != nil {
211				sc = result.Response.Response.StatusCode
212			}
213			tracing.EndSpan(ctx, sc, err)
214		}()
215	}
216	req, err := client.GetPreparer(ctx, resourceGroupName, managedNetworkName, managedNetworkPeeringPolicyName)
217	if err != nil {
218		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "Get", nil, "Failure preparing request")
219		return
220	}
221
222	resp, err := client.GetSender(req)
223	if err != nil {
224		result.Response = autorest.Response{Response: resp}
225		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "Get", resp, "Failure sending request")
226		return
227	}
228
229	result, err = client.GetResponder(resp)
230	if err != nil {
231		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "Get", resp, "Failure responding to request")
232		return
233	}
234
235	return
236}
237
238// GetPreparer prepares the Get request.
239func (client PeeringPoliciesClient) GetPreparer(ctx context.Context, resourceGroupName string, managedNetworkName string, managedNetworkPeeringPolicyName string) (*http.Request, error) {
240	pathParameters := map[string]interface{}{
241		"managedNetworkName":              autorest.Encode("path", managedNetworkName),
242		"managedNetworkPeeringPolicyName": autorest.Encode("path", managedNetworkPeeringPolicyName),
243		"resourceGroupName":               autorest.Encode("path", resourceGroupName),
244		"subscriptionId":                  autorest.Encode("path", client.SubscriptionID),
245	}
246
247	const APIVersion = "2019-06-01-preview"
248	queryParameters := map[string]interface{}{
249		"api-version": APIVersion,
250	}
251
252	preparer := autorest.CreatePreparer(
253		autorest.AsGet(),
254		autorest.WithBaseURL(client.BaseURI),
255		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedNetwork/managedNetworks/{managedNetworkName}/managedNetworkPeeringPolicies/{managedNetworkPeeringPolicyName}", pathParameters),
256		autorest.WithQueryParameters(queryParameters))
257	return preparer.Prepare((&http.Request{}).WithContext(ctx))
258}
259
260// GetSender sends the Get request. The method will close the
261// http.Response Body if it receives an error.
262func (client PeeringPoliciesClient) GetSender(req *http.Request) (*http.Response, error) {
263	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
264}
265
266// GetResponder handles the response to the Get request. The method always
267// closes the http.Response Body.
268func (client PeeringPoliciesClient) GetResponder(resp *http.Response) (result PeeringPolicy, err error) {
269	err = autorest.Respond(
270		resp,
271		azure.WithErrorUnlessStatusCode(http.StatusOK),
272		autorest.ByUnmarshallingJSON(&result),
273		autorest.ByClosing())
274	result.Response = autorest.Response{Response: resp}
275	return
276}
277
278// ListByManagedNetwork the ListByManagedNetwork PeeringPolicies operation retrieves all the Managed Network Peering
279// Policies in a specified Managed Network, in a paginated format.
280// Parameters:
281// resourceGroupName - the name of the resource group.
282// managedNetworkName - the name of the Managed Network.
283// top - may be used to limit the number of results in a page for list queries.
284// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response
285// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that
286// specifies a starting point to use for subsequent calls.
287func (client PeeringPoliciesClient) ListByManagedNetwork(ctx context.Context, resourceGroupName string, managedNetworkName string, top *int32, skiptoken string) (result PeeringPolicyListResultPage, err error) {
288	if tracing.IsEnabled() {
289		ctx = tracing.StartSpan(ctx, fqdn+"/PeeringPoliciesClient.ListByManagedNetwork")
290		defer func() {
291			sc := -1
292			if result.pplr.Response.Response != nil {
293				sc = result.pplr.Response.Response.StatusCode
294			}
295			tracing.EndSpan(ctx, sc, err)
296		}()
297	}
298	if err := validation.Validate([]validation.Validation{
299		{TargetValue: top,
300			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
301				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(20), Chain: nil},
302					{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil},
303				}}}}}); err != nil {
304		return result, validation.NewError("managednetwork.PeeringPoliciesClient", "ListByManagedNetwork", err.Error())
305	}
306
307	result.fn = client.listByManagedNetworkNextResults
308	req, err := client.ListByManagedNetworkPreparer(ctx, resourceGroupName, managedNetworkName, top, skiptoken)
309	if err != nil {
310		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "ListByManagedNetwork", nil, "Failure preparing request")
311		return
312	}
313
314	resp, err := client.ListByManagedNetworkSender(req)
315	if err != nil {
316		result.pplr.Response = autorest.Response{Response: resp}
317		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "ListByManagedNetwork", resp, "Failure sending request")
318		return
319	}
320
321	result.pplr, err = client.ListByManagedNetworkResponder(resp)
322	if err != nil {
323		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "ListByManagedNetwork", resp, "Failure responding to request")
324		return
325	}
326	if result.pplr.hasNextLink() && result.pplr.IsEmpty() {
327		err = result.NextWithContext(ctx)
328		return
329	}
330
331	return
332}
333
334// ListByManagedNetworkPreparer prepares the ListByManagedNetwork request.
335func (client PeeringPoliciesClient) ListByManagedNetworkPreparer(ctx context.Context, resourceGroupName string, managedNetworkName string, top *int32, skiptoken string) (*http.Request, error) {
336	pathParameters := map[string]interface{}{
337		"managedNetworkName": autorest.Encode("path", managedNetworkName),
338		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
339		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
340	}
341
342	const APIVersion = "2019-06-01-preview"
343	queryParameters := map[string]interface{}{
344		"api-version": APIVersion,
345	}
346	if top != nil {
347		queryParameters["$top"] = autorest.Encode("query", *top)
348	}
349	if len(skiptoken) > 0 {
350		queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken)
351	}
352
353	preparer := autorest.CreatePreparer(
354		autorest.AsGet(),
355		autorest.WithBaseURL(client.BaseURI),
356		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedNetwork/managedNetworks/{managedNetworkName}/managedNetworkPeeringPolicies", pathParameters),
357		autorest.WithQueryParameters(queryParameters))
358	return preparer.Prepare((&http.Request{}).WithContext(ctx))
359}
360
361// ListByManagedNetworkSender sends the ListByManagedNetwork request. The method will close the
362// http.Response Body if it receives an error.
363func (client PeeringPoliciesClient) ListByManagedNetworkSender(req *http.Request) (*http.Response, error) {
364	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
365}
366
367// ListByManagedNetworkResponder handles the response to the ListByManagedNetwork request. The method always
368// closes the http.Response Body.
369func (client PeeringPoliciesClient) ListByManagedNetworkResponder(resp *http.Response) (result PeeringPolicyListResult, err error) {
370	err = autorest.Respond(
371		resp,
372		azure.WithErrorUnlessStatusCode(http.StatusOK),
373		autorest.ByUnmarshallingJSON(&result),
374		autorest.ByClosing())
375	result.Response = autorest.Response{Response: resp}
376	return
377}
378
379// listByManagedNetworkNextResults retrieves the next set of results, if any.
380func (client PeeringPoliciesClient) listByManagedNetworkNextResults(ctx context.Context, lastResults PeeringPolicyListResult) (result PeeringPolicyListResult, err error) {
381	req, err := lastResults.peeringPolicyListResultPreparer(ctx)
382	if err != nil {
383		return result, autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "listByManagedNetworkNextResults", nil, "Failure preparing next results request")
384	}
385	if req == nil {
386		return
387	}
388	resp, err := client.ListByManagedNetworkSender(req)
389	if err != nil {
390		result.Response = autorest.Response{Response: resp}
391		return result, autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "listByManagedNetworkNextResults", resp, "Failure sending next results request")
392	}
393	result, err = client.ListByManagedNetworkResponder(resp)
394	if err != nil {
395		err = autorest.NewErrorWithError(err, "managednetwork.PeeringPoliciesClient", "listByManagedNetworkNextResults", resp, "Failure responding to next results request")
396	}
397	return
398}
399
400// ListByManagedNetworkComplete enumerates all values, automatically crossing page boundaries as required.
401func (client PeeringPoliciesClient) ListByManagedNetworkComplete(ctx context.Context, resourceGroupName string, managedNetworkName string, top *int32, skiptoken string) (result PeeringPolicyListResultIterator, err error) {
402	if tracing.IsEnabled() {
403		ctx = tracing.StartSpan(ctx, fqdn+"/PeeringPoliciesClient.ListByManagedNetwork")
404		defer func() {
405			sc := -1
406			if result.Response().Response.Response != nil {
407				sc = result.page.Response().Response.Response.StatusCode
408			}
409			tracing.EndSpan(ctx, sc, err)
410		}()
411	}
412	result.page, err = client.ListByManagedNetwork(ctx, resourceGroupName, managedNetworkName, top, skiptoken)
413	return
414}
415