1package backup
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/tracing"
14	"net/http"
15)
16
17// RecoveryPointsRecommendedForMoveClient is the open API 2.0 Specs for Azure RecoveryServices Backup service
18type RecoveryPointsRecommendedForMoveClient struct {
19	BaseClient
20}
21
22// NewRecoveryPointsRecommendedForMoveClient creates an instance of the RecoveryPointsRecommendedForMoveClient client.
23func NewRecoveryPointsRecommendedForMoveClient(subscriptionID string) RecoveryPointsRecommendedForMoveClient {
24	return NewRecoveryPointsRecommendedForMoveClientWithBaseURI(DefaultBaseURI, subscriptionID)
25}
26
27// NewRecoveryPointsRecommendedForMoveClientWithBaseURI creates an instance of the
28// RecoveryPointsRecommendedForMoveClient client using a custom endpoint.  Use this when interacting with an Azure
29// cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewRecoveryPointsRecommendedForMoveClientWithBaseURI(baseURI string, subscriptionID string) RecoveryPointsRecommendedForMoveClient {
31	return RecoveryPointsRecommendedForMoveClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// List lists the recovery points recommended for move to another tier
35// Parameters:
36// vaultName - the name of the recovery services vault.
37// resourceGroupName - the name of the resource group where the recovery services vault is present.
38// parameters - list Recovery points Recommended for Move Request
39func (client RecoveryPointsRecommendedForMoveClient) List(ctx context.Context, vaultName string, resourceGroupName string, fabricName string, containerName string, protectedItemName string, parameters ListRecoveryPointsRecommendedForMoveRequest) (result RecoveryPointResourceListPage, err error) {
40	if tracing.IsEnabled() {
41		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointsRecommendedForMoveClient.List")
42		defer func() {
43			sc := -1
44			if result.rprl.Response.Response != nil {
45				sc = result.rprl.Response.Response.StatusCode
46			}
47			tracing.EndSpan(ctx, sc, err)
48		}()
49	}
50	result.fn = client.listNextResults
51	req, err := client.ListPreparer(ctx, vaultName, resourceGroupName, fabricName, containerName, protectedItemName, parameters)
52	if err != nil {
53		err = autorest.NewErrorWithError(err, "backup.RecoveryPointsRecommendedForMoveClient", "List", nil, "Failure preparing request")
54		return
55	}
56
57	resp, err := client.ListSender(req)
58	if err != nil {
59		result.rprl.Response = autorest.Response{Response: resp}
60		err = autorest.NewErrorWithError(err, "backup.RecoveryPointsRecommendedForMoveClient", "List", resp, "Failure sending request")
61		return
62	}
63
64	result.rprl, err = client.ListResponder(resp)
65	if err != nil {
66		err = autorest.NewErrorWithError(err, "backup.RecoveryPointsRecommendedForMoveClient", "List", resp, "Failure responding to request")
67		return
68	}
69	if result.rprl.hasNextLink() && result.rprl.IsEmpty() {
70		err = result.NextWithContext(ctx)
71		return
72	}
73
74	return
75}
76
77// ListPreparer prepares the List request.
78func (client RecoveryPointsRecommendedForMoveClient) ListPreparer(ctx context.Context, vaultName string, resourceGroupName string, fabricName string, containerName string, protectedItemName string, parameters ListRecoveryPointsRecommendedForMoveRequest) (*http.Request, error) {
79	pathParameters := map[string]interface{}{
80		"containerName":     autorest.Encode("path", containerName),
81		"fabricName":        autorest.Encode("path", fabricName),
82		"protectedItemName": autorest.Encode("path", protectedItemName),
83		"resourceGroupName": autorest.Encode("path", resourceGroupName),
84		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
85		"vaultName":         autorest.Encode("path", vaultName),
86	}
87
88	const APIVersion = "2021-01-01"
89	queryParameters := map[string]interface{}{
90		"api-version": APIVersion,
91	}
92
93	preparer := autorest.CreatePreparer(
94		autorest.AsContentType("application/json; charset=utf-8"),
95		autorest.AsPost(),
96		autorest.WithBaseURL(client.BaseURI),
97		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/{fabricName}/protectionContainers/{containerName}/protectedItems/{protectedItemName}/recoveryPointsRecommendedForMove", pathParameters),
98		autorest.WithJSON(parameters),
99		autorest.WithQueryParameters(queryParameters))
100	return preparer.Prepare((&http.Request{}).WithContext(ctx))
101}
102
103// ListSender sends the List request. The method will close the
104// http.Response Body if it receives an error.
105func (client RecoveryPointsRecommendedForMoveClient) ListSender(req *http.Request) (*http.Response, error) {
106	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
107}
108
109// ListResponder handles the response to the List request. The method always
110// closes the http.Response Body.
111func (client RecoveryPointsRecommendedForMoveClient) ListResponder(resp *http.Response) (result RecoveryPointResourceList, err error) {
112	err = autorest.Respond(
113		resp,
114		azure.WithErrorUnlessStatusCode(http.StatusOK),
115		autorest.ByUnmarshallingJSON(&result),
116		autorest.ByClosing())
117	result.Response = autorest.Response{Response: resp}
118	return
119}
120
121// listNextResults retrieves the next set of results, if any.
122func (client RecoveryPointsRecommendedForMoveClient) listNextResults(ctx context.Context, lastResults RecoveryPointResourceList) (result RecoveryPointResourceList, err error) {
123	req, err := lastResults.recoveryPointResourceListPreparer(ctx)
124	if err != nil {
125		return result, autorest.NewErrorWithError(err, "backup.RecoveryPointsRecommendedForMoveClient", "listNextResults", nil, "Failure preparing next results request")
126	}
127	if req == nil {
128		return
129	}
130	resp, err := client.ListSender(req)
131	if err != nil {
132		result.Response = autorest.Response{Response: resp}
133		return result, autorest.NewErrorWithError(err, "backup.RecoveryPointsRecommendedForMoveClient", "listNextResults", resp, "Failure sending next results request")
134	}
135	result, err = client.ListResponder(resp)
136	if err != nil {
137		err = autorest.NewErrorWithError(err, "backup.RecoveryPointsRecommendedForMoveClient", "listNextResults", resp, "Failure responding to next results request")
138	}
139	return
140}
141
142// ListComplete enumerates all values, automatically crossing page boundaries as required.
143func (client RecoveryPointsRecommendedForMoveClient) ListComplete(ctx context.Context, vaultName string, resourceGroupName string, fabricName string, containerName string, protectedItemName string, parameters ListRecoveryPointsRecommendedForMoveRequest) (result RecoveryPointResourceListIterator, err error) {
144	if tracing.IsEnabled() {
145		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointsRecommendedForMoveClient.List")
146		defer func() {
147			sc := -1
148			if result.Response().Response.Response != nil {
149				sc = result.page.Response().Response.Response.StatusCode
150			}
151			tracing.EndSpan(ctx, sc, err)
152		}()
153	}
154	result.page, err = client.List(ctx, vaultName, resourceGroupName, fabricName, containerName, protectedItemName, parameters)
155	return
156}
157