1package vmwarecloudsimple
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// UsagesClient is the description of the new service
18type UsagesClient struct {
19	BaseClient
20}
21
22// NewUsagesClient creates an instance of the UsagesClient client.
23func NewUsagesClient(subscriptionID string, referer string) UsagesClient {
24	return NewUsagesClientWithBaseURI(DefaultBaseURI, subscriptionID, referer)
25}
26
27// NewUsagesClientWithBaseURI creates an instance of the UsagesClient client using a custom endpoint.  Use this when
28// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
29func NewUsagesClientWithBaseURI(baseURI string, subscriptionID string, referer string) UsagesClient {
30	return UsagesClient{NewWithBaseURI(baseURI, subscriptionID, referer)}
31}
32
33// List returns list of usage in region
34// Parameters:
35// regionID - the region Id (westus, eastus)
36// filter - the filter to apply on the list operation. only name.value is allowed here as a filter e.g.
37// $filter=name.value eq 'xxxx'
38func (client UsagesClient) List(ctx context.Context, regionID string, filter string) (result UsageListResponsePage, err error) {
39	if tracing.IsEnabled() {
40		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesClient.List")
41		defer func() {
42			sc := -1
43			if result.ulr.Response.Response != nil {
44				sc = result.ulr.Response.Response.StatusCode
45			}
46			tracing.EndSpan(ctx, sc, err)
47		}()
48	}
49	result.fn = client.listNextResults
50	req, err := client.ListPreparer(ctx, regionID, filter)
51	if err != nil {
52		err = autorest.NewErrorWithError(err, "vmwarecloudsimple.UsagesClient", "List", nil, "Failure preparing request")
53		return
54	}
55
56	resp, err := client.ListSender(req)
57	if err != nil {
58		result.ulr.Response = autorest.Response{Response: resp}
59		err = autorest.NewErrorWithError(err, "vmwarecloudsimple.UsagesClient", "List", resp, "Failure sending request")
60		return
61	}
62
63	result.ulr, err = client.ListResponder(resp)
64	if err != nil {
65		err = autorest.NewErrorWithError(err, "vmwarecloudsimple.UsagesClient", "List", resp, "Failure responding to request")
66		return
67	}
68	if result.ulr.hasNextLink() && result.ulr.IsEmpty() {
69		err = result.NextWithContext(ctx)
70		return
71	}
72
73	return
74}
75
76// ListPreparer prepares the List request.
77func (client UsagesClient) ListPreparer(ctx context.Context, regionID string, filter string) (*http.Request, error) {
78	pathParameters := map[string]interface{}{
79		"regionId":       autorest.Encode("path", regionID),
80		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
81	}
82
83	const APIVersion = "2019-04-01"
84	queryParameters := map[string]interface{}{
85		"api-version": APIVersion,
86	}
87	if len(filter) > 0 {
88		queryParameters["$filter"] = autorest.Encode("query", filter)
89	}
90
91	preparer := autorest.CreatePreparer(
92		autorest.AsGet(),
93		autorest.WithBaseURL(client.BaseURI),
94		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.VMwareCloudSimple/locations/{regionId}/usages", pathParameters),
95		autorest.WithQueryParameters(queryParameters))
96	return preparer.Prepare((&http.Request{}).WithContext(ctx))
97}
98
99// ListSender sends the List request. The method will close the
100// http.Response Body if it receives an error.
101func (client UsagesClient) ListSender(req *http.Request) (*http.Response, error) {
102	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
103}
104
105// ListResponder handles the response to the List request. The method always
106// closes the http.Response Body.
107func (client UsagesClient) ListResponder(resp *http.Response) (result UsageListResponse, err error) {
108	err = autorest.Respond(
109		resp,
110		azure.WithErrorUnlessStatusCode(http.StatusOK),
111		autorest.ByUnmarshallingJSON(&result),
112		autorest.ByClosing())
113	result.Response = autorest.Response{Response: resp}
114	return
115}
116
117// listNextResults retrieves the next set of results, if any.
118func (client UsagesClient) listNextResults(ctx context.Context, lastResults UsageListResponse) (result UsageListResponse, err error) {
119	req, err := lastResults.usageListResponsePreparer(ctx)
120	if err != nil {
121		return result, autorest.NewErrorWithError(err, "vmwarecloudsimple.UsagesClient", "listNextResults", nil, "Failure preparing next results request")
122	}
123	if req == nil {
124		return
125	}
126	resp, err := client.ListSender(req)
127	if err != nil {
128		result.Response = autorest.Response{Response: resp}
129		return result, autorest.NewErrorWithError(err, "vmwarecloudsimple.UsagesClient", "listNextResults", resp, "Failure sending next results request")
130	}
131	result, err = client.ListResponder(resp)
132	if err != nil {
133		err = autorest.NewErrorWithError(err, "vmwarecloudsimple.UsagesClient", "listNextResults", resp, "Failure responding to next results request")
134	}
135	return
136}
137
138// ListComplete enumerates all values, automatically crossing page boundaries as required.
139func (client UsagesClient) ListComplete(ctx context.Context, regionID string, filter string) (result UsageListResponseIterator, err error) {
140	if tracing.IsEnabled() {
141		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesClient.List")
142		defer func() {
143			sc := -1
144			if result.Response().Response.Response != nil {
145				sc = result.page.Response().Response.Response.StatusCode
146			}
147			tracing.EndSpan(ctx, sc, err)
148		}()
149	}
150	result.page, err = client.List(ctx, regionID, filter)
151	return
152}
153