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 armmonitor
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	"strings"
19)
20
21// LogProfilesClient contains the methods for the LogProfiles group.
22// Don't use this type directly, use NewLogProfilesClient() instead.
23type LogProfilesClient struct {
24	con            *armcore.Connection
25	subscriptionID string
26}
27
28// NewLogProfilesClient creates a new instance of LogProfilesClient with the specified values.
29func NewLogProfilesClient(con *armcore.Connection, subscriptionID string) *LogProfilesClient {
30	return &LogProfilesClient{con: con, subscriptionID: subscriptionID}
31}
32
33// CreateOrUpdate - Create or update a log profile in Azure Monitoring REST API.
34// If the operation fails it returns a generic error.
35func (client *LogProfilesClient) CreateOrUpdate(ctx context.Context, logProfileName string, parameters LogProfileResource, options *LogProfilesCreateOrUpdateOptions) (LogProfileResourceResponse, error) {
36	req, err := client.createOrUpdateCreateRequest(ctx, logProfileName, parameters, options)
37	if err != nil {
38		return LogProfileResourceResponse{}, err
39	}
40	resp, err := client.con.Pipeline().Do(req)
41	if err != nil {
42		return LogProfileResourceResponse{}, err
43	}
44	if !resp.HasStatusCode(http.StatusOK) {
45		return LogProfileResourceResponse{}, client.createOrUpdateHandleError(resp)
46	}
47	return client.createOrUpdateHandleResponse(resp)
48}
49
50// createOrUpdateCreateRequest creates the CreateOrUpdate request.
51func (client *LogProfilesClient) createOrUpdateCreateRequest(ctx context.Context, logProfileName string, parameters LogProfileResource, options *LogProfilesCreateOrUpdateOptions) (*azcore.Request, error) {
52	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/logprofiles/{logProfileName}"
53	if logProfileName == "" {
54		return nil, errors.New("parameter logProfileName cannot be empty")
55	}
56	urlPath = strings.ReplaceAll(urlPath, "{logProfileName}", url.PathEscape(logProfileName))
57	if client.subscriptionID == "" {
58		return nil, errors.New("parameter client.subscriptionID cannot be empty")
59	}
60	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
61	req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath))
62	if err != nil {
63		return nil, err
64	}
65	req.Telemetry(telemetryInfo)
66	reqQP := req.URL.Query()
67	reqQP.Set("api-version", "2016-03-01")
68	req.URL.RawQuery = reqQP.Encode()
69	req.Header.Set("Accept", "application/json")
70	return req, req.MarshalAsJSON(parameters)
71}
72
73// createOrUpdateHandleResponse handles the CreateOrUpdate response.
74func (client *LogProfilesClient) createOrUpdateHandleResponse(resp *azcore.Response) (LogProfileResourceResponse, error) {
75	var val *LogProfileResource
76	if err := resp.UnmarshalAsJSON(&val); err != nil {
77		return LogProfileResourceResponse{}, err
78	}
79	return LogProfileResourceResponse{RawResponse: resp.Response, LogProfileResource: val}, nil
80}
81
82// createOrUpdateHandleError handles the CreateOrUpdate error response.
83func (client *LogProfilesClient) createOrUpdateHandleError(resp *azcore.Response) error {
84	body, err := resp.Payload()
85	if err != nil {
86		return azcore.NewResponseError(err, resp.Response)
87	}
88	if len(body) == 0 {
89		return azcore.NewResponseError(errors.New(resp.Status), resp.Response)
90	}
91	return azcore.NewResponseError(errors.New(string(body)), resp.Response)
92}
93
94// Delete - Deletes the log profile.
95// If the operation fails it returns a generic error.
96func (client *LogProfilesClient) Delete(ctx context.Context, logProfileName string, options *LogProfilesDeleteOptions) (*http.Response, error) {
97	req, err := client.deleteCreateRequest(ctx, logProfileName, options)
98	if err != nil {
99		return nil, err
100	}
101	resp, err := client.con.Pipeline().Do(req)
102	if err != nil {
103		return nil, err
104	}
105	if !resp.HasStatusCode(http.StatusOK) {
106		return nil, client.deleteHandleError(resp)
107	}
108	return resp.Response, nil
109}
110
111// deleteCreateRequest creates the Delete request.
112func (client *LogProfilesClient) deleteCreateRequest(ctx context.Context, logProfileName string, options *LogProfilesDeleteOptions) (*azcore.Request, error) {
113	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/logprofiles/{logProfileName}"
114	if logProfileName == "" {
115		return nil, errors.New("parameter logProfileName cannot be empty")
116	}
117	urlPath = strings.ReplaceAll(urlPath, "{logProfileName}", url.PathEscape(logProfileName))
118	if client.subscriptionID == "" {
119		return nil, errors.New("parameter client.subscriptionID cannot be empty")
120	}
121	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
122	req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath))
123	if err != nil {
124		return nil, err
125	}
126	req.Telemetry(telemetryInfo)
127	reqQP := req.URL.Query()
128	reqQP.Set("api-version", "2016-03-01")
129	req.URL.RawQuery = reqQP.Encode()
130	return req, nil
131}
132
133// deleteHandleError handles the Delete error response.
134func (client *LogProfilesClient) deleteHandleError(resp *azcore.Response) error {
135	body, err := resp.Payload()
136	if err != nil {
137		return azcore.NewResponseError(err, resp.Response)
138	}
139	if len(body) == 0 {
140		return azcore.NewResponseError(errors.New(resp.Status), resp.Response)
141	}
142	return azcore.NewResponseError(errors.New(string(body)), resp.Response)
143}
144
145// Get - Gets the log profile.
146// If the operation fails it returns the *ErrorResponse error type.
147func (client *LogProfilesClient) Get(ctx context.Context, logProfileName string, options *LogProfilesGetOptions) (LogProfileResourceResponse, error) {
148	req, err := client.getCreateRequest(ctx, logProfileName, options)
149	if err != nil {
150		return LogProfileResourceResponse{}, err
151	}
152	resp, err := client.con.Pipeline().Do(req)
153	if err != nil {
154		return LogProfileResourceResponse{}, err
155	}
156	if !resp.HasStatusCode(http.StatusOK) {
157		return LogProfileResourceResponse{}, client.getHandleError(resp)
158	}
159	return client.getHandleResponse(resp)
160}
161
162// getCreateRequest creates the Get request.
163func (client *LogProfilesClient) getCreateRequest(ctx context.Context, logProfileName string, options *LogProfilesGetOptions) (*azcore.Request, error) {
164	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/logprofiles/{logProfileName}"
165	if logProfileName == "" {
166		return nil, errors.New("parameter logProfileName cannot be empty")
167	}
168	urlPath = strings.ReplaceAll(urlPath, "{logProfileName}", url.PathEscape(logProfileName))
169	if client.subscriptionID == "" {
170		return nil, errors.New("parameter client.subscriptionID cannot be empty")
171	}
172	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
173	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
174	if err != nil {
175		return nil, err
176	}
177	req.Telemetry(telemetryInfo)
178	reqQP := req.URL.Query()
179	reqQP.Set("api-version", "2016-03-01")
180	req.URL.RawQuery = reqQP.Encode()
181	req.Header.Set("Accept", "application/json")
182	return req, nil
183}
184
185// getHandleResponse handles the Get response.
186func (client *LogProfilesClient) getHandleResponse(resp *azcore.Response) (LogProfileResourceResponse, error) {
187	var val *LogProfileResource
188	if err := resp.UnmarshalAsJSON(&val); err != nil {
189		return LogProfileResourceResponse{}, err
190	}
191	return LogProfileResourceResponse{RawResponse: resp.Response, LogProfileResource: val}, nil
192}
193
194// getHandleError handles the Get error response.
195func (client *LogProfilesClient) getHandleError(resp *azcore.Response) error {
196	body, err := resp.Payload()
197	if err != nil {
198		return azcore.NewResponseError(err, resp.Response)
199	}
200	errType := ErrorResponse{raw: string(body)}
201	if err := resp.UnmarshalAsJSON(&errType); err != nil {
202		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
203	}
204	return azcore.NewResponseError(&errType, resp.Response)
205}
206
207// List - List the log profiles.
208// If the operation fails it returns a generic error.
209func (client *LogProfilesClient) List(ctx context.Context, options *LogProfilesListOptions) (LogProfileCollectionResponse, error) {
210	req, err := client.listCreateRequest(ctx, options)
211	if err != nil {
212		return LogProfileCollectionResponse{}, err
213	}
214	resp, err := client.con.Pipeline().Do(req)
215	if err != nil {
216		return LogProfileCollectionResponse{}, err
217	}
218	if !resp.HasStatusCode(http.StatusOK) {
219		return LogProfileCollectionResponse{}, client.listHandleError(resp)
220	}
221	return client.listHandleResponse(resp)
222}
223
224// listCreateRequest creates the List request.
225func (client *LogProfilesClient) listCreateRequest(ctx context.Context, options *LogProfilesListOptions) (*azcore.Request, error) {
226	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/logprofiles"
227	if client.subscriptionID == "" {
228		return nil, errors.New("parameter client.subscriptionID cannot be empty")
229	}
230	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
231	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
232	if err != nil {
233		return nil, err
234	}
235	req.Telemetry(telemetryInfo)
236	reqQP := req.URL.Query()
237	reqQP.Set("api-version", "2016-03-01")
238	req.URL.RawQuery = reqQP.Encode()
239	req.Header.Set("Accept", "application/json")
240	return req, nil
241}
242
243// listHandleResponse handles the List response.
244func (client *LogProfilesClient) listHandleResponse(resp *azcore.Response) (LogProfileCollectionResponse, error) {
245	var val *LogProfileCollection
246	if err := resp.UnmarshalAsJSON(&val); err != nil {
247		return LogProfileCollectionResponse{}, err
248	}
249	return LogProfileCollectionResponse{RawResponse: resp.Response, LogProfileCollection: val}, nil
250}
251
252// listHandleError handles the List error response.
253func (client *LogProfilesClient) listHandleError(resp *azcore.Response) error {
254	body, err := resp.Payload()
255	if err != nil {
256		return azcore.NewResponseError(err, resp.Response)
257	}
258	if len(body) == 0 {
259		return azcore.NewResponseError(errors.New(resp.Status), resp.Response)
260	}
261	return azcore.NewResponseError(errors.New(string(body)), resp.Response)
262}
263
264// Update - Updates an existing LogProfilesResource. To update other fields use the CreateOrUpdate method.
265// If the operation fails it returns the *ErrorResponse error type.
266func (client *LogProfilesClient) Update(ctx context.Context, logProfileName string, logProfilesResource LogProfileResourcePatch, options *LogProfilesUpdateOptions) (LogProfileResourceResponse, error) {
267	req, err := client.updateCreateRequest(ctx, logProfileName, logProfilesResource, options)
268	if err != nil {
269		return LogProfileResourceResponse{}, err
270	}
271	resp, err := client.con.Pipeline().Do(req)
272	if err != nil {
273		return LogProfileResourceResponse{}, err
274	}
275	if !resp.HasStatusCode(http.StatusOK) {
276		return LogProfileResourceResponse{}, client.updateHandleError(resp)
277	}
278	return client.updateHandleResponse(resp)
279}
280
281// updateCreateRequest creates the Update request.
282func (client *LogProfilesClient) updateCreateRequest(ctx context.Context, logProfileName string, logProfilesResource LogProfileResourcePatch, options *LogProfilesUpdateOptions) (*azcore.Request, error) {
283	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Insights/logprofiles/{logProfileName}"
284	if client.subscriptionID == "" {
285		return nil, errors.New("parameter client.subscriptionID cannot be empty")
286	}
287	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
288	if logProfileName == "" {
289		return nil, errors.New("parameter logProfileName cannot be empty")
290	}
291	urlPath = strings.ReplaceAll(urlPath, "{logProfileName}", url.PathEscape(logProfileName))
292	req, err := azcore.NewRequest(ctx, http.MethodPatch, azcore.JoinPaths(client.con.Endpoint(), urlPath))
293	if err != nil {
294		return nil, err
295	}
296	req.Telemetry(telemetryInfo)
297	reqQP := req.URL.Query()
298	reqQP.Set("api-version", "2016-03-01")
299	req.URL.RawQuery = reqQP.Encode()
300	req.Header.Set("Accept", "application/json")
301	return req, req.MarshalAsJSON(logProfilesResource)
302}
303
304// updateHandleResponse handles the Update response.
305func (client *LogProfilesClient) updateHandleResponse(resp *azcore.Response) (LogProfileResourceResponse, error) {
306	var val *LogProfileResource
307	if err := resp.UnmarshalAsJSON(&val); err != nil {
308		return LogProfileResourceResponse{}, err
309	}
310	return LogProfileResourceResponse{RawResponse: resp.Response, LogProfileResource: val}, nil
311}
312
313// updateHandleError handles the Update error response.
314func (client *LogProfilesClient) updateHandleError(resp *azcore.Response) error {
315	body, err := resp.Payload()
316	if err != nil {
317		return azcore.NewResponseError(err, resp.Response)
318	}
319	errType := ErrorResponse{raw: string(body)}
320	if err := resp.UnmarshalAsJSON(&errType); err != nil {
321		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
322	}
323	return azcore.NewResponseError(&errType, resp.Response)
324}
325