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