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