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 armnetwork
9
10import (
11	"context"
12	"github.com/Azure/azure-sdk-for-go/sdk/armcore"
13	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
14	"net/http"
15	"net/url"
16	"strings"
17	"time"
18)
19
20// VirtualNetworkTapsClient contains the methods for the VirtualNetworkTaps group.
21// Don't use this type directly, use NewVirtualNetworkTapsClient() instead.
22type VirtualNetworkTapsClient struct {
23	con            *armcore.Connection
24	subscriptionID string
25}
26
27// NewVirtualNetworkTapsClient creates a new instance of VirtualNetworkTapsClient with the specified values.
28func NewVirtualNetworkTapsClient(con *armcore.Connection, subscriptionID string) *VirtualNetworkTapsClient {
29	return &VirtualNetworkTapsClient{con: con, subscriptionID: subscriptionID}
30}
31
32// BeginCreateOrUpdate - Creates or updates a Virtual Network Tap.
33func (client *VirtualNetworkTapsClient) BeginCreateOrUpdate(ctx context.Context, resourceGroupName string, tapName string, parameters VirtualNetworkTap, options *VirtualNetworkTapsBeginCreateOrUpdateOptions) (VirtualNetworkTapPollerResponse, error) {
34	resp, err := client.createOrUpdate(ctx, resourceGroupName, tapName, parameters, options)
35	if err != nil {
36		return VirtualNetworkTapPollerResponse{}, err
37	}
38	result := VirtualNetworkTapPollerResponse{
39		RawResponse: resp.Response,
40	}
41	pt, err := armcore.NewPoller("VirtualNetworkTapsClient.CreateOrUpdate", "azure-async-operation", resp, client.createOrUpdateHandleError)
42	if err != nil {
43		return VirtualNetworkTapPollerResponse{}, err
44	}
45	poller := &virtualNetworkTapPoller{
46		pt:       pt,
47		pipeline: client.con.Pipeline(),
48	}
49	result.Poller = poller
50	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (VirtualNetworkTapResponse, error) {
51		return poller.pollUntilDone(ctx, frequency)
52	}
53	return result, nil
54}
55
56// ResumeCreateOrUpdate creates a new VirtualNetworkTapPoller from the specified resume token.
57// token - The value must come from a previous call to VirtualNetworkTapPoller.ResumeToken().
58func (client *VirtualNetworkTapsClient) ResumeCreateOrUpdate(token string) (VirtualNetworkTapPoller, error) {
59	pt, err := armcore.NewPollerFromResumeToken("VirtualNetworkTapsClient.CreateOrUpdate", token, client.createOrUpdateHandleError)
60	if err != nil {
61		return nil, err
62	}
63	return &virtualNetworkTapPoller{
64		pipeline: client.con.Pipeline(),
65		pt:       pt,
66	}, nil
67}
68
69// CreateOrUpdate - Creates or updates a Virtual Network Tap.
70func (client *VirtualNetworkTapsClient) createOrUpdate(ctx context.Context, resourceGroupName string, tapName string, parameters VirtualNetworkTap, options *VirtualNetworkTapsBeginCreateOrUpdateOptions) (*azcore.Response, error) {
71	req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, tapName, parameters, options)
72	if err != nil {
73		return nil, err
74	}
75	resp, err := client.con.Pipeline().Do(req)
76	if err != nil {
77		return nil, err
78	}
79	if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) {
80		return nil, client.createOrUpdateHandleError(resp)
81	}
82	return resp, nil
83}
84
85// createOrUpdateCreateRequest creates the CreateOrUpdate request.
86func (client *VirtualNetworkTapsClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, tapName string, parameters VirtualNetworkTap, options *VirtualNetworkTapsBeginCreateOrUpdateOptions) (*azcore.Request, error) {
87	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkTaps/{tapName}"
88	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
89	urlPath = strings.ReplaceAll(urlPath, "{tapName}", url.PathEscape(tapName))
90	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
91	req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath))
92	if err != nil {
93		return nil, err
94	}
95	req.Telemetry(telemetryInfo)
96	query := req.URL.Query()
97	query.Set("api-version", "2020-07-01")
98	req.URL.RawQuery = query.Encode()
99	req.Header.Set("Accept", "application/json")
100	return req, req.MarshalAsJSON(parameters)
101}
102
103// createOrUpdateHandleResponse handles the CreateOrUpdate response.
104func (client *VirtualNetworkTapsClient) createOrUpdateHandleResponse(resp *azcore.Response) (VirtualNetworkTapResponse, error) {
105	var val *VirtualNetworkTap
106	if err := resp.UnmarshalAsJSON(&val); err != nil {
107		return VirtualNetworkTapResponse{}, err
108	}
109	return VirtualNetworkTapResponse{RawResponse: resp.Response, VirtualNetworkTap: val}, nil
110}
111
112// createOrUpdateHandleError handles the CreateOrUpdate error response.
113func (client *VirtualNetworkTapsClient) createOrUpdateHandleError(resp *azcore.Response) error {
114	var err CloudError
115	if err := resp.UnmarshalAsJSON(&err); err != nil {
116		return err
117	}
118	return azcore.NewResponseError(&err, resp.Response)
119}
120
121// BeginDelete - Deletes the specified virtual network tap.
122func (client *VirtualNetworkTapsClient) BeginDelete(ctx context.Context, resourceGroupName string, tapName string, options *VirtualNetworkTapsBeginDeleteOptions) (HTTPPollerResponse, error) {
123	resp, err := client.delete(ctx, resourceGroupName, tapName, options)
124	if err != nil {
125		return HTTPPollerResponse{}, err
126	}
127	result := HTTPPollerResponse{
128		RawResponse: resp.Response,
129	}
130	pt, err := armcore.NewPoller("VirtualNetworkTapsClient.Delete", "location", resp, client.deleteHandleError)
131	if err != nil {
132		return HTTPPollerResponse{}, err
133	}
134	poller := &httpPoller{
135		pt:       pt,
136		pipeline: client.con.Pipeline(),
137	}
138	result.Poller = poller
139	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
140		return poller.pollUntilDone(ctx, frequency)
141	}
142	return result, nil
143}
144
145// ResumeDelete creates a new HTTPPoller from the specified resume token.
146// token - The value must come from a previous call to HTTPPoller.ResumeToken().
147func (client *VirtualNetworkTapsClient) ResumeDelete(token string) (HTTPPoller, error) {
148	pt, err := armcore.NewPollerFromResumeToken("VirtualNetworkTapsClient.Delete", token, client.deleteHandleError)
149	if err != nil {
150		return nil, err
151	}
152	return &httpPoller{
153		pipeline: client.con.Pipeline(),
154		pt:       pt,
155	}, nil
156}
157
158// Delete - Deletes the specified virtual network tap.
159func (client *VirtualNetworkTapsClient) delete(ctx context.Context, resourceGroupName string, tapName string, options *VirtualNetworkTapsBeginDeleteOptions) (*azcore.Response, error) {
160	req, err := client.deleteCreateRequest(ctx, resourceGroupName, tapName, options)
161	if err != nil {
162		return nil, err
163	}
164	resp, err := client.con.Pipeline().Do(req)
165	if err != nil {
166		return nil, err
167	}
168	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) {
169		return nil, client.deleteHandleError(resp)
170	}
171	return resp, nil
172}
173
174// deleteCreateRequest creates the Delete request.
175func (client *VirtualNetworkTapsClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, tapName string, options *VirtualNetworkTapsBeginDeleteOptions) (*azcore.Request, error) {
176	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkTaps/{tapName}"
177	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
178	urlPath = strings.ReplaceAll(urlPath, "{tapName}", url.PathEscape(tapName))
179	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
180	req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath))
181	if err != nil {
182		return nil, err
183	}
184	req.Telemetry(telemetryInfo)
185	query := req.URL.Query()
186	query.Set("api-version", "2020-07-01")
187	req.URL.RawQuery = query.Encode()
188	req.Header.Set("Accept", "application/json")
189	return req, nil
190}
191
192// deleteHandleError handles the Delete error response.
193func (client *VirtualNetworkTapsClient) deleteHandleError(resp *azcore.Response) error {
194	var err CloudError
195	if err := resp.UnmarshalAsJSON(&err); err != nil {
196		return err
197	}
198	return azcore.NewResponseError(&err, resp.Response)
199}
200
201// Get - Gets information about the specified virtual network tap.
202func (client *VirtualNetworkTapsClient) Get(ctx context.Context, resourceGroupName string, tapName string, options *VirtualNetworkTapsGetOptions) (VirtualNetworkTapResponse, error) {
203	req, err := client.getCreateRequest(ctx, resourceGroupName, tapName, options)
204	if err != nil {
205		return VirtualNetworkTapResponse{}, err
206	}
207	resp, err := client.con.Pipeline().Do(req)
208	if err != nil {
209		return VirtualNetworkTapResponse{}, err
210	}
211	if !resp.HasStatusCode(http.StatusOK) {
212		return VirtualNetworkTapResponse{}, client.getHandleError(resp)
213	}
214	return client.getHandleResponse(resp)
215}
216
217// getCreateRequest creates the Get request.
218func (client *VirtualNetworkTapsClient) getCreateRequest(ctx context.Context, resourceGroupName string, tapName string, options *VirtualNetworkTapsGetOptions) (*azcore.Request, error) {
219	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkTaps/{tapName}"
220	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
221	urlPath = strings.ReplaceAll(urlPath, "{tapName}", url.PathEscape(tapName))
222	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
223	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
224	if err != nil {
225		return nil, err
226	}
227	req.Telemetry(telemetryInfo)
228	query := req.URL.Query()
229	query.Set("api-version", "2020-07-01")
230	req.URL.RawQuery = query.Encode()
231	req.Header.Set("Accept", "application/json")
232	return req, nil
233}
234
235// getHandleResponse handles the Get response.
236func (client *VirtualNetworkTapsClient) getHandleResponse(resp *azcore.Response) (VirtualNetworkTapResponse, error) {
237	var val *VirtualNetworkTap
238	if err := resp.UnmarshalAsJSON(&val); err != nil {
239		return VirtualNetworkTapResponse{}, err
240	}
241	return VirtualNetworkTapResponse{RawResponse: resp.Response, VirtualNetworkTap: val}, nil
242}
243
244// getHandleError handles the Get error response.
245func (client *VirtualNetworkTapsClient) getHandleError(resp *azcore.Response) error {
246	var err CloudError
247	if err := resp.UnmarshalAsJSON(&err); err != nil {
248		return err
249	}
250	return azcore.NewResponseError(&err, resp.Response)
251}
252
253// ListAll - Gets all the VirtualNetworkTaps in a subscription.
254func (client *VirtualNetworkTapsClient) ListAll(options *VirtualNetworkTapsListAllOptions) VirtualNetworkTapListResultPager {
255	return &virtualNetworkTapListResultPager{
256		pipeline: client.con.Pipeline(),
257		requester: func(ctx context.Context) (*azcore.Request, error) {
258			return client.listAllCreateRequest(ctx, options)
259		},
260		responder: client.listAllHandleResponse,
261		errorer:   client.listAllHandleError,
262		advancer: func(ctx context.Context, resp VirtualNetworkTapListResultResponse) (*azcore.Request, error) {
263			return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualNetworkTapListResult.NextLink)
264		},
265		statusCodes: []int{http.StatusOK},
266	}
267}
268
269// listAllCreateRequest creates the ListAll request.
270func (client *VirtualNetworkTapsClient) listAllCreateRequest(ctx context.Context, options *VirtualNetworkTapsListAllOptions) (*azcore.Request, error) {
271	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Network/virtualNetworkTaps"
272	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
273	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
274	if err != nil {
275		return nil, err
276	}
277	req.Telemetry(telemetryInfo)
278	query := req.URL.Query()
279	query.Set("api-version", "2020-07-01")
280	req.URL.RawQuery = query.Encode()
281	req.Header.Set("Accept", "application/json")
282	return req, nil
283}
284
285// listAllHandleResponse handles the ListAll response.
286func (client *VirtualNetworkTapsClient) listAllHandleResponse(resp *azcore.Response) (VirtualNetworkTapListResultResponse, error) {
287	var val *VirtualNetworkTapListResult
288	if err := resp.UnmarshalAsJSON(&val); err != nil {
289		return VirtualNetworkTapListResultResponse{}, err
290	}
291	return VirtualNetworkTapListResultResponse{RawResponse: resp.Response, VirtualNetworkTapListResult: val}, nil
292}
293
294// listAllHandleError handles the ListAll error response.
295func (client *VirtualNetworkTapsClient) listAllHandleError(resp *azcore.Response) error {
296	var err CloudError
297	if err := resp.UnmarshalAsJSON(&err); err != nil {
298		return err
299	}
300	return azcore.NewResponseError(&err, resp.Response)
301}
302
303// ListByResourceGroup - Gets all the VirtualNetworkTaps in a subscription.
304func (client *VirtualNetworkTapsClient) ListByResourceGroup(resourceGroupName string, options *VirtualNetworkTapsListByResourceGroupOptions) VirtualNetworkTapListResultPager {
305	return &virtualNetworkTapListResultPager{
306		pipeline: client.con.Pipeline(),
307		requester: func(ctx context.Context) (*azcore.Request, error) {
308			return client.listByResourceGroupCreateRequest(ctx, resourceGroupName, options)
309		},
310		responder: client.listByResourceGroupHandleResponse,
311		errorer:   client.listByResourceGroupHandleError,
312		advancer: func(ctx context.Context, resp VirtualNetworkTapListResultResponse) (*azcore.Request, error) {
313			return azcore.NewRequest(ctx, http.MethodGet, *resp.VirtualNetworkTapListResult.NextLink)
314		},
315		statusCodes: []int{http.StatusOK},
316	}
317}
318
319// listByResourceGroupCreateRequest creates the ListByResourceGroup request.
320func (client *VirtualNetworkTapsClient) listByResourceGroupCreateRequest(ctx context.Context, resourceGroupName string, options *VirtualNetworkTapsListByResourceGroupOptions) (*azcore.Request, error) {
321	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkTaps"
322	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
323	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
324	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
325	if err != nil {
326		return nil, err
327	}
328	req.Telemetry(telemetryInfo)
329	query := req.URL.Query()
330	query.Set("api-version", "2020-07-01")
331	req.URL.RawQuery = query.Encode()
332	req.Header.Set("Accept", "application/json")
333	return req, nil
334}
335
336// listByResourceGroupHandleResponse handles the ListByResourceGroup response.
337func (client *VirtualNetworkTapsClient) listByResourceGroupHandleResponse(resp *azcore.Response) (VirtualNetworkTapListResultResponse, error) {
338	var val *VirtualNetworkTapListResult
339	if err := resp.UnmarshalAsJSON(&val); err != nil {
340		return VirtualNetworkTapListResultResponse{}, err
341	}
342	return VirtualNetworkTapListResultResponse{RawResponse: resp.Response, VirtualNetworkTapListResult: val}, nil
343}
344
345// listByResourceGroupHandleError handles the ListByResourceGroup error response.
346func (client *VirtualNetworkTapsClient) listByResourceGroupHandleError(resp *azcore.Response) error {
347	var err CloudError
348	if err := resp.UnmarshalAsJSON(&err); err != nil {
349		return err
350	}
351	return azcore.NewResponseError(&err, resp.Response)
352}
353
354// UpdateTags - Updates an VirtualNetworkTap tags.
355func (client *VirtualNetworkTapsClient) UpdateTags(ctx context.Context, resourceGroupName string, tapName string, tapParameters TagsObject, options *VirtualNetworkTapsUpdateTagsOptions) (VirtualNetworkTapResponse, error) {
356	req, err := client.updateTagsCreateRequest(ctx, resourceGroupName, tapName, tapParameters, options)
357	if err != nil {
358		return VirtualNetworkTapResponse{}, err
359	}
360	resp, err := client.con.Pipeline().Do(req)
361	if err != nil {
362		return VirtualNetworkTapResponse{}, err
363	}
364	if !resp.HasStatusCode(http.StatusOK) {
365		return VirtualNetworkTapResponse{}, client.updateTagsHandleError(resp)
366	}
367	return client.updateTagsHandleResponse(resp)
368}
369
370// updateTagsCreateRequest creates the UpdateTags request.
371func (client *VirtualNetworkTapsClient) updateTagsCreateRequest(ctx context.Context, resourceGroupName string, tapName string, tapParameters TagsObject, options *VirtualNetworkTapsUpdateTagsOptions) (*azcore.Request, error) {
372	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkTaps/{tapName}"
373	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
374	urlPath = strings.ReplaceAll(urlPath, "{tapName}", url.PathEscape(tapName))
375	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
376	req, err := azcore.NewRequest(ctx, http.MethodPatch, azcore.JoinPaths(client.con.Endpoint(), urlPath))
377	if err != nil {
378		return nil, err
379	}
380	req.Telemetry(telemetryInfo)
381	query := req.URL.Query()
382	query.Set("api-version", "2020-07-01")
383	req.URL.RawQuery = query.Encode()
384	req.Header.Set("Accept", "application/json")
385	return req, req.MarshalAsJSON(tapParameters)
386}
387
388// updateTagsHandleResponse handles the UpdateTags response.
389func (client *VirtualNetworkTapsClient) updateTagsHandleResponse(resp *azcore.Response) (VirtualNetworkTapResponse, error) {
390	var val *VirtualNetworkTap
391	if err := resp.UnmarshalAsJSON(&val); err != nil {
392		return VirtualNetworkTapResponse{}, err
393	}
394	return VirtualNetworkTapResponse{RawResponse: resp.Response, VirtualNetworkTap: val}, nil
395}
396
397// updateTagsHandleError handles the UpdateTags error response.
398func (client *VirtualNetworkTapsClient) updateTagsHandleError(resp *azcore.Response) error {
399	var err CloudError
400	if err := resp.UnmarshalAsJSON(&err); err != nil {
401		return err
402	}
403	return azcore.NewResponseError(&err, resp.Response)
404}
405