1package sql
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// InstanceFailoverGroupsClient is the the Azure SQL Database management API provides a RESTful set of web services
19// that interact with Azure SQL Database services to manage your databases. The API enables you to create, retrieve,
20// update, and delete databases.
21type InstanceFailoverGroupsClient struct {
22	BaseClient
23}
24
25// NewInstanceFailoverGroupsClient creates an instance of the InstanceFailoverGroupsClient client.
26func NewInstanceFailoverGroupsClient(subscriptionID string) InstanceFailoverGroupsClient {
27	return NewInstanceFailoverGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID)
28}
29
30// NewInstanceFailoverGroupsClientWithBaseURI creates an instance of the InstanceFailoverGroupsClient client using a
31// custom endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds,
32// Azure stack).
33func NewInstanceFailoverGroupsClientWithBaseURI(baseURI string, subscriptionID string) InstanceFailoverGroupsClient {
34	return InstanceFailoverGroupsClient{NewWithBaseURI(baseURI, subscriptionID)}
35}
36
37// CreateOrUpdate creates or updates a failover group.
38// Parameters:
39// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
40// from the Azure Resource Manager API or the portal.
41// locationName - the name of the region where the resource is located.
42// failoverGroupName - the name of the failover group.
43// parameters - the failover group parameters.
44func (client InstanceFailoverGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string, parameters InstanceFailoverGroup) (result InstanceFailoverGroupsCreateOrUpdateFuture, err error) {
45	if tracing.IsEnabled() {
46		ctx = tracing.StartSpan(ctx, fqdn+"/InstanceFailoverGroupsClient.CreateOrUpdate")
47		defer func() {
48			sc := -1
49			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
50				sc = result.FutureAPI.Response().StatusCode
51			}
52			tracing.EndSpan(ctx, sc, err)
53		}()
54	}
55	if err := validation.Validate([]validation.Validation{
56		{TargetValue: parameters,
57			Constraints: []validation.Constraint{{Target: "parameters.InstanceFailoverGroupProperties", Name: validation.Null, Rule: false,
58				Chain: []validation.Constraint{{Target: "parameters.InstanceFailoverGroupProperties.ReadWriteEndpoint", Name: validation.Null, Rule: true, Chain: nil},
59					{Target: "parameters.InstanceFailoverGroupProperties.PartnerRegions", Name: validation.Null, Rule: true, Chain: nil},
60					{Target: "parameters.InstanceFailoverGroupProperties.ManagedInstancePairs", Name: validation.Null, Rule: true, Chain: nil},
61				}}}}}); err != nil {
62		return result, validation.NewError("sql.InstanceFailoverGroupsClient", "CreateOrUpdate", err.Error())
63	}
64
65	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, locationName, failoverGroupName, parameters)
66	if err != nil {
67		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "CreateOrUpdate", nil, "Failure preparing request")
68		return
69	}
70
71	result, err = client.CreateOrUpdateSender(req)
72	if err != nil {
73		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "CreateOrUpdate", nil, "Failure sending request")
74		return
75	}
76
77	return
78}
79
80// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
81func (client InstanceFailoverGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string, parameters InstanceFailoverGroup) (*http.Request, error) {
82	pathParameters := map[string]interface{}{
83		"failoverGroupName": autorest.Encode("path", failoverGroupName),
84		"locationName":      autorest.Encode("path", locationName),
85		"resourceGroupName": autorest.Encode("path", resourceGroupName),
86		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
87	}
88
89	const APIVersion = "2020-11-01-preview"
90	queryParameters := map[string]interface{}{
91		"api-version": APIVersion,
92	}
93
94	preparer := autorest.CreatePreparer(
95		autorest.AsContentType("application/json; charset=utf-8"),
96		autorest.AsPut(),
97		autorest.WithBaseURL(client.BaseURI),
98		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/locations/{locationName}/instanceFailoverGroups/{failoverGroupName}", pathParameters),
99		autorest.WithJSON(parameters),
100		autorest.WithQueryParameters(queryParameters))
101	return preparer.Prepare((&http.Request{}).WithContext(ctx))
102}
103
104// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
105// http.Response Body if it receives an error.
106func (client InstanceFailoverGroupsClient) CreateOrUpdateSender(req *http.Request) (future InstanceFailoverGroupsCreateOrUpdateFuture, err error) {
107	var resp *http.Response
108	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
109	if err != nil {
110		return
111	}
112	var azf azure.Future
113	azf, err = azure.NewFutureFromResponse(resp)
114	future.FutureAPI = &azf
115	future.Result = future.result
116	return
117}
118
119// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
120// closes the http.Response Body.
121func (client InstanceFailoverGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result InstanceFailoverGroup, err error) {
122	err = autorest.Respond(
123		resp,
124		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated, http.StatusAccepted),
125		autorest.ByUnmarshallingJSON(&result),
126		autorest.ByClosing())
127	result.Response = autorest.Response{Response: resp}
128	return
129}
130
131// Delete deletes a failover group.
132// Parameters:
133// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
134// from the Azure Resource Manager API or the portal.
135// locationName - the name of the region where the resource is located.
136// failoverGroupName - the name of the failover group.
137func (client InstanceFailoverGroupsClient) Delete(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (result InstanceFailoverGroupsDeleteFuture, err error) {
138	if tracing.IsEnabled() {
139		ctx = tracing.StartSpan(ctx, fqdn+"/InstanceFailoverGroupsClient.Delete")
140		defer func() {
141			sc := -1
142			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
143				sc = result.FutureAPI.Response().StatusCode
144			}
145			tracing.EndSpan(ctx, sc, err)
146		}()
147	}
148	req, err := client.DeletePreparer(ctx, resourceGroupName, locationName, failoverGroupName)
149	if err != nil {
150		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "Delete", nil, "Failure preparing request")
151		return
152	}
153
154	result, err = client.DeleteSender(req)
155	if err != nil {
156		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "Delete", nil, "Failure sending request")
157		return
158	}
159
160	return
161}
162
163// DeletePreparer prepares the Delete request.
164func (client InstanceFailoverGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (*http.Request, error) {
165	pathParameters := map[string]interface{}{
166		"failoverGroupName": autorest.Encode("path", failoverGroupName),
167		"locationName":      autorest.Encode("path", locationName),
168		"resourceGroupName": autorest.Encode("path", resourceGroupName),
169		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
170	}
171
172	const APIVersion = "2020-11-01-preview"
173	queryParameters := map[string]interface{}{
174		"api-version": APIVersion,
175	}
176
177	preparer := autorest.CreatePreparer(
178		autorest.AsDelete(),
179		autorest.WithBaseURL(client.BaseURI),
180		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/locations/{locationName}/instanceFailoverGroups/{failoverGroupName}", pathParameters),
181		autorest.WithQueryParameters(queryParameters))
182	return preparer.Prepare((&http.Request{}).WithContext(ctx))
183}
184
185// DeleteSender sends the Delete request. The method will close the
186// http.Response Body if it receives an error.
187func (client InstanceFailoverGroupsClient) DeleteSender(req *http.Request) (future InstanceFailoverGroupsDeleteFuture, err error) {
188	var resp *http.Response
189	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
190	if err != nil {
191		return
192	}
193	var azf azure.Future
194	azf, err = azure.NewFutureFromResponse(resp)
195	future.FutureAPI = &azf
196	future.Result = future.result
197	return
198}
199
200// DeleteResponder handles the response to the Delete request. The method always
201// closes the http.Response Body.
202func (client InstanceFailoverGroupsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
203	err = autorest.Respond(
204		resp,
205		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
206		autorest.ByClosing())
207	result.Response = resp
208	return
209}
210
211// Failover fails over from the current primary managed instance to this managed instance.
212// Parameters:
213// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
214// from the Azure Resource Manager API or the portal.
215// locationName - the name of the region where the resource is located.
216// failoverGroupName - the name of the failover group.
217func (client InstanceFailoverGroupsClient) Failover(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (result InstanceFailoverGroupsFailoverFuture, err error) {
218	if tracing.IsEnabled() {
219		ctx = tracing.StartSpan(ctx, fqdn+"/InstanceFailoverGroupsClient.Failover")
220		defer func() {
221			sc := -1
222			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
223				sc = result.FutureAPI.Response().StatusCode
224			}
225			tracing.EndSpan(ctx, sc, err)
226		}()
227	}
228	req, err := client.FailoverPreparer(ctx, resourceGroupName, locationName, failoverGroupName)
229	if err != nil {
230		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "Failover", nil, "Failure preparing request")
231		return
232	}
233
234	result, err = client.FailoverSender(req)
235	if err != nil {
236		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "Failover", nil, "Failure sending request")
237		return
238	}
239
240	return
241}
242
243// FailoverPreparer prepares the Failover request.
244func (client InstanceFailoverGroupsClient) FailoverPreparer(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (*http.Request, error) {
245	pathParameters := map[string]interface{}{
246		"failoverGroupName": autorest.Encode("path", failoverGroupName),
247		"locationName":      autorest.Encode("path", locationName),
248		"resourceGroupName": autorest.Encode("path", resourceGroupName),
249		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
250	}
251
252	const APIVersion = "2020-11-01-preview"
253	queryParameters := map[string]interface{}{
254		"api-version": APIVersion,
255	}
256
257	preparer := autorest.CreatePreparer(
258		autorest.AsPost(),
259		autorest.WithBaseURL(client.BaseURI),
260		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/locations/{locationName}/instanceFailoverGroups/{failoverGroupName}/failover", pathParameters),
261		autorest.WithQueryParameters(queryParameters))
262	return preparer.Prepare((&http.Request{}).WithContext(ctx))
263}
264
265// FailoverSender sends the Failover request. The method will close the
266// http.Response Body if it receives an error.
267func (client InstanceFailoverGroupsClient) FailoverSender(req *http.Request) (future InstanceFailoverGroupsFailoverFuture, err error) {
268	var resp *http.Response
269	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
270	if err != nil {
271		return
272	}
273	var azf azure.Future
274	azf, err = azure.NewFutureFromResponse(resp)
275	future.FutureAPI = &azf
276	future.Result = future.result
277	return
278}
279
280// FailoverResponder handles the response to the Failover request. The method always
281// closes the http.Response Body.
282func (client InstanceFailoverGroupsClient) FailoverResponder(resp *http.Response) (result InstanceFailoverGroup, err error) {
283	err = autorest.Respond(
284		resp,
285		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
286		autorest.ByUnmarshallingJSON(&result),
287		autorest.ByClosing())
288	result.Response = autorest.Response{Response: resp}
289	return
290}
291
292// ForceFailoverAllowDataLoss fails over from the current primary managed instance to this managed instance. This
293// operation might result in data loss.
294// Parameters:
295// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
296// from the Azure Resource Manager API or the portal.
297// locationName - the name of the region where the resource is located.
298// failoverGroupName - the name of the failover group.
299func (client InstanceFailoverGroupsClient) ForceFailoverAllowDataLoss(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (result InstanceFailoverGroupsForceFailoverAllowDataLossFuture, err error) {
300	if tracing.IsEnabled() {
301		ctx = tracing.StartSpan(ctx, fqdn+"/InstanceFailoverGroupsClient.ForceFailoverAllowDataLoss")
302		defer func() {
303			sc := -1
304			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
305				sc = result.FutureAPI.Response().StatusCode
306			}
307			tracing.EndSpan(ctx, sc, err)
308		}()
309	}
310	req, err := client.ForceFailoverAllowDataLossPreparer(ctx, resourceGroupName, locationName, failoverGroupName)
311	if err != nil {
312		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "ForceFailoverAllowDataLoss", nil, "Failure preparing request")
313		return
314	}
315
316	result, err = client.ForceFailoverAllowDataLossSender(req)
317	if err != nil {
318		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "ForceFailoverAllowDataLoss", nil, "Failure sending request")
319		return
320	}
321
322	return
323}
324
325// ForceFailoverAllowDataLossPreparer prepares the ForceFailoverAllowDataLoss request.
326func (client InstanceFailoverGroupsClient) ForceFailoverAllowDataLossPreparer(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (*http.Request, error) {
327	pathParameters := map[string]interface{}{
328		"failoverGroupName": autorest.Encode("path", failoverGroupName),
329		"locationName":      autorest.Encode("path", locationName),
330		"resourceGroupName": autorest.Encode("path", resourceGroupName),
331		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
332	}
333
334	const APIVersion = "2020-11-01-preview"
335	queryParameters := map[string]interface{}{
336		"api-version": APIVersion,
337	}
338
339	preparer := autorest.CreatePreparer(
340		autorest.AsPost(),
341		autorest.WithBaseURL(client.BaseURI),
342		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/locations/{locationName}/instanceFailoverGroups/{failoverGroupName}/forceFailoverAllowDataLoss", pathParameters),
343		autorest.WithQueryParameters(queryParameters))
344	return preparer.Prepare((&http.Request{}).WithContext(ctx))
345}
346
347// ForceFailoverAllowDataLossSender sends the ForceFailoverAllowDataLoss request. The method will close the
348// http.Response Body if it receives an error.
349func (client InstanceFailoverGroupsClient) ForceFailoverAllowDataLossSender(req *http.Request) (future InstanceFailoverGroupsForceFailoverAllowDataLossFuture, err error) {
350	var resp *http.Response
351	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
352	if err != nil {
353		return
354	}
355	var azf azure.Future
356	azf, err = azure.NewFutureFromResponse(resp)
357	future.FutureAPI = &azf
358	future.Result = future.result
359	return
360}
361
362// ForceFailoverAllowDataLossResponder handles the response to the ForceFailoverAllowDataLoss request. The method always
363// closes the http.Response Body.
364func (client InstanceFailoverGroupsClient) ForceFailoverAllowDataLossResponder(resp *http.Response) (result InstanceFailoverGroup, err error) {
365	err = autorest.Respond(
366		resp,
367		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
368		autorest.ByUnmarshallingJSON(&result),
369		autorest.ByClosing())
370	result.Response = autorest.Response{Response: resp}
371	return
372}
373
374// Get gets a failover group.
375// Parameters:
376// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
377// from the Azure Resource Manager API or the portal.
378// locationName - the name of the region where the resource is located.
379// failoverGroupName - the name of the failover group.
380func (client InstanceFailoverGroupsClient) Get(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (result InstanceFailoverGroup, err error) {
381	if tracing.IsEnabled() {
382		ctx = tracing.StartSpan(ctx, fqdn+"/InstanceFailoverGroupsClient.Get")
383		defer func() {
384			sc := -1
385			if result.Response.Response != nil {
386				sc = result.Response.Response.StatusCode
387			}
388			tracing.EndSpan(ctx, sc, err)
389		}()
390	}
391	req, err := client.GetPreparer(ctx, resourceGroupName, locationName, failoverGroupName)
392	if err != nil {
393		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "Get", nil, "Failure preparing request")
394		return
395	}
396
397	resp, err := client.GetSender(req)
398	if err != nil {
399		result.Response = autorest.Response{Response: resp}
400		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "Get", resp, "Failure sending request")
401		return
402	}
403
404	result, err = client.GetResponder(resp)
405	if err != nil {
406		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "Get", resp, "Failure responding to request")
407		return
408	}
409
410	return
411}
412
413// GetPreparer prepares the Get request.
414func (client InstanceFailoverGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, locationName string, failoverGroupName string) (*http.Request, error) {
415	pathParameters := map[string]interface{}{
416		"failoverGroupName": autorest.Encode("path", failoverGroupName),
417		"locationName":      autorest.Encode("path", locationName),
418		"resourceGroupName": autorest.Encode("path", resourceGroupName),
419		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
420	}
421
422	const APIVersion = "2020-11-01-preview"
423	queryParameters := map[string]interface{}{
424		"api-version": APIVersion,
425	}
426
427	preparer := autorest.CreatePreparer(
428		autorest.AsGet(),
429		autorest.WithBaseURL(client.BaseURI),
430		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/locations/{locationName}/instanceFailoverGroups/{failoverGroupName}", pathParameters),
431		autorest.WithQueryParameters(queryParameters))
432	return preparer.Prepare((&http.Request{}).WithContext(ctx))
433}
434
435// GetSender sends the Get request. The method will close the
436// http.Response Body if it receives an error.
437func (client InstanceFailoverGroupsClient) GetSender(req *http.Request) (*http.Response, error) {
438	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
439}
440
441// GetResponder handles the response to the Get request. The method always
442// closes the http.Response Body.
443func (client InstanceFailoverGroupsClient) GetResponder(resp *http.Response) (result InstanceFailoverGroup, err error) {
444	err = autorest.Respond(
445		resp,
446		azure.WithErrorUnlessStatusCode(http.StatusOK),
447		autorest.ByUnmarshallingJSON(&result),
448		autorest.ByClosing())
449	result.Response = autorest.Response{Response: resp}
450	return
451}
452
453// ListByLocation lists the failover groups in a location.
454// Parameters:
455// resourceGroupName - the name of the resource group that contains the resource. You can obtain this value
456// from the Azure Resource Manager API or the portal.
457// locationName - the name of the region where the resource is located.
458func (client InstanceFailoverGroupsClient) ListByLocation(ctx context.Context, resourceGroupName string, locationName string) (result InstanceFailoverGroupListResultPage, err error) {
459	if tracing.IsEnabled() {
460		ctx = tracing.StartSpan(ctx, fqdn+"/InstanceFailoverGroupsClient.ListByLocation")
461		defer func() {
462			sc := -1
463			if result.ifglr.Response.Response != nil {
464				sc = result.ifglr.Response.Response.StatusCode
465			}
466			tracing.EndSpan(ctx, sc, err)
467		}()
468	}
469	result.fn = client.listByLocationNextResults
470	req, err := client.ListByLocationPreparer(ctx, resourceGroupName, locationName)
471	if err != nil {
472		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "ListByLocation", nil, "Failure preparing request")
473		return
474	}
475
476	resp, err := client.ListByLocationSender(req)
477	if err != nil {
478		result.ifglr.Response = autorest.Response{Response: resp}
479		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "ListByLocation", resp, "Failure sending request")
480		return
481	}
482
483	result.ifglr, err = client.ListByLocationResponder(resp)
484	if err != nil {
485		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "ListByLocation", resp, "Failure responding to request")
486		return
487	}
488	if result.ifglr.hasNextLink() && result.ifglr.IsEmpty() {
489		err = result.NextWithContext(ctx)
490		return
491	}
492
493	return
494}
495
496// ListByLocationPreparer prepares the ListByLocation request.
497func (client InstanceFailoverGroupsClient) ListByLocationPreparer(ctx context.Context, resourceGroupName string, locationName string) (*http.Request, error) {
498	pathParameters := map[string]interface{}{
499		"locationName":      autorest.Encode("path", locationName),
500		"resourceGroupName": autorest.Encode("path", resourceGroupName),
501		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
502	}
503
504	const APIVersion = "2020-11-01-preview"
505	queryParameters := map[string]interface{}{
506		"api-version": APIVersion,
507	}
508
509	preparer := autorest.CreatePreparer(
510		autorest.AsGet(),
511		autorest.WithBaseURL(client.BaseURI),
512		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/locations/{locationName}/instanceFailoverGroups", pathParameters),
513		autorest.WithQueryParameters(queryParameters))
514	return preparer.Prepare((&http.Request{}).WithContext(ctx))
515}
516
517// ListByLocationSender sends the ListByLocation request. The method will close the
518// http.Response Body if it receives an error.
519func (client InstanceFailoverGroupsClient) ListByLocationSender(req *http.Request) (*http.Response, error) {
520	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
521}
522
523// ListByLocationResponder handles the response to the ListByLocation request. The method always
524// closes the http.Response Body.
525func (client InstanceFailoverGroupsClient) ListByLocationResponder(resp *http.Response) (result InstanceFailoverGroupListResult, err error) {
526	err = autorest.Respond(
527		resp,
528		azure.WithErrorUnlessStatusCode(http.StatusOK),
529		autorest.ByUnmarshallingJSON(&result),
530		autorest.ByClosing())
531	result.Response = autorest.Response{Response: resp}
532	return
533}
534
535// listByLocationNextResults retrieves the next set of results, if any.
536func (client InstanceFailoverGroupsClient) listByLocationNextResults(ctx context.Context, lastResults InstanceFailoverGroupListResult) (result InstanceFailoverGroupListResult, err error) {
537	req, err := lastResults.instanceFailoverGroupListResultPreparer(ctx)
538	if err != nil {
539		return result, autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "listByLocationNextResults", nil, "Failure preparing next results request")
540	}
541	if req == nil {
542		return
543	}
544	resp, err := client.ListByLocationSender(req)
545	if err != nil {
546		result.Response = autorest.Response{Response: resp}
547		return result, autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "listByLocationNextResults", resp, "Failure sending next results request")
548	}
549	result, err = client.ListByLocationResponder(resp)
550	if err != nil {
551		err = autorest.NewErrorWithError(err, "sql.InstanceFailoverGroupsClient", "listByLocationNextResults", resp, "Failure responding to next results request")
552	}
553	return
554}
555
556// ListByLocationComplete enumerates all values, automatically crossing page boundaries as required.
557func (client InstanceFailoverGroupsClient) ListByLocationComplete(ctx context.Context, resourceGroupName string, locationName string) (result InstanceFailoverGroupListResultIterator, err error) {
558	if tracing.IsEnabled() {
559		ctx = tracing.StartSpan(ctx, fqdn+"/InstanceFailoverGroupsClient.ListByLocation")
560		defer func() {
561			sc := -1
562			if result.Response().Response.Response != nil {
563				sc = result.page.Response().Response.Response.StatusCode
564			}
565			tracing.EndSpan(ctx, sc, err)
566		}()
567	}
568	result.page, err = client.ListByLocation(ctx, resourceGroupName, locationName)
569	return
570}
571