1package consumption
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/tracing"
25	"net/http"
26)
27
28// ReservationsDetailsClient is the consumption management client provides access to consumption resources for Azure
29// Enterprise Subscriptions.
30type ReservationsDetailsClient struct {
31	BaseClient
32}
33
34// NewReservationsDetailsClient creates an instance of the ReservationsDetailsClient client.
35func NewReservationsDetailsClient(subscriptionID string) ReservationsDetailsClient {
36	return NewReservationsDetailsClientWithBaseURI(DefaultBaseURI, subscriptionID)
37}
38
39// NewReservationsDetailsClientWithBaseURI creates an instance of the ReservationsDetailsClient client using a custom
40// endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure
41// stack).
42func NewReservationsDetailsClientWithBaseURI(baseURI string, subscriptionID string) ReservationsDetailsClient {
43	return ReservationsDetailsClient{NewWithBaseURI(baseURI, subscriptionID)}
44}
45
46// ListByReservationOrder lists the reservations details for provided date range.
47// Parameters:
48// reservationOrderID - order Id of the reservation
49// filter - filter reservation details by date range. The properties/UsageDate for start date and end date. The
50// filter supports 'le' and  'ge'
51func (client ReservationsDetailsClient) ListByReservationOrder(ctx context.Context, reservationOrderID string, filter string) (result ReservationDetailsListResultPage, err error) {
52	if tracing.IsEnabled() {
53		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrder")
54		defer func() {
55			sc := -1
56			if result.rdlr.Response.Response != nil {
57				sc = result.rdlr.Response.Response.StatusCode
58			}
59			tracing.EndSpan(ctx, sc, err)
60		}()
61	}
62	result.fn = client.listByReservationOrderNextResults
63	req, err := client.ListByReservationOrderPreparer(ctx, reservationOrderID, filter)
64	if err != nil {
65		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", nil, "Failure preparing request")
66		return
67	}
68
69	resp, err := client.ListByReservationOrderSender(req)
70	if err != nil {
71		result.rdlr.Response = autorest.Response{Response: resp}
72		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", resp, "Failure sending request")
73		return
74	}
75
76	result.rdlr, err = client.ListByReservationOrderResponder(resp)
77	if err != nil {
78		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", resp, "Failure responding to request")
79		return
80	}
81	if result.rdlr.hasNextLink() && result.rdlr.IsEmpty() {
82		err = result.NextWithContext(ctx)
83		return
84	}
85
86	return
87}
88
89// ListByReservationOrderPreparer prepares the ListByReservationOrder request.
90func (client ReservationsDetailsClient) ListByReservationOrderPreparer(ctx context.Context, reservationOrderID string, filter string) (*http.Request, error) {
91	pathParameters := map[string]interface{}{
92		"reservationOrderId": autorest.Encode("path", reservationOrderID),
93	}
94
95	const APIVersion = "2018-10-01"
96	queryParameters := map[string]interface{}{
97		"$filter":     autorest.Encode("query", filter),
98		"api-version": APIVersion,
99	}
100
101	preparer := autorest.CreatePreparer(
102		autorest.AsGet(),
103		autorest.WithBaseURL(client.BaseURI),
104		autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationDetails", pathParameters),
105		autorest.WithQueryParameters(queryParameters))
106	return preparer.Prepare((&http.Request{}).WithContext(ctx))
107}
108
109// ListByReservationOrderSender sends the ListByReservationOrder request. The method will close the
110// http.Response Body if it receives an error.
111func (client ReservationsDetailsClient) ListByReservationOrderSender(req *http.Request) (*http.Response, error) {
112	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
113}
114
115// ListByReservationOrderResponder handles the response to the ListByReservationOrder request. The method always
116// closes the http.Response Body.
117func (client ReservationsDetailsClient) ListByReservationOrderResponder(resp *http.Response) (result ReservationDetailsListResult, err error) {
118	err = autorest.Respond(
119		resp,
120		azure.WithErrorUnlessStatusCode(http.StatusOK),
121		autorest.ByUnmarshallingJSON(&result),
122		autorest.ByClosing())
123	result.Response = autorest.Response{Response: resp}
124	return
125}
126
127// listByReservationOrderNextResults retrieves the next set of results, if any.
128func (client ReservationsDetailsClient) listByReservationOrderNextResults(ctx context.Context, lastResults ReservationDetailsListResult) (result ReservationDetailsListResult, err error) {
129	req, err := lastResults.reservationDetailsListResultPreparer(ctx)
130	if err != nil {
131		return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", nil, "Failure preparing next results request")
132	}
133	if req == nil {
134		return
135	}
136	resp, err := client.ListByReservationOrderSender(req)
137	if err != nil {
138		result.Response = autorest.Response{Response: resp}
139		return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", resp, "Failure sending next results request")
140	}
141	result, err = client.ListByReservationOrderResponder(resp)
142	if err != nil {
143		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", resp, "Failure responding to next results request")
144	}
145	return
146}
147
148// ListByReservationOrderComplete enumerates all values, automatically crossing page boundaries as required.
149func (client ReservationsDetailsClient) ListByReservationOrderComplete(ctx context.Context, reservationOrderID string, filter string) (result ReservationDetailsListResultIterator, err error) {
150	if tracing.IsEnabled() {
151		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrder")
152		defer func() {
153			sc := -1
154			if result.Response().Response.Response != nil {
155				sc = result.page.Response().Response.Response.StatusCode
156			}
157			tracing.EndSpan(ctx, sc, err)
158		}()
159	}
160	result.page, err = client.ListByReservationOrder(ctx, reservationOrderID, filter)
161	return
162}
163
164// ListByReservationOrderAndReservation lists the reservations details for provided date range.
165// Parameters:
166// reservationOrderID - order Id of the reservation
167// reservationID - id of the reservation
168// filter - filter reservation details by date range. The properties/UsageDate for start date and end date. The
169// filter supports 'le' and  'ge'
170func (client ReservationsDetailsClient) ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, filter string) (result ReservationDetailsListResultPage, err error) {
171	if tracing.IsEnabled() {
172		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrderAndReservation")
173		defer func() {
174			sc := -1
175			if result.rdlr.Response.Response != nil {
176				sc = result.rdlr.Response.Response.StatusCode
177			}
178			tracing.EndSpan(ctx, sc, err)
179		}()
180	}
181	result.fn = client.listByReservationOrderAndReservationNextResults
182	req, err := client.ListByReservationOrderAndReservationPreparer(ctx, reservationOrderID, reservationID, filter)
183	if err != nil {
184		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", nil, "Failure preparing request")
185		return
186	}
187
188	resp, err := client.ListByReservationOrderAndReservationSender(req)
189	if err != nil {
190		result.rdlr.Response = autorest.Response{Response: resp}
191		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", resp, "Failure sending request")
192		return
193	}
194
195	result.rdlr, err = client.ListByReservationOrderAndReservationResponder(resp)
196	if err != nil {
197		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", resp, "Failure responding to request")
198		return
199	}
200	if result.rdlr.hasNextLink() && result.rdlr.IsEmpty() {
201		err = result.NextWithContext(ctx)
202		return
203	}
204
205	return
206}
207
208// ListByReservationOrderAndReservationPreparer prepares the ListByReservationOrderAndReservation request.
209func (client ReservationsDetailsClient) ListByReservationOrderAndReservationPreparer(ctx context.Context, reservationOrderID string, reservationID string, filter string) (*http.Request, error) {
210	pathParameters := map[string]interface{}{
211		"reservationId":      autorest.Encode("path", reservationID),
212		"reservationOrderId": autorest.Encode("path", reservationOrderID),
213	}
214
215	const APIVersion = "2018-10-01"
216	queryParameters := map[string]interface{}{
217		"$filter":     autorest.Encode("query", filter),
218		"api-version": APIVersion,
219	}
220
221	preparer := autorest.CreatePreparer(
222		autorest.AsGet(),
223		autorest.WithBaseURL(client.BaseURI),
224		autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationDetails", pathParameters),
225		autorest.WithQueryParameters(queryParameters))
226	return preparer.Prepare((&http.Request{}).WithContext(ctx))
227}
228
229// ListByReservationOrderAndReservationSender sends the ListByReservationOrderAndReservation request. The method will close the
230// http.Response Body if it receives an error.
231func (client ReservationsDetailsClient) ListByReservationOrderAndReservationSender(req *http.Request) (*http.Response, error) {
232	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
233}
234
235// ListByReservationOrderAndReservationResponder handles the response to the ListByReservationOrderAndReservation request. The method always
236// closes the http.Response Body.
237func (client ReservationsDetailsClient) ListByReservationOrderAndReservationResponder(resp *http.Response) (result ReservationDetailsListResult, err error) {
238	err = autorest.Respond(
239		resp,
240		azure.WithErrorUnlessStatusCode(http.StatusOK),
241		autorest.ByUnmarshallingJSON(&result),
242		autorest.ByClosing())
243	result.Response = autorest.Response{Response: resp}
244	return
245}
246
247// listByReservationOrderAndReservationNextResults retrieves the next set of results, if any.
248func (client ReservationsDetailsClient) listByReservationOrderAndReservationNextResults(ctx context.Context, lastResults ReservationDetailsListResult) (result ReservationDetailsListResult, err error) {
249	req, err := lastResults.reservationDetailsListResultPreparer(ctx)
250	if err != nil {
251		return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", nil, "Failure preparing next results request")
252	}
253	if req == nil {
254		return
255	}
256	resp, err := client.ListByReservationOrderAndReservationSender(req)
257	if err != nil {
258		result.Response = autorest.Response{Response: resp}
259		return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", resp, "Failure sending next results request")
260	}
261	result, err = client.ListByReservationOrderAndReservationResponder(resp)
262	if err != nil {
263		err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", resp, "Failure responding to next results request")
264	}
265	return
266}
267
268// ListByReservationOrderAndReservationComplete enumerates all values, automatically crossing page boundaries as required.
269func (client ReservationsDetailsClient) ListByReservationOrderAndReservationComplete(ctx context.Context, reservationOrderID string, reservationID string, filter string) (result ReservationDetailsListResultIterator, err error) {
270	if tracing.IsEnabled() {
271		ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrderAndReservation")
272		defer func() {
273			sc := -1
274			if result.Response().Response.Response != nil {
275				sc = result.page.Response().Response.Response.StatusCode
276			}
277			tracing.EndSpan(ctx, sc, err)
278		}()
279	}
280	result.page, err = client.ListByReservationOrderAndReservation(ctx, reservationOrderID, reservationID, filter)
281	return
282}
283