1package frontdoor
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// FrontDoorsClient is the frontDoor Client
19type FrontDoorsClient struct {
20	BaseClient
21}
22
23// NewFrontDoorsClient creates an instance of the FrontDoorsClient client.
24func NewFrontDoorsClient(subscriptionID string) FrontDoorsClient {
25	return NewFrontDoorsClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewFrontDoorsClientWithBaseURI creates an instance of the FrontDoorsClient client using a custom endpoint.  Use this
29// when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewFrontDoorsClientWithBaseURI(baseURI string, subscriptionID string) FrontDoorsClient {
31	return FrontDoorsClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// CreateOrUpdate creates a new Front Door with a Front Door name under the specified subscription and resource group.
35// Parameters:
36// resourceGroupName - name of the Resource group within the Azure subscription.
37// frontDoorName - name of the Front Door which is globally unique.
38// frontDoorParameters - front Door properties needed to create a new Front Door.
39func (client FrontDoorsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, frontDoorName string, frontDoorParameters FrontDoor) (result FrontDoorsCreateOrUpdateFutureType, err error) {
40	if tracing.IsEnabled() {
41		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.CreateOrUpdate")
42		defer func() {
43			sc := -1
44			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
45				sc = result.FutureAPI.Response().StatusCode
46			}
47			tracing.EndSpan(ctx, sc, err)
48		}()
49	}
50	if err := validation.Validate([]validation.Validation{
51		{TargetValue: resourceGroupName,
52			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
53				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
54				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
55		{TargetValue: frontDoorName,
56			Constraints: []validation.Constraint{{Target: "frontDoorName", Name: validation.MaxLength, Rule: 64, Chain: nil},
57				{Target: "frontDoorName", Name: validation.MinLength, Rule: 5, Chain: nil},
58				{Target: "frontDoorName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9]+([-a-zA-Z0-9]?[a-zA-Z0-9])*$`, Chain: nil}}}}); err != nil {
59		return result, validation.NewError("frontdoor.FrontDoorsClient", "CreateOrUpdate", err.Error())
60	}
61
62	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, frontDoorName, frontDoorParameters)
63	if err != nil {
64		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "CreateOrUpdate", nil, "Failure preparing request")
65		return
66	}
67
68	result, err = client.CreateOrUpdateSender(req)
69	if err != nil {
70		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "CreateOrUpdate", nil, "Failure sending request")
71		return
72	}
73
74	return
75}
76
77// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
78func (client FrontDoorsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, frontDoorName string, frontDoorParameters FrontDoor) (*http.Request, error) {
79	pathParameters := map[string]interface{}{
80		"frontDoorName":     autorest.Encode("path", frontDoorName),
81		"resourceGroupName": autorest.Encode("path", resourceGroupName),
82		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
83	}
84
85	const APIVersion = "2020-05-01"
86	queryParameters := map[string]interface{}{
87		"api-version": APIVersion,
88	}
89
90	preparer := autorest.CreatePreparer(
91		autorest.AsContentType("application/json; charset=utf-8"),
92		autorest.AsPut(),
93		autorest.WithBaseURL(client.BaseURI),
94		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/frontDoors/{frontDoorName}", pathParameters),
95		autorest.WithJSON(frontDoorParameters),
96		autorest.WithQueryParameters(queryParameters))
97	return preparer.Prepare((&http.Request{}).WithContext(ctx))
98}
99
100// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
101// http.Response Body if it receives an error.
102func (client FrontDoorsClient) CreateOrUpdateSender(req *http.Request) (future FrontDoorsCreateOrUpdateFutureType, err error) {
103	var resp *http.Response
104	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
105	if err != nil {
106		return
107	}
108	var azf azure.Future
109	azf, err = azure.NewFutureFromResponse(resp)
110	future.FutureAPI = &azf
111	future.Result = future.result
112	return
113}
114
115// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
116// closes the http.Response Body.
117func (client FrontDoorsClient) CreateOrUpdateResponder(resp *http.Response) (result FrontDoor, err error) {
118	err = autorest.Respond(
119		resp,
120		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted),
121		autorest.ByUnmarshallingJSON(&result),
122		autorest.ByClosing())
123	result.Response = autorest.Response{Response: resp}
124	return
125}
126
127// Delete deletes an existing Front Door with the specified parameters.
128// Parameters:
129// resourceGroupName - name of the Resource group within the Azure subscription.
130// frontDoorName - name of the Front Door which is globally unique.
131func (client FrontDoorsClient) Delete(ctx context.Context, resourceGroupName string, frontDoorName string) (result FrontDoorsDeleteFutureType, err error) {
132	if tracing.IsEnabled() {
133		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.Delete")
134		defer func() {
135			sc := -1
136			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
137				sc = result.FutureAPI.Response().StatusCode
138			}
139			tracing.EndSpan(ctx, sc, err)
140		}()
141	}
142	if err := validation.Validate([]validation.Validation{
143		{TargetValue: resourceGroupName,
144			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
145				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
146				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
147		{TargetValue: frontDoorName,
148			Constraints: []validation.Constraint{{Target: "frontDoorName", Name: validation.MaxLength, Rule: 64, Chain: nil},
149				{Target: "frontDoorName", Name: validation.MinLength, Rule: 5, Chain: nil},
150				{Target: "frontDoorName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9]+([-a-zA-Z0-9]?[a-zA-Z0-9])*$`, Chain: nil}}}}); err != nil {
151		return result, validation.NewError("frontdoor.FrontDoorsClient", "Delete", err.Error())
152	}
153
154	req, err := client.DeletePreparer(ctx, resourceGroupName, frontDoorName)
155	if err != nil {
156		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "Delete", nil, "Failure preparing request")
157		return
158	}
159
160	result, err = client.DeleteSender(req)
161	if err != nil {
162		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "Delete", nil, "Failure sending request")
163		return
164	}
165
166	return
167}
168
169// DeletePreparer prepares the Delete request.
170func (client FrontDoorsClient) DeletePreparer(ctx context.Context, resourceGroupName string, frontDoorName string) (*http.Request, error) {
171	pathParameters := map[string]interface{}{
172		"frontDoorName":     autorest.Encode("path", frontDoorName),
173		"resourceGroupName": autorest.Encode("path", resourceGroupName),
174		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
175	}
176
177	const APIVersion = "2020-05-01"
178	queryParameters := map[string]interface{}{
179		"api-version": APIVersion,
180	}
181
182	preparer := autorest.CreatePreparer(
183		autorest.AsDelete(),
184		autorest.WithBaseURL(client.BaseURI),
185		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/frontDoors/{frontDoorName}", pathParameters),
186		autorest.WithQueryParameters(queryParameters))
187	return preparer.Prepare((&http.Request{}).WithContext(ctx))
188}
189
190// DeleteSender sends the Delete request. The method will close the
191// http.Response Body if it receives an error.
192func (client FrontDoorsClient) DeleteSender(req *http.Request) (future FrontDoorsDeleteFutureType, err error) {
193	var resp *http.Response
194	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
195	if err != nil {
196		return
197	}
198	var azf azure.Future
199	azf, err = azure.NewFutureFromResponse(resp)
200	future.FutureAPI = &azf
201	future.Result = future.result
202	return
203}
204
205// DeleteResponder handles the response to the Delete request. The method always
206// closes the http.Response Body.
207func (client FrontDoorsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
208	err = autorest.Respond(
209		resp,
210		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
211		autorest.ByClosing())
212	result.Response = resp
213	return
214}
215
216// Get gets a Front Door with the specified Front Door name under the specified subscription and resource group.
217// Parameters:
218// resourceGroupName - name of the Resource group within the Azure subscription.
219// frontDoorName - name of the Front Door which is globally unique.
220func (client FrontDoorsClient) Get(ctx context.Context, resourceGroupName string, frontDoorName string) (result FrontDoor, err error) {
221	if tracing.IsEnabled() {
222		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.Get")
223		defer func() {
224			sc := -1
225			if result.Response.Response != nil {
226				sc = result.Response.Response.StatusCode
227			}
228			tracing.EndSpan(ctx, sc, err)
229		}()
230	}
231	if err := validation.Validate([]validation.Validation{
232		{TargetValue: resourceGroupName,
233			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
234				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
235				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
236		{TargetValue: frontDoorName,
237			Constraints: []validation.Constraint{{Target: "frontDoorName", Name: validation.MaxLength, Rule: 64, Chain: nil},
238				{Target: "frontDoorName", Name: validation.MinLength, Rule: 5, Chain: nil},
239				{Target: "frontDoorName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9]+([-a-zA-Z0-9]?[a-zA-Z0-9])*$`, Chain: nil}}}}); err != nil {
240		return result, validation.NewError("frontdoor.FrontDoorsClient", "Get", err.Error())
241	}
242
243	req, err := client.GetPreparer(ctx, resourceGroupName, frontDoorName)
244	if err != nil {
245		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "Get", nil, "Failure preparing request")
246		return
247	}
248
249	resp, err := client.GetSender(req)
250	if err != nil {
251		result.Response = autorest.Response{Response: resp}
252		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "Get", resp, "Failure sending request")
253		return
254	}
255
256	result, err = client.GetResponder(resp)
257	if err != nil {
258		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "Get", resp, "Failure responding to request")
259		return
260	}
261
262	return
263}
264
265// GetPreparer prepares the Get request.
266func (client FrontDoorsClient) GetPreparer(ctx context.Context, resourceGroupName string, frontDoorName string) (*http.Request, error) {
267	pathParameters := map[string]interface{}{
268		"frontDoorName":     autorest.Encode("path", frontDoorName),
269		"resourceGroupName": autorest.Encode("path", resourceGroupName),
270		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
271	}
272
273	const APIVersion = "2020-05-01"
274	queryParameters := map[string]interface{}{
275		"api-version": APIVersion,
276	}
277
278	preparer := autorest.CreatePreparer(
279		autorest.AsGet(),
280		autorest.WithBaseURL(client.BaseURI),
281		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/frontDoors/{frontDoorName}", pathParameters),
282		autorest.WithQueryParameters(queryParameters))
283	return preparer.Prepare((&http.Request{}).WithContext(ctx))
284}
285
286// GetSender sends the Get request. The method will close the
287// http.Response Body if it receives an error.
288func (client FrontDoorsClient) GetSender(req *http.Request) (*http.Response, error) {
289	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
290}
291
292// GetResponder handles the response to the Get request. The method always
293// closes the http.Response Body.
294func (client FrontDoorsClient) GetResponder(resp *http.Response) (result FrontDoor, err error) {
295	err = autorest.Respond(
296		resp,
297		azure.WithErrorUnlessStatusCode(http.StatusOK),
298		autorest.ByUnmarshallingJSON(&result),
299		autorest.ByClosing())
300	result.Response = autorest.Response{Response: resp}
301	return
302}
303
304// List lists all of the Front Doors within an Azure subscription.
305func (client FrontDoorsClient) List(ctx context.Context) (result ListResultPage, err error) {
306	if tracing.IsEnabled() {
307		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.List")
308		defer func() {
309			sc := -1
310			if result.lr.Response.Response != nil {
311				sc = result.lr.Response.Response.StatusCode
312			}
313			tracing.EndSpan(ctx, sc, err)
314		}()
315	}
316	result.fn = client.listNextResults
317	req, err := client.ListPreparer(ctx)
318	if err != nil {
319		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "List", nil, "Failure preparing request")
320		return
321	}
322
323	resp, err := client.ListSender(req)
324	if err != nil {
325		result.lr.Response = autorest.Response{Response: resp}
326		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "List", resp, "Failure sending request")
327		return
328	}
329
330	result.lr, err = client.ListResponder(resp)
331	if err != nil {
332		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "List", resp, "Failure responding to request")
333		return
334	}
335	if result.lr.hasNextLink() && result.lr.IsEmpty() {
336		err = result.NextWithContext(ctx)
337		return
338	}
339
340	return
341}
342
343// ListPreparer prepares the List request.
344func (client FrontDoorsClient) ListPreparer(ctx context.Context) (*http.Request, error) {
345	pathParameters := map[string]interface{}{
346		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
347	}
348
349	const APIVersion = "2020-05-01"
350	queryParameters := map[string]interface{}{
351		"api-version": APIVersion,
352	}
353
354	preparer := autorest.CreatePreparer(
355		autorest.AsGet(),
356		autorest.WithBaseURL(client.BaseURI),
357		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/frontDoors", pathParameters),
358		autorest.WithQueryParameters(queryParameters))
359	return preparer.Prepare((&http.Request{}).WithContext(ctx))
360}
361
362// ListSender sends the List request. The method will close the
363// http.Response Body if it receives an error.
364func (client FrontDoorsClient) ListSender(req *http.Request) (*http.Response, error) {
365	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
366}
367
368// ListResponder handles the response to the List request. The method always
369// closes the http.Response Body.
370func (client FrontDoorsClient) ListResponder(resp *http.Response) (result ListResult, err error) {
371	err = autorest.Respond(
372		resp,
373		azure.WithErrorUnlessStatusCode(http.StatusOK),
374		autorest.ByUnmarshallingJSON(&result),
375		autorest.ByClosing())
376	result.Response = autorest.Response{Response: resp}
377	return
378}
379
380// listNextResults retrieves the next set of results, if any.
381func (client FrontDoorsClient) listNextResults(ctx context.Context, lastResults ListResult) (result ListResult, err error) {
382	req, err := lastResults.listResultPreparer(ctx)
383	if err != nil {
384		return result, autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "listNextResults", nil, "Failure preparing next results request")
385	}
386	if req == nil {
387		return
388	}
389	resp, err := client.ListSender(req)
390	if err != nil {
391		result.Response = autorest.Response{Response: resp}
392		return result, autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "listNextResults", resp, "Failure sending next results request")
393	}
394	result, err = client.ListResponder(resp)
395	if err != nil {
396		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "listNextResults", resp, "Failure responding to next results request")
397	}
398	return
399}
400
401// ListComplete enumerates all values, automatically crossing page boundaries as required.
402func (client FrontDoorsClient) ListComplete(ctx context.Context) (result ListResultIterator, err error) {
403	if tracing.IsEnabled() {
404		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.List")
405		defer func() {
406			sc := -1
407			if result.Response().Response.Response != nil {
408				sc = result.page.Response().Response.Response.StatusCode
409			}
410			tracing.EndSpan(ctx, sc, err)
411		}()
412	}
413	result.page, err = client.List(ctx)
414	return
415}
416
417// ListByResourceGroup lists all of the Front Doors within a resource group under a subscription.
418// Parameters:
419// resourceGroupName - name of the Resource group within the Azure subscription.
420func (client FrontDoorsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ListResultPage, err error) {
421	if tracing.IsEnabled() {
422		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.ListByResourceGroup")
423		defer func() {
424			sc := -1
425			if result.lr.Response.Response != nil {
426				sc = result.lr.Response.Response.StatusCode
427			}
428			tracing.EndSpan(ctx, sc, err)
429		}()
430	}
431	if err := validation.Validate([]validation.Validation{
432		{TargetValue: resourceGroupName,
433			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
434				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
435				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}}}); err != nil {
436		return result, validation.NewError("frontdoor.FrontDoorsClient", "ListByResourceGroup", err.Error())
437	}
438
439	result.fn = client.listByResourceGroupNextResults
440	req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName)
441	if err != nil {
442		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "ListByResourceGroup", nil, "Failure preparing request")
443		return
444	}
445
446	resp, err := client.ListByResourceGroupSender(req)
447	if err != nil {
448		result.lr.Response = autorest.Response{Response: resp}
449		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "ListByResourceGroup", resp, "Failure sending request")
450		return
451	}
452
453	result.lr, err = client.ListByResourceGroupResponder(resp)
454	if err != nil {
455		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "ListByResourceGroup", resp, "Failure responding to request")
456		return
457	}
458	if result.lr.hasNextLink() && result.lr.IsEmpty() {
459		err = result.NextWithContext(ctx)
460		return
461	}
462
463	return
464}
465
466// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
467func (client FrontDoorsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
468	pathParameters := map[string]interface{}{
469		"resourceGroupName": autorest.Encode("path", resourceGroupName),
470		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
471	}
472
473	const APIVersion = "2020-05-01"
474	queryParameters := map[string]interface{}{
475		"api-version": APIVersion,
476	}
477
478	preparer := autorest.CreatePreparer(
479		autorest.AsGet(),
480		autorest.WithBaseURL(client.BaseURI),
481		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/frontDoors", pathParameters),
482		autorest.WithQueryParameters(queryParameters))
483	return preparer.Prepare((&http.Request{}).WithContext(ctx))
484}
485
486// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
487// http.Response Body if it receives an error.
488func (client FrontDoorsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
489	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
490}
491
492// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
493// closes the http.Response Body.
494func (client FrontDoorsClient) ListByResourceGroupResponder(resp *http.Response) (result ListResult, err error) {
495	err = autorest.Respond(
496		resp,
497		azure.WithErrorUnlessStatusCode(http.StatusOK),
498		autorest.ByUnmarshallingJSON(&result),
499		autorest.ByClosing())
500	result.Response = autorest.Response{Response: resp}
501	return
502}
503
504// listByResourceGroupNextResults retrieves the next set of results, if any.
505func (client FrontDoorsClient) listByResourceGroupNextResults(ctx context.Context, lastResults ListResult) (result ListResult, err error) {
506	req, err := lastResults.listResultPreparer(ctx)
507	if err != nil {
508		return result, autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request")
509	}
510	if req == nil {
511		return
512	}
513	resp, err := client.ListByResourceGroupSender(req)
514	if err != nil {
515		result.Response = autorest.Response{Response: resp}
516		return result, autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request")
517	}
518	result, err = client.ListByResourceGroupResponder(resp)
519	if err != nil {
520		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request")
521	}
522	return
523}
524
525// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required.
526func (client FrontDoorsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ListResultIterator, err error) {
527	if tracing.IsEnabled() {
528		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.ListByResourceGroup")
529		defer func() {
530			sc := -1
531			if result.Response().Response.Response != nil {
532				sc = result.page.Response().Response.Response.StatusCode
533			}
534			tracing.EndSpan(ctx, sc, err)
535		}()
536	}
537	result.page, err = client.ListByResourceGroup(ctx, resourceGroupName)
538	return
539}
540
541// ValidateCustomDomain validates the custom domain mapping to ensure it maps to the correct Front Door endpoint in
542// DNS.
543// Parameters:
544// resourceGroupName - name of the Resource group within the Azure subscription.
545// frontDoorName - name of the Front Door which is globally unique.
546// customDomainProperties - custom domain to be validated.
547func (client FrontDoorsClient) ValidateCustomDomain(ctx context.Context, resourceGroupName string, frontDoorName string, customDomainProperties ValidateCustomDomainInput) (result ValidateCustomDomainOutput, err error) {
548	if tracing.IsEnabled() {
549		ctx = tracing.StartSpan(ctx, fqdn+"/FrontDoorsClient.ValidateCustomDomain")
550		defer func() {
551			sc := -1
552			if result.Response.Response != nil {
553				sc = result.Response.Response.StatusCode
554			}
555			tracing.EndSpan(ctx, sc, err)
556		}()
557	}
558	if err := validation.Validate([]validation.Validation{
559		{TargetValue: resourceGroupName,
560			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 80, Chain: nil},
561				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
562				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9_\-\(\)\.]*[^\.]$`, Chain: nil}}},
563		{TargetValue: frontDoorName,
564			Constraints: []validation.Constraint{{Target: "frontDoorName", Name: validation.MaxLength, Rule: 64, Chain: nil},
565				{Target: "frontDoorName", Name: validation.MinLength, Rule: 5, Chain: nil},
566				{Target: "frontDoorName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9]+([-a-zA-Z0-9]?[a-zA-Z0-9])*$`, Chain: nil}}},
567		{TargetValue: customDomainProperties,
568			Constraints: []validation.Constraint{{Target: "customDomainProperties.HostName", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
569		return result, validation.NewError("frontdoor.FrontDoorsClient", "ValidateCustomDomain", err.Error())
570	}
571
572	req, err := client.ValidateCustomDomainPreparer(ctx, resourceGroupName, frontDoorName, customDomainProperties)
573	if err != nil {
574		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "ValidateCustomDomain", nil, "Failure preparing request")
575		return
576	}
577
578	resp, err := client.ValidateCustomDomainSender(req)
579	if err != nil {
580		result.Response = autorest.Response{Response: resp}
581		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "ValidateCustomDomain", resp, "Failure sending request")
582		return
583	}
584
585	result, err = client.ValidateCustomDomainResponder(resp)
586	if err != nil {
587		err = autorest.NewErrorWithError(err, "frontdoor.FrontDoorsClient", "ValidateCustomDomain", resp, "Failure responding to request")
588		return
589	}
590
591	return
592}
593
594// ValidateCustomDomainPreparer prepares the ValidateCustomDomain request.
595func (client FrontDoorsClient) ValidateCustomDomainPreparer(ctx context.Context, resourceGroupName string, frontDoorName string, customDomainProperties ValidateCustomDomainInput) (*http.Request, error) {
596	pathParameters := map[string]interface{}{
597		"frontDoorName":     autorest.Encode("path", frontDoorName),
598		"resourceGroupName": autorest.Encode("path", resourceGroupName),
599		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
600	}
601
602	const APIVersion = "2020-05-01"
603	queryParameters := map[string]interface{}{
604		"api-version": APIVersion,
605	}
606
607	preparer := autorest.CreatePreparer(
608		autorest.AsContentType("application/json; charset=utf-8"),
609		autorest.AsPost(),
610		autorest.WithBaseURL(client.BaseURI),
611		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/frontDoors/{frontDoorName}/validateCustomDomain", pathParameters),
612		autorest.WithJSON(customDomainProperties),
613		autorest.WithQueryParameters(queryParameters))
614	return preparer.Prepare((&http.Request{}).WithContext(ctx))
615}
616
617// ValidateCustomDomainSender sends the ValidateCustomDomain request. The method will close the
618// http.Response Body if it receives an error.
619func (client FrontDoorsClient) ValidateCustomDomainSender(req *http.Request) (*http.Response, error) {
620	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
621}
622
623// ValidateCustomDomainResponder handles the response to the ValidateCustomDomain request. The method always
624// closes the http.Response Body.
625func (client FrontDoorsClient) ValidateCustomDomainResponder(resp *http.Response) (result ValidateCustomDomainOutput, err error) {
626	err = autorest.Respond(
627		resp,
628		azure.WithErrorUnlessStatusCode(http.StatusOK),
629		autorest.ByUnmarshallingJSON(&result),
630		autorest.ByClosing())
631	result.Response = autorest.Response{Response: resp}
632	return
633}
634