1package consumption
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// ReservationsSummariesClient is the consumption management client provides access to consumption resources for Azure
18// Enterprise Subscriptions.
19type ReservationsSummariesClient struct {
20	BaseClient
21}
22
23// NewReservationsSummariesClient creates an instance of the ReservationsSummariesClient client.
24func NewReservationsSummariesClient(subscriptionID string) ReservationsSummariesClient {
25	return NewReservationsSummariesClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewReservationsSummariesClientWithBaseURI creates an instance of the ReservationsSummariesClient client using a
29// custom endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds,
30// Azure stack).
31func NewReservationsSummariesClientWithBaseURI(baseURI string, subscriptionID string) ReservationsSummariesClient {
32	return ReservationsSummariesClient{NewWithBaseURI(baseURI, subscriptionID)}
33}
34
35// List lists the reservations summaries for the defined scope daily or monthly grain.
36// Parameters:
37// scope - the scope associated with reservations summaries operations. This includes
38// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for BillingAccount scope (legacy), and
39// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for
40// BillingProfile scope (modern).
41// grain - can be daily or monthly
42// startDate - start date. Required only when querying with billing profile
43// endDate - end date. Required only when querying with billing profile
44// filter - the properties/UsageDate for start date and end date. The filter supports 'le' and  'ge'. Not
45// required when querying with billing profile
46// reservationID - reservation Id GUID. Only valid if reservationOrderId is also provided. Filter to a specific
47// reservation
48// reservationOrderID - reservation Order Id GUID. Required if reservationId is provided. Filter to a specific
49// reservation order
50func (client ReservationsSummariesClient) List(ctx context.Context, scope string, grain Datagrain, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (result ReservationSummariesListResultPage, err error) {
51	if tracing.IsEnabled() {
52		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.List")
53		defer func() {
54			sc := -1
55			if result.rslr.Response.Response != nil {
56				sc = result.rslr.Response.Response.StatusCode
57			}
58			tracing.EndSpan(ctx, sc, err)
59		}()
60	}
61	result.fn = client.listNextResults
62	req, err := client.ListPreparer(ctx, scope, grain, startDate, endDate, filter, reservationID, reservationOrderID)
63	if err != nil {
64		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "List", nil, "Failure preparing request")
65		return
66	}
67
68	resp, err := client.ListSender(req)
69	if err != nil {
70		result.rslr.Response = autorest.Response{Response: resp}
71		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "List", resp, "Failure sending request")
72		return
73	}
74
75	result.rslr, err = client.ListResponder(resp)
76	if err != nil {
77		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "List", resp, "Failure responding to request")
78		return
79	}
80	if result.rslr.hasNextLink() && result.rslr.IsEmpty() {
81		err = result.NextWithContext(ctx)
82		return
83	}
84
85	return
86}
87
88// ListPreparer prepares the List request.
89func (client ReservationsSummariesClient) ListPreparer(ctx context.Context, scope string, grain Datagrain, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (*http.Request, error) {
90	pathParameters := map[string]interface{}{
91		"scope": scope,
92	}
93
94	const APIVersion = "2019-10-01"
95	queryParameters := map[string]interface{}{
96		"api-version": APIVersion,
97		"grain":       autorest.Encode("query", grain),
98	}
99	if len(startDate) > 0 {
100		queryParameters["startDate"] = autorest.Encode("query", startDate)
101	}
102	if len(endDate) > 0 {
103		queryParameters["endDate"] = autorest.Encode("query", endDate)
104	}
105	if len(filter) > 0 {
106		queryParameters["$filter"] = autorest.Encode("query", filter)
107	}
108	if len(reservationID) > 0 {
109		queryParameters["reservationId"] = autorest.Encode("query", reservationID)
110	}
111	if len(reservationOrderID) > 0 {
112		queryParameters["reservationOrderId"] = autorest.Encode("query", reservationOrderID)
113	}
114
115	preparer := autorest.CreatePreparer(
116		autorest.AsGet(),
117		autorest.WithBaseURL(client.BaseURI),
118		autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/reservationSummaries", pathParameters),
119		autorest.WithQueryParameters(queryParameters))
120	return preparer.Prepare((&http.Request{}).WithContext(ctx))
121}
122
123// ListSender sends the List request. The method will close the
124// http.Response Body if it receives an error.
125func (client ReservationsSummariesClient) ListSender(req *http.Request) (*http.Response, error) {
126	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
127}
128
129// ListResponder handles the response to the List request. The method always
130// closes the http.Response Body.
131func (client ReservationsSummariesClient) ListResponder(resp *http.Response) (result ReservationSummariesListResult, err error) {
132	err = autorest.Respond(
133		resp,
134		azure.WithErrorUnlessStatusCode(http.StatusOK),
135		autorest.ByUnmarshallingJSON(&result),
136		autorest.ByClosing())
137	result.Response = autorest.Response{Response: resp}
138	return
139}
140
141// listNextResults retrieves the next set of results, if any.
142func (client ReservationsSummariesClient) listNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) {
143	req, err := lastResults.reservationSummariesListResultPreparer(ctx)
144	if err != nil {
145		return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listNextResults", nil, "Failure preparing next results request")
146	}
147	if req == nil {
148		return
149	}
150	resp, err := client.ListSender(req)
151	if err != nil {
152		result.Response = autorest.Response{Response: resp}
153		return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listNextResults", resp, "Failure sending next results request")
154	}
155	result, err = client.ListResponder(resp)
156	if err != nil {
157		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listNextResults", resp, "Failure responding to next results request")
158	}
159	return
160}
161
162// ListComplete enumerates all values, automatically crossing page boundaries as required.
163func (client ReservationsSummariesClient) ListComplete(ctx context.Context, scope string, grain Datagrain, startDate string, endDate string, filter string, reservationID string, reservationOrderID string) (result ReservationSummariesListResultIterator, err error) {
164	if tracing.IsEnabled() {
165		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.List")
166		defer func() {
167			sc := -1
168			if result.Response().Response.Response != nil {
169				sc = result.page.Response().Response.Response.StatusCode
170			}
171			tracing.EndSpan(ctx, sc, err)
172		}()
173	}
174	result.page, err = client.List(ctx, scope, grain, startDate, endDate, filter, reservationID, reservationOrderID)
175	return
176}
177
178// ListByReservationOrder lists the reservations summaries for daily or monthly grain.
179// Parameters:
180// reservationOrderID - order Id of the reservation
181// grain - can be daily or monthly
182// filter - required only for daily grain. The properties/UsageDate for start date and end date. The filter
183// supports 'le' and  'ge'
184func (client ReservationsSummariesClient) ListByReservationOrder(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (result ReservationSummariesListResultPage, err error) {
185	if tracing.IsEnabled() {
186		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrder")
187		defer func() {
188			sc := -1
189			if result.rslr.Response.Response != nil {
190				sc = result.rslr.Response.Response.StatusCode
191			}
192			tracing.EndSpan(ctx, sc, err)
193		}()
194	}
195	result.fn = client.listByReservationOrderNextResults
196	req, err := client.ListByReservationOrderPreparer(ctx, reservationOrderID, grain, filter)
197	if err != nil {
198		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", nil, "Failure preparing request")
199		return
200	}
201
202	resp, err := client.ListByReservationOrderSender(req)
203	if err != nil {
204		result.rslr.Response = autorest.Response{Response: resp}
205		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", resp, "Failure sending request")
206		return
207	}
208
209	result.rslr, err = client.ListByReservationOrderResponder(resp)
210	if err != nil {
211		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", resp, "Failure responding to request")
212		return
213	}
214	if result.rslr.hasNextLink() && result.rslr.IsEmpty() {
215		err = result.NextWithContext(ctx)
216		return
217	}
218
219	return
220}
221
222// ListByReservationOrderPreparer prepares the ListByReservationOrder request.
223func (client ReservationsSummariesClient) ListByReservationOrderPreparer(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (*http.Request, error) {
224	pathParameters := map[string]interface{}{
225		"reservationOrderId": autorest.Encode("path", reservationOrderID),
226	}
227
228	const APIVersion = "2019-10-01"
229	queryParameters := map[string]interface{}{
230		"api-version": APIVersion,
231		"grain":       autorest.Encode("query", grain),
232	}
233	if len(filter) > 0 {
234		queryParameters["$filter"] = autorest.Encode("query", filter)
235	}
236
237	preparer := autorest.CreatePreparer(
238		autorest.AsGet(),
239		autorest.WithBaseURL(client.BaseURI),
240		autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationSummaries", pathParameters),
241		autorest.WithQueryParameters(queryParameters))
242	return preparer.Prepare((&http.Request{}).WithContext(ctx))
243}
244
245// ListByReservationOrderSender sends the ListByReservationOrder request. The method will close the
246// http.Response Body if it receives an error.
247func (client ReservationsSummariesClient) ListByReservationOrderSender(req *http.Request) (*http.Response, error) {
248	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
249}
250
251// ListByReservationOrderResponder handles the response to the ListByReservationOrder request. The method always
252// closes the http.Response Body.
253func (client ReservationsSummariesClient) ListByReservationOrderResponder(resp *http.Response) (result ReservationSummariesListResult, err error) {
254	err = autorest.Respond(
255		resp,
256		azure.WithErrorUnlessStatusCode(http.StatusOK),
257		autorest.ByUnmarshallingJSON(&result),
258		autorest.ByClosing())
259	result.Response = autorest.Response{Response: resp}
260	return
261}
262
263// listByReservationOrderNextResults retrieves the next set of results, if any.
264func (client ReservationsSummariesClient) listByReservationOrderNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) {
265	req, err := lastResults.reservationSummariesListResultPreparer(ctx)
266	if err != nil {
267		return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", nil, "Failure preparing next results request")
268	}
269	if req == nil {
270		return
271	}
272	resp, err := client.ListByReservationOrderSender(req)
273	if err != nil {
274		result.Response = autorest.Response{Response: resp}
275		return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", resp, "Failure sending next results request")
276	}
277	result, err = client.ListByReservationOrderResponder(resp)
278	if err != nil {
279		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", resp, "Failure responding to next results request")
280	}
281	return
282}
283
284// ListByReservationOrderComplete enumerates all values, automatically crossing page boundaries as required.
285func (client ReservationsSummariesClient) ListByReservationOrderComplete(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (result ReservationSummariesListResultIterator, err error) {
286	if tracing.IsEnabled() {
287		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrder")
288		defer func() {
289			sc := -1
290			if result.Response().Response.Response != nil {
291				sc = result.page.Response().Response.Response.StatusCode
292			}
293			tracing.EndSpan(ctx, sc, err)
294		}()
295	}
296	result.page, err = client.ListByReservationOrder(ctx, reservationOrderID, grain, filter)
297	return
298}
299
300// ListByReservationOrderAndReservation lists the reservations summaries for daily or monthly grain.
301// Parameters:
302// reservationOrderID - order Id of the reservation
303// reservationID - id of the reservation
304// grain - can be daily or monthly
305// filter - required only for daily grain. The properties/UsageDate for start date and end date. The filter
306// supports 'le' and  'ge'
307func (client ReservationsSummariesClient) ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (result ReservationSummariesListResultPage, err error) {
308	if tracing.IsEnabled() {
309		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrderAndReservation")
310		defer func() {
311			sc := -1
312			if result.rslr.Response.Response != nil {
313				sc = result.rslr.Response.Response.StatusCode
314			}
315			tracing.EndSpan(ctx, sc, err)
316		}()
317	}
318	result.fn = client.listByReservationOrderAndReservationNextResults
319	req, err := client.ListByReservationOrderAndReservationPreparer(ctx, reservationOrderID, reservationID, grain, filter)
320	if err != nil {
321		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", nil, "Failure preparing request")
322		return
323	}
324
325	resp, err := client.ListByReservationOrderAndReservationSender(req)
326	if err != nil {
327		result.rslr.Response = autorest.Response{Response: resp}
328		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", resp, "Failure sending request")
329		return
330	}
331
332	result.rslr, err = client.ListByReservationOrderAndReservationResponder(resp)
333	if err != nil {
334		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", resp, "Failure responding to request")
335		return
336	}
337	if result.rslr.hasNextLink() && result.rslr.IsEmpty() {
338		err = result.NextWithContext(ctx)
339		return
340	}
341
342	return
343}
344
345// ListByReservationOrderAndReservationPreparer prepares the ListByReservationOrderAndReservation request.
346func (client ReservationsSummariesClient) ListByReservationOrderAndReservationPreparer(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (*http.Request, error) {
347	pathParameters := map[string]interface{}{
348		"reservationId":      autorest.Encode("path", reservationID),
349		"reservationOrderId": autorest.Encode("path", reservationOrderID),
350	}
351
352	const APIVersion = "2019-10-01"
353	queryParameters := map[string]interface{}{
354		"api-version": APIVersion,
355		"grain":       autorest.Encode("query", grain),
356	}
357	if len(filter) > 0 {
358		queryParameters["$filter"] = autorest.Encode("query", filter)
359	}
360
361	preparer := autorest.CreatePreparer(
362		autorest.AsGet(),
363		autorest.WithBaseURL(client.BaseURI),
364		autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationSummaries", pathParameters),
365		autorest.WithQueryParameters(queryParameters))
366	return preparer.Prepare((&http.Request{}).WithContext(ctx))
367}
368
369// ListByReservationOrderAndReservationSender sends the ListByReservationOrderAndReservation request. The method will close the
370// http.Response Body if it receives an error.
371func (client ReservationsSummariesClient) ListByReservationOrderAndReservationSender(req *http.Request) (*http.Response, error) {
372	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
373}
374
375// ListByReservationOrderAndReservationResponder handles the response to the ListByReservationOrderAndReservation request. The method always
376// closes the http.Response Body.
377func (client ReservationsSummariesClient) ListByReservationOrderAndReservationResponder(resp *http.Response) (result ReservationSummariesListResult, err error) {
378	err = autorest.Respond(
379		resp,
380		azure.WithErrorUnlessStatusCode(http.StatusOK),
381		autorest.ByUnmarshallingJSON(&result),
382		autorest.ByClosing())
383	result.Response = autorest.Response{Response: resp}
384	return
385}
386
387// listByReservationOrderAndReservationNextResults retrieves the next set of results, if any.
388func (client ReservationsSummariesClient) listByReservationOrderAndReservationNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) {
389	req, err := lastResults.reservationSummariesListResultPreparer(ctx)
390	if err != nil {
391		return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", nil, "Failure preparing next results request")
392	}
393	if req == nil {
394		return
395	}
396	resp, err := client.ListByReservationOrderAndReservationSender(req)
397	if err != nil {
398		result.Response = autorest.Response{Response: resp}
399		return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", resp, "Failure sending next results request")
400	}
401	result, err = client.ListByReservationOrderAndReservationResponder(resp)
402	if err != nil {
403		err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", resp, "Failure responding to next results request")
404	}
405	return
406}
407
408// ListByReservationOrderAndReservationComplete enumerates all values, automatically crossing page boundaries as required.
409func (client ReservationsSummariesClient) ListByReservationOrderAndReservationComplete(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (result ReservationSummariesListResultIterator, err error) {
410	if tracing.IsEnabled() {
411		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrderAndReservation")
412		defer func() {
413			sc := -1
414			if result.Response().Response.Response != nil {
415				sc = result.page.Response().Response.Response.StatusCode
416			}
417			tracing.EndSpan(ctx, sc, err)
418		}()
419	}
420	result.page, err = client.ListByReservationOrderAndReservation(ctx, reservationOrderID, reservationID, grain, filter)
421	return
422}
423