1package cdn
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/autorest/validation"
25	"github.com/Azure/go-autorest/tracing"
26	"net/http"
27)
28
29// PoliciesClient is the cdn Management Client
30type PoliciesClient struct {
31	BaseClient
32}
33
34// NewPoliciesClient creates an instance of the PoliciesClient client.
35func NewPoliciesClient(subscriptionID string) PoliciesClient {
36	return NewPoliciesClientWithBaseURI(DefaultBaseURI, subscriptionID)
37}
38
39// NewPoliciesClientWithBaseURI creates an instance of the PoliciesClient client using a custom endpoint.  Use this
40// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
41func NewPoliciesClientWithBaseURI(baseURI string, subscriptionID string) PoliciesClient {
42	return PoliciesClient{NewWithBaseURI(baseURI, subscriptionID)}
43}
44
45// CreateOrUpdate create or update policy with specified rule set name within a resource group.
46// Parameters:
47// resourceGroupName - name of the Resource group within the Azure subscription.
48// policyName - the name of the CdnWebApplicationFirewallPolicy.
49// cdnWebApplicationFirewallPolicy - policy to be created.
50func (client PoliciesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, policyName string, cdnWebApplicationFirewallPolicy WebApplicationFirewallPolicy) (result PoliciesCreateOrUpdateFuture, err error) {
51	if tracing.IsEnabled() {
52		ctx = tracing.StartSpan(ctx, fqdn+"/PoliciesClient.CreateOrUpdate")
53		defer func() {
54			sc := -1
55			if result.Response() != nil {
56				sc = result.Response().StatusCode
57			}
58			tracing.EndSpan(ctx, sc, err)
59		}()
60	}
61	if err := validation.Validate([]validation.Validation{
62		{TargetValue: resourceGroupName,
63			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
64				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
65				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
66		{TargetValue: policyName,
67			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}},
68		{TargetValue: cdnWebApplicationFirewallPolicy,
69			Constraints: []validation.Constraint{{Target: "cdnWebApplicationFirewallPolicy.WebApplicationFirewallPolicyProperties", Name: validation.Null, Rule: false,
70				Chain: []validation.Constraint{{Target: "cdnWebApplicationFirewallPolicy.WebApplicationFirewallPolicyProperties.PolicySettings", Name: validation.Null, Rule: false,
71					Chain: []validation.Constraint{{Target: "cdnWebApplicationFirewallPolicy.WebApplicationFirewallPolicyProperties.PolicySettings.DefaultCustomBlockResponseBody", Name: validation.Null, Rule: false,
72						Chain: []validation.Constraint{{Target: "cdnWebApplicationFirewallPolicy.WebApplicationFirewallPolicyProperties.PolicySettings.DefaultCustomBlockResponseBody", Name: validation.Pattern, Rule: `^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$`, Chain: nil}}},
73					}},
74				}},
75				{Target: "cdnWebApplicationFirewallPolicy.Sku", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
76		return result, validation.NewError("cdn.PoliciesClient", "CreateOrUpdate", err.Error())
77	}
78
79	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, policyName, cdnWebApplicationFirewallPolicy)
80	if err != nil {
81		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "CreateOrUpdate", nil, "Failure preparing request")
82		return
83	}
84
85	result, err = client.CreateOrUpdateSender(req)
86	if err != nil {
87		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "CreateOrUpdate", nil, "Failure sending request")
88		return
89	}
90
91	return
92}
93
94// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
95func (client PoliciesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, policyName string, cdnWebApplicationFirewallPolicy WebApplicationFirewallPolicy) (*http.Request, error) {
96	pathParameters := map[string]interface{}{
97		"policyName":        autorest.Encode("path", policyName),
98		"resourceGroupName": autorest.Encode("path", resourceGroupName),
99		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
100	}
101
102	const APIVersion = "2020-09-01"
103	queryParameters := map[string]interface{}{
104		"api-version": APIVersion,
105	}
106
107	preparer := autorest.CreatePreparer(
108		autorest.AsContentType("application/json; charset=utf-8"),
109		autorest.AsPut(),
110		autorest.WithBaseURL(client.BaseURI),
111		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Cdn/CdnWebApplicationFirewallPolicies/{policyName}", pathParameters),
112		autorest.WithJSON(cdnWebApplicationFirewallPolicy),
113		autorest.WithQueryParameters(queryParameters))
114	return preparer.Prepare((&http.Request{}).WithContext(ctx))
115}
116
117// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
118// http.Response Body if it receives an error.
119func (client PoliciesClient) CreateOrUpdateSender(req *http.Request) (future PoliciesCreateOrUpdateFuture, err error) {
120	var resp *http.Response
121	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
122	if err != nil {
123		return
124	}
125	var azf azure.Future
126	azf, err = azure.NewFutureFromResponse(resp)
127	future.FutureAPI = &azf
128	future.Result = func(client PoliciesClient) (wafp WebApplicationFirewallPolicy, err error) {
129		var done bool
130		done, err = future.DoneWithContext(context.Background(), client)
131		if err != nil {
132			err = autorest.NewErrorWithError(err, "cdn.PoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
133			return
134		}
135		if !done {
136			err = azure.NewAsyncOpIncompleteError("cdn.PoliciesCreateOrUpdateFuture")
137			return
138		}
139		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
140		if wafp.Response.Response, err = future.GetResult(sender); err == nil && wafp.Response.Response.StatusCode != http.StatusNoContent {
141			wafp, err = client.CreateOrUpdateResponder(wafp.Response.Response)
142			if err != nil {
143				err = autorest.NewErrorWithError(err, "cdn.PoliciesCreateOrUpdateFuture", "Result", wafp.Response.Response, "Failure responding to request")
144			}
145		}
146		return
147	}
148	return
149}
150
151// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
152// closes the http.Response Body.
153func (client PoliciesClient) CreateOrUpdateResponder(resp *http.Response) (result WebApplicationFirewallPolicy, err error) {
154	err = autorest.Respond(
155		resp,
156		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted),
157		autorest.ByUnmarshallingJSON(&result),
158		autorest.ByClosing())
159	result.Response = autorest.Response{Response: resp}
160	return
161}
162
163// Delete deletes Policy
164// Parameters:
165// resourceGroupName - name of the Resource group within the Azure subscription.
166// policyName - the name of the CdnWebApplicationFirewallPolicy.
167func (client PoliciesClient) Delete(ctx context.Context, resourceGroupName string, policyName string) (result autorest.Response, err error) {
168	if tracing.IsEnabled() {
169		ctx = tracing.StartSpan(ctx, fqdn+"/PoliciesClient.Delete")
170		defer func() {
171			sc := -1
172			if result.Response != nil {
173				sc = result.Response.StatusCode
174			}
175			tracing.EndSpan(ctx, sc, err)
176		}()
177	}
178	if err := validation.Validate([]validation.Validation{
179		{TargetValue: resourceGroupName,
180			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
181				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
182				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
183		{TargetValue: policyName,
184			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
185		return result, validation.NewError("cdn.PoliciesClient", "Delete", err.Error())
186	}
187
188	req, err := client.DeletePreparer(ctx, resourceGroupName, policyName)
189	if err != nil {
190		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Delete", nil, "Failure preparing request")
191		return
192	}
193
194	resp, err := client.DeleteSender(req)
195	if err != nil {
196		result.Response = resp
197		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Delete", resp, "Failure sending request")
198		return
199	}
200
201	result, err = client.DeleteResponder(resp)
202	if err != nil {
203		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Delete", resp, "Failure responding to request")
204		return
205	}
206
207	return
208}
209
210// DeletePreparer prepares the Delete request.
211func (client PoliciesClient) DeletePreparer(ctx context.Context, resourceGroupName string, policyName string) (*http.Request, error) {
212	pathParameters := map[string]interface{}{
213		"policyName":        autorest.Encode("path", policyName),
214		"resourceGroupName": autorest.Encode("path", resourceGroupName),
215		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
216	}
217
218	const APIVersion = "2020-09-01"
219	queryParameters := map[string]interface{}{
220		"api-version": APIVersion,
221	}
222
223	preparer := autorest.CreatePreparer(
224		autorest.AsDelete(),
225		autorest.WithBaseURL(client.BaseURI),
226		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Cdn/CdnWebApplicationFirewallPolicies/{policyName}", pathParameters),
227		autorest.WithQueryParameters(queryParameters))
228	return preparer.Prepare((&http.Request{}).WithContext(ctx))
229}
230
231// DeleteSender sends the Delete request. The method will close the
232// http.Response Body if it receives an error.
233func (client PoliciesClient) DeleteSender(req *http.Request) (*http.Response, error) {
234	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
235}
236
237// DeleteResponder handles the response to the Delete request. The method always
238// closes the http.Response Body.
239func (client PoliciesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
240	err = autorest.Respond(
241		resp,
242		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent),
243		autorest.ByClosing())
244	result.Response = resp
245	return
246}
247
248// Get retrieve protection policy with specified name within a resource group.
249// Parameters:
250// resourceGroupName - name of the Resource group within the Azure subscription.
251// policyName - the name of the CdnWebApplicationFirewallPolicy.
252func (client PoliciesClient) Get(ctx context.Context, resourceGroupName string, policyName string) (result WebApplicationFirewallPolicy, err error) {
253	if tracing.IsEnabled() {
254		ctx = tracing.StartSpan(ctx, fqdn+"/PoliciesClient.Get")
255		defer func() {
256			sc := -1
257			if result.Response.Response != nil {
258				sc = result.Response.Response.StatusCode
259			}
260			tracing.EndSpan(ctx, sc, err)
261		}()
262	}
263	if err := validation.Validate([]validation.Validation{
264		{TargetValue: resourceGroupName,
265			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
266				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
267				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
268		{TargetValue: policyName,
269			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
270		return result, validation.NewError("cdn.PoliciesClient", "Get", err.Error())
271	}
272
273	req, err := client.GetPreparer(ctx, resourceGroupName, policyName)
274	if err != nil {
275		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Get", nil, "Failure preparing request")
276		return
277	}
278
279	resp, err := client.GetSender(req)
280	if err != nil {
281		result.Response = autorest.Response{Response: resp}
282		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Get", resp, "Failure sending request")
283		return
284	}
285
286	result, err = client.GetResponder(resp)
287	if err != nil {
288		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Get", resp, "Failure responding to request")
289		return
290	}
291
292	return
293}
294
295// GetPreparer prepares the Get request.
296func (client PoliciesClient) GetPreparer(ctx context.Context, resourceGroupName string, policyName string) (*http.Request, error) {
297	pathParameters := map[string]interface{}{
298		"policyName":        autorest.Encode("path", policyName),
299		"resourceGroupName": autorest.Encode("path", resourceGroupName),
300		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
301	}
302
303	const APIVersion = "2020-09-01"
304	queryParameters := map[string]interface{}{
305		"api-version": APIVersion,
306	}
307
308	preparer := autorest.CreatePreparer(
309		autorest.AsGet(),
310		autorest.WithBaseURL(client.BaseURI),
311		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Cdn/CdnWebApplicationFirewallPolicies/{policyName}", pathParameters),
312		autorest.WithQueryParameters(queryParameters))
313	return preparer.Prepare((&http.Request{}).WithContext(ctx))
314}
315
316// GetSender sends the Get request. The method will close the
317// http.Response Body if it receives an error.
318func (client PoliciesClient) GetSender(req *http.Request) (*http.Response, error) {
319	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
320}
321
322// GetResponder handles the response to the Get request. The method always
323// closes the http.Response Body.
324func (client PoliciesClient) GetResponder(resp *http.Response) (result WebApplicationFirewallPolicy, err error) {
325	err = autorest.Respond(
326		resp,
327		azure.WithErrorUnlessStatusCode(http.StatusOK),
328		autorest.ByUnmarshallingJSON(&result),
329		autorest.ByClosing())
330	result.Response = autorest.Response{Response: resp}
331	return
332}
333
334// List lists all of the protection policies within a resource group.
335// Parameters:
336// resourceGroupName - name of the Resource group within the Azure subscription.
337func (client PoliciesClient) List(ctx context.Context, resourceGroupName string) (result WebApplicationFirewallPolicyListPage, err error) {
338	if tracing.IsEnabled() {
339		ctx = tracing.StartSpan(ctx, fqdn+"/PoliciesClient.List")
340		defer func() {
341			sc := -1
342			if result.wafpl.Response.Response != nil {
343				sc = result.wafpl.Response.Response.StatusCode
344			}
345			tracing.EndSpan(ctx, sc, err)
346		}()
347	}
348	if err := validation.Validate([]validation.Validation{
349		{TargetValue: resourceGroupName,
350			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
351				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
352				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}}}); err != nil {
353		return result, validation.NewError("cdn.PoliciesClient", "List", err.Error())
354	}
355
356	result.fn = client.listNextResults
357	req, err := client.ListPreparer(ctx, resourceGroupName)
358	if err != nil {
359		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "List", nil, "Failure preparing request")
360		return
361	}
362
363	resp, err := client.ListSender(req)
364	if err != nil {
365		result.wafpl.Response = autorest.Response{Response: resp}
366		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "List", resp, "Failure sending request")
367		return
368	}
369
370	result.wafpl, err = client.ListResponder(resp)
371	if err != nil {
372		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "List", resp, "Failure responding to request")
373		return
374	}
375	if result.wafpl.hasNextLink() && result.wafpl.IsEmpty() {
376		err = result.NextWithContext(ctx)
377		return
378	}
379
380	return
381}
382
383// ListPreparer prepares the List request.
384func (client PoliciesClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
385	pathParameters := map[string]interface{}{
386		"resourceGroupName": autorest.Encode("path", resourceGroupName),
387		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
388	}
389
390	const APIVersion = "2020-09-01"
391	queryParameters := map[string]interface{}{
392		"api-version": APIVersion,
393	}
394
395	preparer := autorest.CreatePreparer(
396		autorest.AsGet(),
397		autorest.WithBaseURL(client.BaseURI),
398		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Cdn/CdnWebApplicationFirewallPolicies", pathParameters),
399		autorest.WithQueryParameters(queryParameters))
400	return preparer.Prepare((&http.Request{}).WithContext(ctx))
401}
402
403// ListSender sends the List request. The method will close the
404// http.Response Body if it receives an error.
405func (client PoliciesClient) ListSender(req *http.Request) (*http.Response, error) {
406	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
407}
408
409// ListResponder handles the response to the List request. The method always
410// closes the http.Response Body.
411func (client PoliciesClient) ListResponder(resp *http.Response) (result WebApplicationFirewallPolicyList, err error) {
412	err = autorest.Respond(
413		resp,
414		azure.WithErrorUnlessStatusCode(http.StatusOK),
415		autorest.ByUnmarshallingJSON(&result),
416		autorest.ByClosing())
417	result.Response = autorest.Response{Response: resp}
418	return
419}
420
421// listNextResults retrieves the next set of results, if any.
422func (client PoliciesClient) listNextResults(ctx context.Context, lastResults WebApplicationFirewallPolicyList) (result WebApplicationFirewallPolicyList, err error) {
423	req, err := lastResults.webApplicationFirewallPolicyListPreparer(ctx)
424	if err != nil {
425		return result, autorest.NewErrorWithError(err, "cdn.PoliciesClient", "listNextResults", nil, "Failure preparing next results request")
426	}
427	if req == nil {
428		return
429	}
430	resp, err := client.ListSender(req)
431	if err != nil {
432		result.Response = autorest.Response{Response: resp}
433		return result, autorest.NewErrorWithError(err, "cdn.PoliciesClient", "listNextResults", resp, "Failure sending next results request")
434	}
435	result, err = client.ListResponder(resp)
436	if err != nil {
437		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "listNextResults", resp, "Failure responding to next results request")
438	}
439	return
440}
441
442// ListComplete enumerates all values, automatically crossing page boundaries as required.
443func (client PoliciesClient) ListComplete(ctx context.Context, resourceGroupName string) (result WebApplicationFirewallPolicyListIterator, err error) {
444	if tracing.IsEnabled() {
445		ctx = tracing.StartSpan(ctx, fqdn+"/PoliciesClient.List")
446		defer func() {
447			sc := -1
448			if result.Response().Response.Response != nil {
449				sc = result.page.Response().Response.Response.StatusCode
450			}
451			tracing.EndSpan(ctx, sc, err)
452		}()
453	}
454	result.page, err = client.List(ctx, resourceGroupName)
455	return
456}
457
458// Update update an existing CdnWebApplicationFirewallPolicy with the specified policy name under the specified
459// subscription and resource group
460// Parameters:
461// resourceGroupName - name of the Resource group within the Azure subscription.
462// policyName - the name of the CdnWebApplicationFirewallPolicy.
463// cdnWebApplicationFirewallPolicyPatchParameters - cdnWebApplicationFirewallPolicy parameters to be patched.
464func (client PoliciesClient) Update(ctx context.Context, resourceGroupName string, policyName string, cdnWebApplicationFirewallPolicyPatchParameters WebApplicationFirewallPolicyPatchParameters) (result PoliciesUpdateFuture, err error) {
465	if tracing.IsEnabled() {
466		ctx = tracing.StartSpan(ctx, fqdn+"/PoliciesClient.Update")
467		defer func() {
468			sc := -1
469			if result.Response() != nil {
470				sc = result.Response().StatusCode
471			}
472			tracing.EndSpan(ctx, sc, err)
473		}()
474	}
475	if err := validation.Validate([]validation.Validation{
476		{TargetValue: resourceGroupName,
477			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
478				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
479				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
480		{TargetValue: policyName,
481			Constraints: []validation.Constraint{{Target: "policyName", Name: validation.MaxLength, Rule: 128, Chain: nil}}}}); err != nil {
482		return result, validation.NewError("cdn.PoliciesClient", "Update", err.Error())
483	}
484
485	req, err := client.UpdatePreparer(ctx, resourceGroupName, policyName, cdnWebApplicationFirewallPolicyPatchParameters)
486	if err != nil {
487		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Update", nil, "Failure preparing request")
488		return
489	}
490
491	result, err = client.UpdateSender(req)
492	if err != nil {
493		err = autorest.NewErrorWithError(err, "cdn.PoliciesClient", "Update", nil, "Failure sending request")
494		return
495	}
496
497	return
498}
499
500// UpdatePreparer prepares the Update request.
501func (client PoliciesClient) UpdatePreparer(ctx context.Context, resourceGroupName string, policyName string, cdnWebApplicationFirewallPolicyPatchParameters WebApplicationFirewallPolicyPatchParameters) (*http.Request, error) {
502	pathParameters := map[string]interface{}{
503		"policyName":        autorest.Encode("path", policyName),
504		"resourceGroupName": autorest.Encode("path", resourceGroupName),
505		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
506	}
507
508	const APIVersion = "2020-09-01"
509	queryParameters := map[string]interface{}{
510		"api-version": APIVersion,
511	}
512
513	preparer := autorest.CreatePreparer(
514		autorest.AsContentType("application/json; charset=utf-8"),
515		autorest.AsPatch(),
516		autorest.WithBaseURL(client.BaseURI),
517		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Cdn/CdnWebApplicationFirewallPolicies/{policyName}", pathParameters),
518		autorest.WithJSON(cdnWebApplicationFirewallPolicyPatchParameters),
519		autorest.WithQueryParameters(queryParameters))
520	return preparer.Prepare((&http.Request{}).WithContext(ctx))
521}
522
523// UpdateSender sends the Update request. The method will close the
524// http.Response Body if it receives an error.
525func (client PoliciesClient) UpdateSender(req *http.Request) (future PoliciesUpdateFuture, err error) {
526	var resp *http.Response
527	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
528	if err != nil {
529		return
530	}
531	var azf azure.Future
532	azf, err = azure.NewFutureFromResponse(resp)
533	future.FutureAPI = &azf
534	future.Result = func(client PoliciesClient) (wafp WebApplicationFirewallPolicy, err error) {
535		var done bool
536		done, err = future.DoneWithContext(context.Background(), client)
537		if err != nil {
538			err = autorest.NewErrorWithError(err, "cdn.PoliciesUpdateFuture", "Result", future.Response(), "Polling failure")
539			return
540		}
541		if !done {
542			err = azure.NewAsyncOpIncompleteError("cdn.PoliciesUpdateFuture")
543			return
544		}
545		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
546		if wafp.Response.Response, err = future.GetResult(sender); err == nil && wafp.Response.Response.StatusCode != http.StatusNoContent {
547			wafp, err = client.UpdateResponder(wafp.Response.Response)
548			if err != nil {
549				err = autorest.NewErrorWithError(err, "cdn.PoliciesUpdateFuture", "Result", wafp.Response.Response, "Failure responding to request")
550			}
551		}
552		return
553	}
554	return
555}
556
557// UpdateResponder handles the response to the Update request. The method always
558// closes the http.Response Body.
559func (client PoliciesClient) UpdateResponder(resp *http.Response) (result WebApplicationFirewallPolicy, err error) {
560	err = autorest.Respond(
561		resp,
562		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
563		autorest.ByUnmarshallingJSON(&result),
564		autorest.ByClosing())
565	result.Response = autorest.Response{Response: resp}
566	return
567}
568