1package network
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// VirtualApplianceSkusClient is the network Client
18type VirtualApplianceSkusClient struct {
19	BaseClient
20}
21
22// NewVirtualApplianceSkusClient creates an instance of the VirtualApplianceSkusClient client.
23func NewVirtualApplianceSkusClient(subscriptionID string) VirtualApplianceSkusClient {
24	return NewVirtualApplianceSkusClientWithBaseURI(DefaultBaseURI, subscriptionID)
25}
26
27// NewVirtualApplianceSkusClientWithBaseURI creates an instance of the VirtualApplianceSkusClient 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 NewVirtualApplianceSkusClientWithBaseURI(baseURI string, subscriptionID string) VirtualApplianceSkusClient {
31	return VirtualApplianceSkusClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// Get retrieves a single available sku for network virtual appliance.
35// Parameters:
36// skuName - name of the Sku.
37func (client VirtualApplianceSkusClient) Get(ctx context.Context, skuName string) (result VirtualApplianceSku, err error) {
38	if tracing.IsEnabled() {
39		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceSkusClient.Get")
40		defer func() {
41			sc := -1
42			if result.Response.Response != nil {
43				sc = result.Response.Response.StatusCode
44			}
45			tracing.EndSpan(ctx, sc, err)
46		}()
47	}
48	req, err := client.GetPreparer(ctx, skuName)
49	if err != nil {
50		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "Get", nil, "Failure preparing request")
51		return
52	}
53
54	resp, err := client.GetSender(req)
55	if err != nil {
56		result.Response = autorest.Response{Response: resp}
57		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "Get", resp, "Failure sending request")
58		return
59	}
60
61	result, err = client.GetResponder(resp)
62	if err != nil {
63		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "Get", resp, "Failure responding to request")
64		return
65	}
66
67	return
68}
69
70// GetPreparer prepares the Get request.
71func (client VirtualApplianceSkusClient) GetPreparer(ctx context.Context, skuName string) (*http.Request, error) {
72	pathParameters := map[string]interface{}{
73		"skuName":        autorest.Encode("path", skuName),
74		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
75	}
76
77	const APIVersion = "2020-11-01"
78	queryParameters := map[string]interface{}{
79		"api-version": APIVersion,
80	}
81
82	preparer := autorest.CreatePreparer(
83		autorest.AsGet(),
84		autorest.WithBaseURL(client.BaseURI),
85		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkVirtualApplianceSkus/{skuName}", pathParameters),
86		autorest.WithQueryParameters(queryParameters))
87	return preparer.Prepare((&http.Request{}).WithContext(ctx))
88}
89
90// GetSender sends the Get request. The method will close the
91// http.Response Body if it receives an error.
92func (client VirtualApplianceSkusClient) GetSender(req *http.Request) (*http.Response, error) {
93	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
94}
95
96// GetResponder handles the response to the Get request. The method always
97// closes the http.Response Body.
98func (client VirtualApplianceSkusClient) GetResponder(resp *http.Response) (result VirtualApplianceSku, err error) {
99	err = autorest.Respond(
100		resp,
101		azure.WithErrorUnlessStatusCode(http.StatusOK),
102		autorest.ByUnmarshallingJSON(&result),
103		autorest.ByClosing())
104	result.Response = autorest.Response{Response: resp}
105	return
106}
107
108// List list all SKUs available for a virtual appliance.
109func (client VirtualApplianceSkusClient) List(ctx context.Context) (result VirtualApplianceSkuListResultPage, err error) {
110	if tracing.IsEnabled() {
111		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceSkusClient.List")
112		defer func() {
113			sc := -1
114			if result.vaslr.Response.Response != nil {
115				sc = result.vaslr.Response.Response.StatusCode
116			}
117			tracing.EndSpan(ctx, sc, err)
118		}()
119	}
120	result.fn = client.listNextResults
121	req, err := client.ListPreparer(ctx)
122	if err != nil {
123		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "List", nil, "Failure preparing request")
124		return
125	}
126
127	resp, err := client.ListSender(req)
128	if err != nil {
129		result.vaslr.Response = autorest.Response{Response: resp}
130		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "List", resp, "Failure sending request")
131		return
132	}
133
134	result.vaslr, err = client.ListResponder(resp)
135	if err != nil {
136		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "List", resp, "Failure responding to request")
137		return
138	}
139	if result.vaslr.hasNextLink() && result.vaslr.IsEmpty() {
140		err = result.NextWithContext(ctx)
141		return
142	}
143
144	return
145}
146
147// ListPreparer prepares the List request.
148func (client VirtualApplianceSkusClient) ListPreparer(ctx context.Context) (*http.Request, error) {
149	pathParameters := map[string]interface{}{
150		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
151	}
152
153	const APIVersion = "2020-11-01"
154	queryParameters := map[string]interface{}{
155		"api-version": APIVersion,
156	}
157
158	preparer := autorest.CreatePreparer(
159		autorest.AsGet(),
160		autorest.WithBaseURL(client.BaseURI),
161		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkVirtualApplianceSkus", pathParameters),
162		autorest.WithQueryParameters(queryParameters))
163	return preparer.Prepare((&http.Request{}).WithContext(ctx))
164}
165
166// ListSender sends the List request. The method will close the
167// http.Response Body if it receives an error.
168func (client VirtualApplianceSkusClient) ListSender(req *http.Request) (*http.Response, error) {
169	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
170}
171
172// ListResponder handles the response to the List request. The method always
173// closes the http.Response Body.
174func (client VirtualApplianceSkusClient) ListResponder(resp *http.Response) (result VirtualApplianceSkuListResult, err error) {
175	err = autorest.Respond(
176		resp,
177		azure.WithErrorUnlessStatusCode(http.StatusOK),
178		autorest.ByUnmarshallingJSON(&result),
179		autorest.ByClosing())
180	result.Response = autorest.Response{Response: resp}
181	return
182}
183
184// listNextResults retrieves the next set of results, if any.
185func (client VirtualApplianceSkusClient) listNextResults(ctx context.Context, lastResults VirtualApplianceSkuListResult) (result VirtualApplianceSkuListResult, err error) {
186	req, err := lastResults.virtualApplianceSkuListResultPreparer(ctx)
187	if err != nil {
188		return result, autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "listNextResults", nil, "Failure preparing next results request")
189	}
190	if req == nil {
191		return
192	}
193	resp, err := client.ListSender(req)
194	if err != nil {
195		result.Response = autorest.Response{Response: resp}
196		return result, autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "listNextResults", resp, "Failure sending next results request")
197	}
198	result, err = client.ListResponder(resp)
199	if err != nil {
200		err = autorest.NewErrorWithError(err, "network.VirtualApplianceSkusClient", "listNextResults", resp, "Failure responding to next results request")
201	}
202	return
203}
204
205// ListComplete enumerates all values, automatically crossing page boundaries as required.
206func (client VirtualApplianceSkusClient) ListComplete(ctx context.Context) (result VirtualApplianceSkuListResultIterator, err error) {
207	if tracing.IsEnabled() {
208		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceSkusClient.List")
209		defer func() {
210			sc := -1
211			if result.Response().Response.Response != nil {
212				sc = result.page.Response().Response.Response.StatusCode
213			}
214			tracing.EndSpan(ctx, sc, err)
215		}()
216	}
217	result.page, err = client.List(ctx)
218	return
219}
220