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