1// +build go1.13
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// Code generated by Microsoft (R) AutoRest Code Generator.
6// Changes may cause incorrect behavior and will be lost if the code is regenerated.
7
8package armcompute
9
10import (
11	"context"
12	"errors"
13	"fmt"
14	"github.com/Azure/azure-sdk-for-go/sdk/armcore"
15	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
16	"net/http"
17	"net/url"
18	"strconv"
19	"strings"
20)
21
22// VirtualMachineImagesEdgeZoneClient contains the methods for the VirtualMachineImagesEdgeZone group.
23// Don't use this type directly, use NewVirtualMachineImagesEdgeZoneClient() instead.
24type VirtualMachineImagesEdgeZoneClient struct {
25	con            *armcore.Connection
26	subscriptionID string
27}
28
29// NewVirtualMachineImagesEdgeZoneClient creates a new instance of VirtualMachineImagesEdgeZoneClient with the specified values.
30func NewVirtualMachineImagesEdgeZoneClient(con *armcore.Connection, subscriptionID string) *VirtualMachineImagesEdgeZoneClient {
31	return &VirtualMachineImagesEdgeZoneClient{con: con, subscriptionID: subscriptionID}
32}
33
34// Get - Gets a virtual machine image in an edge zone.
35// If the operation fails it returns the *CloudError error type.
36func (client *VirtualMachineImagesEdgeZoneClient) Get(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, version string, options *VirtualMachineImagesEdgeZoneGetOptions) (VirtualMachineImageResponse, error) {
37	req, err := client.getCreateRequest(ctx, location, edgeZone, publisherName, offer, skus, version, options)
38	if err != nil {
39		return VirtualMachineImageResponse{}, err
40	}
41	resp, err := client.con.Pipeline().Do(req)
42	if err != nil {
43		return VirtualMachineImageResponse{}, err
44	}
45	if !resp.HasStatusCode(http.StatusOK) {
46		return VirtualMachineImageResponse{}, client.getHandleError(resp)
47	}
48	return client.getHandleResponse(resp)
49}
50
51// getCreateRequest creates the Get request.
52func (client *VirtualMachineImagesEdgeZoneClient) getCreateRequest(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, version string, options *VirtualMachineImagesEdgeZoneGetOptions) (*azcore.Request, error) {
53	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}"
54	if location == "" {
55		return nil, errors.New("parameter location cannot be empty")
56	}
57	urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location))
58	if edgeZone == "" {
59		return nil, errors.New("parameter edgeZone cannot be empty")
60	}
61	urlPath = strings.ReplaceAll(urlPath, "{edgeZone}", url.PathEscape(edgeZone))
62	if publisherName == "" {
63		return nil, errors.New("parameter publisherName cannot be empty")
64	}
65	urlPath = strings.ReplaceAll(urlPath, "{publisherName}", url.PathEscape(publisherName))
66	if offer == "" {
67		return nil, errors.New("parameter offer cannot be empty")
68	}
69	urlPath = strings.ReplaceAll(urlPath, "{offer}", url.PathEscape(offer))
70	if skus == "" {
71		return nil, errors.New("parameter skus cannot be empty")
72	}
73	urlPath = strings.ReplaceAll(urlPath, "{skus}", url.PathEscape(skus))
74	if version == "" {
75		return nil, errors.New("parameter version cannot be empty")
76	}
77	urlPath = strings.ReplaceAll(urlPath, "{version}", url.PathEscape(version))
78	if client.subscriptionID == "" {
79		return nil, errors.New("parameter client.subscriptionID cannot be empty")
80	}
81	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
82	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
83	if err != nil {
84		return nil, err
85	}
86	req.Telemetry(telemetryInfo)
87	reqQP := req.URL.Query()
88	reqQP.Set("api-version", "2021-03-01")
89	req.URL.RawQuery = reqQP.Encode()
90	req.Header.Set("Accept", "application/json")
91	return req, nil
92}
93
94// getHandleResponse handles the Get response.
95func (client *VirtualMachineImagesEdgeZoneClient) getHandleResponse(resp *azcore.Response) (VirtualMachineImageResponse, error) {
96	var val *VirtualMachineImage
97	if err := resp.UnmarshalAsJSON(&val); err != nil {
98		return VirtualMachineImageResponse{}, err
99	}
100	return VirtualMachineImageResponse{RawResponse: resp.Response, VirtualMachineImage: val}, nil
101}
102
103// getHandleError handles the Get error response.
104func (client *VirtualMachineImagesEdgeZoneClient) getHandleError(resp *azcore.Response) error {
105	body, err := resp.Payload()
106	if err != nil {
107		return azcore.NewResponseError(err, resp.Response)
108	}
109	errType := CloudError{raw: string(body)}
110	if err := resp.UnmarshalAsJSON(&errType); err != nil {
111		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
112	}
113	return azcore.NewResponseError(&errType, resp.Response)
114}
115
116// List - Gets a list of all virtual machine image versions for the specified location, edge zone, publisher, offer, and SKU.
117// If the operation fails it returns the *CloudError error type.
118func (client *VirtualMachineImagesEdgeZoneClient) List(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, options *VirtualMachineImagesEdgeZoneListOptions) (VirtualMachineImageResourceArrayResponse, error) {
119	req, err := client.listCreateRequest(ctx, location, edgeZone, publisherName, offer, skus, options)
120	if err != nil {
121		return VirtualMachineImageResourceArrayResponse{}, err
122	}
123	resp, err := client.con.Pipeline().Do(req)
124	if err != nil {
125		return VirtualMachineImageResourceArrayResponse{}, err
126	}
127	if !resp.HasStatusCode(http.StatusOK) {
128		return VirtualMachineImageResourceArrayResponse{}, client.listHandleError(resp)
129	}
130	return client.listHandleResponse(resp)
131}
132
133// listCreateRequest creates the List request.
134func (client *VirtualMachineImagesEdgeZoneClient) listCreateRequest(ctx context.Context, location string, edgeZone string, publisherName string, offer string, skus string, options *VirtualMachineImagesEdgeZoneListOptions) (*azcore.Request, error) {
135	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions"
136	if location == "" {
137		return nil, errors.New("parameter location cannot be empty")
138	}
139	urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location))
140	if edgeZone == "" {
141		return nil, errors.New("parameter edgeZone cannot be empty")
142	}
143	urlPath = strings.ReplaceAll(urlPath, "{edgeZone}", url.PathEscape(edgeZone))
144	if publisherName == "" {
145		return nil, errors.New("parameter publisherName cannot be empty")
146	}
147	urlPath = strings.ReplaceAll(urlPath, "{publisherName}", url.PathEscape(publisherName))
148	if offer == "" {
149		return nil, errors.New("parameter offer cannot be empty")
150	}
151	urlPath = strings.ReplaceAll(urlPath, "{offer}", url.PathEscape(offer))
152	if skus == "" {
153		return nil, errors.New("parameter skus cannot be empty")
154	}
155	urlPath = strings.ReplaceAll(urlPath, "{skus}", url.PathEscape(skus))
156	if client.subscriptionID == "" {
157		return nil, errors.New("parameter client.subscriptionID cannot be empty")
158	}
159	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
160	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
161	if err != nil {
162		return nil, err
163	}
164	req.Telemetry(telemetryInfo)
165	reqQP := req.URL.Query()
166	if options != nil && options.Expand != nil {
167		reqQP.Set("$expand", *options.Expand)
168	}
169	if options != nil && options.Top != nil {
170		reqQP.Set("$top", strconv.FormatInt(int64(*options.Top), 10))
171	}
172	if options != nil && options.Orderby != nil {
173		reqQP.Set("$orderby", *options.Orderby)
174	}
175	reqQP.Set("api-version", "2021-03-01")
176	req.URL.RawQuery = reqQP.Encode()
177	req.Header.Set("Accept", "application/json")
178	return req, nil
179}
180
181// listHandleResponse handles the List response.
182func (client *VirtualMachineImagesEdgeZoneClient) listHandleResponse(resp *azcore.Response) (VirtualMachineImageResourceArrayResponse, error) {
183	var val []*VirtualMachineImageResource
184	if err := resp.UnmarshalAsJSON(&val); err != nil {
185		return VirtualMachineImageResourceArrayResponse{}, err
186	}
187	return VirtualMachineImageResourceArrayResponse{RawResponse: resp.Response, VirtualMachineImageResourceArray: val}, nil
188}
189
190// listHandleError handles the List error response.
191func (client *VirtualMachineImagesEdgeZoneClient) listHandleError(resp *azcore.Response) error {
192	body, err := resp.Payload()
193	if err != nil {
194		return azcore.NewResponseError(err, resp.Response)
195	}
196	errType := CloudError{raw: string(body)}
197	if err := resp.UnmarshalAsJSON(&errType); err != nil {
198		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
199	}
200	return azcore.NewResponseError(&errType, resp.Response)
201}
202
203// ListOffers - Gets a list of virtual machine image offers for the specified location, edge zone and publisher.
204// If the operation fails it returns the *CloudError error type.
205func (client *VirtualMachineImagesEdgeZoneClient) ListOffers(ctx context.Context, location string, edgeZone string, publisherName string, options *VirtualMachineImagesEdgeZoneListOffersOptions) (VirtualMachineImageResourceArrayResponse, error) {
206	req, err := client.listOffersCreateRequest(ctx, location, edgeZone, publisherName, options)
207	if err != nil {
208		return VirtualMachineImageResourceArrayResponse{}, err
209	}
210	resp, err := client.con.Pipeline().Do(req)
211	if err != nil {
212		return VirtualMachineImageResourceArrayResponse{}, err
213	}
214	if !resp.HasStatusCode(http.StatusOK) {
215		return VirtualMachineImageResourceArrayResponse{}, client.listOffersHandleError(resp)
216	}
217	return client.listOffersHandleResponse(resp)
218}
219
220// listOffersCreateRequest creates the ListOffers request.
221func (client *VirtualMachineImagesEdgeZoneClient) listOffersCreateRequest(ctx context.Context, location string, edgeZone string, publisherName string, options *VirtualMachineImagesEdgeZoneListOffersOptions) (*azcore.Request, error) {
222	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers"
223	if location == "" {
224		return nil, errors.New("parameter location cannot be empty")
225	}
226	urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location))
227	if edgeZone == "" {
228		return nil, errors.New("parameter edgeZone cannot be empty")
229	}
230	urlPath = strings.ReplaceAll(urlPath, "{edgeZone}", url.PathEscape(edgeZone))
231	if publisherName == "" {
232		return nil, errors.New("parameter publisherName cannot be empty")
233	}
234	urlPath = strings.ReplaceAll(urlPath, "{publisherName}", url.PathEscape(publisherName))
235	if client.subscriptionID == "" {
236		return nil, errors.New("parameter client.subscriptionID cannot be empty")
237	}
238	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
239	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
240	if err != nil {
241		return nil, err
242	}
243	req.Telemetry(telemetryInfo)
244	reqQP := req.URL.Query()
245	reqQP.Set("api-version", "2021-03-01")
246	req.URL.RawQuery = reqQP.Encode()
247	req.Header.Set("Accept", "application/json")
248	return req, nil
249}
250
251// listOffersHandleResponse handles the ListOffers response.
252func (client *VirtualMachineImagesEdgeZoneClient) listOffersHandleResponse(resp *azcore.Response) (VirtualMachineImageResourceArrayResponse, error) {
253	var val []*VirtualMachineImageResource
254	if err := resp.UnmarshalAsJSON(&val); err != nil {
255		return VirtualMachineImageResourceArrayResponse{}, err
256	}
257	return VirtualMachineImageResourceArrayResponse{RawResponse: resp.Response, VirtualMachineImageResourceArray: val}, nil
258}
259
260// listOffersHandleError handles the ListOffers error response.
261func (client *VirtualMachineImagesEdgeZoneClient) listOffersHandleError(resp *azcore.Response) error {
262	body, err := resp.Payload()
263	if err != nil {
264		return azcore.NewResponseError(err, resp.Response)
265	}
266	errType := CloudError{raw: string(body)}
267	if err := resp.UnmarshalAsJSON(&errType); err != nil {
268		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
269	}
270	return azcore.NewResponseError(&errType, resp.Response)
271}
272
273// ListPublishers - Gets a list of virtual machine image publishers for the specified Azure location and edge zone.
274// If the operation fails it returns the *CloudError error type.
275func (client *VirtualMachineImagesEdgeZoneClient) ListPublishers(ctx context.Context, location string, edgeZone string, options *VirtualMachineImagesEdgeZoneListPublishersOptions) (VirtualMachineImageResourceArrayResponse, error) {
276	req, err := client.listPublishersCreateRequest(ctx, location, edgeZone, options)
277	if err != nil {
278		return VirtualMachineImageResourceArrayResponse{}, err
279	}
280	resp, err := client.con.Pipeline().Do(req)
281	if err != nil {
282		return VirtualMachineImageResourceArrayResponse{}, err
283	}
284	if !resp.HasStatusCode(http.StatusOK) {
285		return VirtualMachineImageResourceArrayResponse{}, client.listPublishersHandleError(resp)
286	}
287	return client.listPublishersHandleResponse(resp)
288}
289
290// listPublishersCreateRequest creates the ListPublishers request.
291func (client *VirtualMachineImagesEdgeZoneClient) listPublishersCreateRequest(ctx context.Context, location string, edgeZone string, options *VirtualMachineImagesEdgeZoneListPublishersOptions) (*azcore.Request, error) {
292	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers"
293	if location == "" {
294		return nil, errors.New("parameter location cannot be empty")
295	}
296	urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location))
297	if edgeZone == "" {
298		return nil, errors.New("parameter edgeZone cannot be empty")
299	}
300	urlPath = strings.ReplaceAll(urlPath, "{edgeZone}", url.PathEscape(edgeZone))
301	if client.subscriptionID == "" {
302		return nil, errors.New("parameter client.subscriptionID cannot be empty")
303	}
304	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
305	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
306	if err != nil {
307		return nil, err
308	}
309	req.Telemetry(telemetryInfo)
310	reqQP := req.URL.Query()
311	reqQP.Set("api-version", "2021-03-01")
312	req.URL.RawQuery = reqQP.Encode()
313	req.Header.Set("Accept", "application/json")
314	return req, nil
315}
316
317// listPublishersHandleResponse handles the ListPublishers response.
318func (client *VirtualMachineImagesEdgeZoneClient) listPublishersHandleResponse(resp *azcore.Response) (VirtualMachineImageResourceArrayResponse, error) {
319	var val []*VirtualMachineImageResource
320	if err := resp.UnmarshalAsJSON(&val); err != nil {
321		return VirtualMachineImageResourceArrayResponse{}, err
322	}
323	return VirtualMachineImageResourceArrayResponse{RawResponse: resp.Response, VirtualMachineImageResourceArray: val}, nil
324}
325
326// listPublishersHandleError handles the ListPublishers error response.
327func (client *VirtualMachineImagesEdgeZoneClient) listPublishersHandleError(resp *azcore.Response) error {
328	body, err := resp.Payload()
329	if err != nil {
330		return azcore.NewResponseError(err, resp.Response)
331	}
332	errType := CloudError{raw: string(body)}
333	if err := resp.UnmarshalAsJSON(&errType); err != nil {
334		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
335	}
336	return azcore.NewResponseError(&errType, resp.Response)
337}
338
339// ListSKUs - Gets a list of virtual machine image SKUs for the specified location, edge zone, publisher, and offer.
340// If the operation fails it returns the *CloudError error type.
341func (client *VirtualMachineImagesEdgeZoneClient) ListSKUs(ctx context.Context, location string, edgeZone string, publisherName string, offer string, options *VirtualMachineImagesEdgeZoneListSKUsOptions) (VirtualMachineImageResourceArrayResponse, error) {
342	req, err := client.listSKUsCreateRequest(ctx, location, edgeZone, publisherName, offer, options)
343	if err != nil {
344		return VirtualMachineImageResourceArrayResponse{}, err
345	}
346	resp, err := client.con.Pipeline().Do(req)
347	if err != nil {
348		return VirtualMachineImageResourceArrayResponse{}, err
349	}
350	if !resp.HasStatusCode(http.StatusOK) {
351		return VirtualMachineImageResourceArrayResponse{}, client.listSKUsHandleError(resp)
352	}
353	return client.listSKUsHandleResponse(resp)
354}
355
356// listSKUsCreateRequest creates the ListSKUs request.
357func (client *VirtualMachineImagesEdgeZoneClient) listSKUsCreateRequest(ctx context.Context, location string, edgeZone string, publisherName string, offer string, options *VirtualMachineImagesEdgeZoneListSKUsOptions) (*azcore.Request, error) {
358	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/edgeZones/{edgeZone}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus"
359	if location == "" {
360		return nil, errors.New("parameter location cannot be empty")
361	}
362	urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location))
363	if edgeZone == "" {
364		return nil, errors.New("parameter edgeZone cannot be empty")
365	}
366	urlPath = strings.ReplaceAll(urlPath, "{edgeZone}", url.PathEscape(edgeZone))
367	if publisherName == "" {
368		return nil, errors.New("parameter publisherName cannot be empty")
369	}
370	urlPath = strings.ReplaceAll(urlPath, "{publisherName}", url.PathEscape(publisherName))
371	if offer == "" {
372		return nil, errors.New("parameter offer cannot be empty")
373	}
374	urlPath = strings.ReplaceAll(urlPath, "{offer}", url.PathEscape(offer))
375	if client.subscriptionID == "" {
376		return nil, errors.New("parameter client.subscriptionID cannot be empty")
377	}
378	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
379	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
380	if err != nil {
381		return nil, err
382	}
383	req.Telemetry(telemetryInfo)
384	reqQP := req.URL.Query()
385	reqQP.Set("api-version", "2021-03-01")
386	req.URL.RawQuery = reqQP.Encode()
387	req.Header.Set("Accept", "application/json")
388	return req, nil
389}
390
391// listSKUsHandleResponse handles the ListSKUs response.
392func (client *VirtualMachineImagesEdgeZoneClient) listSKUsHandleResponse(resp *azcore.Response) (VirtualMachineImageResourceArrayResponse, error) {
393	var val []*VirtualMachineImageResource
394	if err := resp.UnmarshalAsJSON(&val); err != nil {
395		return VirtualMachineImageResourceArrayResponse{}, err
396	}
397	return VirtualMachineImageResourceArrayResponse{RawResponse: resp.Response, VirtualMachineImageResourceArray: val}, nil
398}
399
400// listSKUsHandleError handles the ListSKUs error response.
401func (client *VirtualMachineImagesEdgeZoneClient) listSKUsHandleError(resp *azcore.Response) error {
402	body, err := resp.Payload()
403	if err != nil {
404		return azcore.NewResponseError(err, resp.Response)
405	}
406	errType := CloudError{raw: string(body)}
407	if err := resp.UnmarshalAsJSON(&errType); err != nil {
408		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
409	}
410	return azcore.NewResponseError(&errType, resp.Response)
411}
412