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