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// DdosCustomPoliciesClient contains the methods for the DdosCustomPolicies group.
21// Don't use this type directly, use NewDdosCustomPoliciesClient() instead.
22type DdosCustomPoliciesClient struct {
23	con            *armcore.Connection
24	subscriptionID string
25}
26
27// NewDdosCustomPoliciesClient creates a new instance of DdosCustomPoliciesClient with the specified values.
28func NewDdosCustomPoliciesClient(con *armcore.Connection, subscriptionID string) *DdosCustomPoliciesClient {
29	return &DdosCustomPoliciesClient{con: con, subscriptionID: subscriptionID}
30}
31
32// BeginCreateOrUpdate - Creates or updates a DDoS custom policy.
33func (client *DdosCustomPoliciesClient) BeginCreateOrUpdate(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, parameters DdosCustomPolicy, options *DdosCustomPoliciesBeginCreateOrUpdateOptions) (DdosCustomPolicyPollerResponse, error) {
34	resp, err := client.createOrUpdate(ctx, resourceGroupName, ddosCustomPolicyName, parameters, options)
35	if err != nil {
36		return DdosCustomPolicyPollerResponse{}, err
37	}
38	result := DdosCustomPolicyPollerResponse{
39		RawResponse: resp.Response,
40	}
41	pt, err := armcore.NewPoller("DdosCustomPoliciesClient.CreateOrUpdate", "azure-async-operation", resp, client.createOrUpdateHandleError)
42	if err != nil {
43		return DdosCustomPolicyPollerResponse{}, err
44	}
45	poller := &ddosCustomPolicyPoller{
46		pt:       pt,
47		pipeline: client.con.Pipeline(),
48	}
49	result.Poller = poller
50	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (DdosCustomPolicyResponse, error) {
51		return poller.pollUntilDone(ctx, frequency)
52	}
53	return result, nil
54}
55
56// ResumeCreateOrUpdate creates a new DdosCustomPolicyPoller from the specified resume token.
57// token - The value must come from a previous call to DdosCustomPolicyPoller.ResumeToken().
58func (client *DdosCustomPoliciesClient) ResumeCreateOrUpdate(token string) (DdosCustomPolicyPoller, error) {
59	pt, err := armcore.NewPollerFromResumeToken("DdosCustomPoliciesClient.CreateOrUpdate", token, client.createOrUpdateHandleError)
60	if err != nil {
61		return nil, err
62	}
63	return &ddosCustomPolicyPoller{
64		pipeline: client.con.Pipeline(),
65		pt:       pt,
66	}, nil
67}
68
69// CreateOrUpdate - Creates or updates a DDoS custom policy.
70func (client *DdosCustomPoliciesClient) createOrUpdate(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, parameters DdosCustomPolicy, options *DdosCustomPoliciesBeginCreateOrUpdateOptions) (*azcore.Response, error) {
71	req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, ddosCustomPolicyName, 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 *DdosCustomPoliciesClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, parameters DdosCustomPolicy, options *DdosCustomPoliciesBeginCreateOrUpdateOptions) (*azcore.Request, error) {
87	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ddosCustomPolicies/{ddosCustomPolicyName}"
88	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
89	urlPath = strings.ReplaceAll(urlPath, "{ddosCustomPolicyName}", url.PathEscape(ddosCustomPolicyName))
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 *DdosCustomPoliciesClient) createOrUpdateHandleResponse(resp *azcore.Response) (DdosCustomPolicyResponse, error) {
105	var val *DdosCustomPolicy
106	if err := resp.UnmarshalAsJSON(&val); err != nil {
107		return DdosCustomPolicyResponse{}, err
108	}
109	return DdosCustomPolicyResponse{RawResponse: resp.Response, DdosCustomPolicy: val}, nil
110}
111
112// createOrUpdateHandleError handles the CreateOrUpdate error response.
113func (client *DdosCustomPoliciesClient) 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 DDoS custom policy.
122func (client *DdosCustomPoliciesClient) BeginDelete(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, options *DdosCustomPoliciesBeginDeleteOptions) (HTTPPollerResponse, error) {
123	resp, err := client.delete(ctx, resourceGroupName, ddosCustomPolicyName, options)
124	if err != nil {
125		return HTTPPollerResponse{}, err
126	}
127	result := HTTPPollerResponse{
128		RawResponse: resp.Response,
129	}
130	pt, err := armcore.NewPoller("DdosCustomPoliciesClient.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 *DdosCustomPoliciesClient) ResumeDelete(token string) (HTTPPoller, error) {
148	pt, err := armcore.NewPollerFromResumeToken("DdosCustomPoliciesClient.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 DDoS custom policy.
159func (client *DdosCustomPoliciesClient) delete(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, options *DdosCustomPoliciesBeginDeleteOptions) (*azcore.Response, error) {
160	req, err := client.deleteCreateRequest(ctx, resourceGroupName, ddosCustomPolicyName, 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 *DdosCustomPoliciesClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, options *DdosCustomPoliciesBeginDeleteOptions) (*azcore.Request, error) {
176	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ddosCustomPolicies/{ddosCustomPolicyName}"
177	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
178	urlPath = strings.ReplaceAll(urlPath, "{ddosCustomPolicyName}", url.PathEscape(ddosCustomPolicyName))
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 *DdosCustomPoliciesClient) 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 DDoS custom policy.
202func (client *DdosCustomPoliciesClient) Get(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, options *DdosCustomPoliciesGetOptions) (DdosCustomPolicyResponse, error) {
203	req, err := client.getCreateRequest(ctx, resourceGroupName, ddosCustomPolicyName, options)
204	if err != nil {
205		return DdosCustomPolicyResponse{}, err
206	}
207	resp, err := client.con.Pipeline().Do(req)
208	if err != nil {
209		return DdosCustomPolicyResponse{}, err
210	}
211	if !resp.HasStatusCode(http.StatusOK) {
212		return DdosCustomPolicyResponse{}, client.getHandleError(resp)
213	}
214	return client.getHandleResponse(resp)
215}
216
217// getCreateRequest creates the Get request.
218func (client *DdosCustomPoliciesClient) getCreateRequest(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, options *DdosCustomPoliciesGetOptions) (*azcore.Request, error) {
219	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ddosCustomPolicies/{ddosCustomPolicyName}"
220	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
221	urlPath = strings.ReplaceAll(urlPath, "{ddosCustomPolicyName}", url.PathEscape(ddosCustomPolicyName))
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 *DdosCustomPoliciesClient) getHandleResponse(resp *azcore.Response) (DdosCustomPolicyResponse, error) {
237	var val *DdosCustomPolicy
238	if err := resp.UnmarshalAsJSON(&val); err != nil {
239		return DdosCustomPolicyResponse{}, err
240	}
241	return DdosCustomPolicyResponse{RawResponse: resp.Response, DdosCustomPolicy: val}, nil
242}
243
244// getHandleError handles the Get error response.
245func (client *DdosCustomPoliciesClient) 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// UpdateTags - Update a DDoS custom policy tags.
254func (client *DdosCustomPoliciesClient) UpdateTags(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, parameters TagsObject, options *DdosCustomPoliciesUpdateTagsOptions) (DdosCustomPolicyResponse, error) {
255	req, err := client.updateTagsCreateRequest(ctx, resourceGroupName, ddosCustomPolicyName, parameters, options)
256	if err != nil {
257		return DdosCustomPolicyResponse{}, err
258	}
259	resp, err := client.con.Pipeline().Do(req)
260	if err != nil {
261		return DdosCustomPolicyResponse{}, err
262	}
263	if !resp.HasStatusCode(http.StatusOK) {
264		return DdosCustomPolicyResponse{}, client.updateTagsHandleError(resp)
265	}
266	return client.updateTagsHandleResponse(resp)
267}
268
269// updateTagsCreateRequest creates the UpdateTags request.
270func (client *DdosCustomPoliciesClient) updateTagsCreateRequest(ctx context.Context, resourceGroupName string, ddosCustomPolicyName string, parameters TagsObject, options *DdosCustomPoliciesUpdateTagsOptions) (*azcore.Request, error) {
271	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/ddosCustomPolicies/{ddosCustomPolicyName}"
272	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
273	urlPath = strings.ReplaceAll(urlPath, "{ddosCustomPolicyName}", url.PathEscape(ddosCustomPolicyName))
274	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
275	req, err := azcore.NewRequest(ctx, http.MethodPatch, azcore.JoinPaths(client.con.Endpoint(), urlPath))
276	if err != nil {
277		return nil, err
278	}
279	req.Telemetry(telemetryInfo)
280	query := req.URL.Query()
281	query.Set("api-version", "2020-07-01")
282	req.URL.RawQuery = query.Encode()
283	req.Header.Set("Accept", "application/json")
284	return req, req.MarshalAsJSON(parameters)
285}
286
287// updateTagsHandleResponse handles the UpdateTags response.
288func (client *DdosCustomPoliciesClient) updateTagsHandleResponse(resp *azcore.Response) (DdosCustomPolicyResponse, error) {
289	var val *DdosCustomPolicy
290	if err := resp.UnmarshalAsJSON(&val); err != nil {
291		return DdosCustomPolicyResponse{}, err
292	}
293	return DdosCustomPolicyResponse{RawResponse: resp.Response, DdosCustomPolicy: val}, nil
294}
295
296// updateTagsHandleError handles the UpdateTags error response.
297func (client *DdosCustomPoliciesClient) updateTagsHandleError(resp *azcore.Response) error {
298	var err CloudError
299	if err := resp.UnmarshalAsJSON(&err); err != nil {
300		return err
301	}
302	return azcore.NewResponseError(&err, resp.Response)
303}
304