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 armapimanagement
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// ContentItemClient contains the methods for the ContentItem group.
22// Don't use this type directly, use NewContentItemClient() instead.
23type ContentItemClient struct {
24	con            *armcore.Connection
25	subscriptionID string
26}
27
28// NewContentItemClient creates a new instance of ContentItemClient with the specified values.
29func NewContentItemClient(con *armcore.Connection, subscriptionID string) *ContentItemClient {
30	return &ContentItemClient{con: con, subscriptionID: subscriptionID}
31}
32
33// CreateOrUpdate - Creates a new developer portal's content item specified by the provided content type.
34// If the operation fails it returns the *ErrorResponse error type.
35func (client *ContentItemClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemCreateOrUpdateOptions) (ContentItemCreateOrUpdateResponse, error) {
36	req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, options)
37	if err != nil {
38		return ContentItemCreateOrUpdateResponse{}, err
39	}
40	resp, err := client.con.Pipeline().Do(req)
41	if err != nil {
42		return ContentItemCreateOrUpdateResponse{}, err
43	}
44	if !resp.HasStatusCode(http.StatusOK, http.StatusCreated) {
45		return ContentItemCreateOrUpdateResponse{}, client.createOrUpdateHandleError(resp)
46	}
47	return client.createOrUpdateHandleResponse(resp)
48}
49
50// createOrUpdateCreateRequest creates the CreateOrUpdate request.
51func (client *ContentItemClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemCreateOrUpdateOptions) (*azcore.Request, error) {
52	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}"
53	if resourceGroupName == "" {
54		return nil, errors.New("parameter resourceGroupName cannot be empty")
55	}
56	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
57	if serviceName == "" {
58		return nil, errors.New("parameter serviceName cannot be empty")
59	}
60	urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName))
61	if contentTypeID == "" {
62		return nil, errors.New("parameter contentTypeID cannot be empty")
63	}
64	urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID))
65	if contentItemID == "" {
66		return nil, errors.New("parameter contentItemID cannot be empty")
67	}
68	urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID))
69	if client.subscriptionID == "" {
70		return nil, errors.New("parameter client.subscriptionID cannot be empty")
71	}
72	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
73	req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath))
74	if err != nil {
75		return nil, err
76	}
77	req.Telemetry(telemetryInfo)
78	reqQP := req.URL.Query()
79	reqQP.Set("api-version", "2020-12-01")
80	req.URL.RawQuery = reqQP.Encode()
81	if options != nil && options.IfMatch != nil {
82		req.Header.Set("If-Match", *options.IfMatch)
83	}
84	req.Header.Set("Accept", "application/json")
85	return req, nil
86}
87
88// createOrUpdateHandleResponse handles the CreateOrUpdate response.
89func (client *ContentItemClient) createOrUpdateHandleResponse(resp *azcore.Response) (ContentItemCreateOrUpdateResponse, error) {
90	result := ContentItemCreateOrUpdateResponse{RawResponse: resp.Response}
91	if val := resp.Header.Get("ETag"); val != "" {
92		result.ETag = &val
93	}
94	if err := resp.UnmarshalAsJSON(&result.ContentItemContract); err != nil {
95		return ContentItemCreateOrUpdateResponse{}, err
96	}
97	return result, nil
98}
99
100// createOrUpdateHandleError handles the CreateOrUpdate error response.
101func (client *ContentItemClient) createOrUpdateHandleError(resp *azcore.Response) error {
102	body, err := resp.Payload()
103	if err != nil {
104		return azcore.NewResponseError(err, resp.Response)
105	}
106	errType := ErrorResponse{raw: string(body)}
107	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
108		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
109	}
110	return azcore.NewResponseError(&errType, resp.Response)
111}
112
113// Delete - Removes the specified developer portal's content item.
114// If the operation fails it returns the *ErrorResponse error type.
115func (client *ContentItemClient) Delete(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, ifMatch string, options *ContentItemDeleteOptions) (ContentItemDeleteResponse, error) {
116	req, err := client.deleteCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, ifMatch, options)
117	if err != nil {
118		return ContentItemDeleteResponse{}, err
119	}
120	resp, err := client.con.Pipeline().Do(req)
121	if err != nil {
122		return ContentItemDeleteResponse{}, err
123	}
124	if !resp.HasStatusCode(http.StatusOK, http.StatusNoContent) {
125		return ContentItemDeleteResponse{}, client.deleteHandleError(resp)
126	}
127	return ContentItemDeleteResponse{RawResponse: resp.Response}, nil
128}
129
130// deleteCreateRequest creates the Delete request.
131func (client *ContentItemClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, ifMatch string, options *ContentItemDeleteOptions) (*azcore.Request, error) {
132	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}"
133	if resourceGroupName == "" {
134		return nil, errors.New("parameter resourceGroupName cannot be empty")
135	}
136	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
137	if serviceName == "" {
138		return nil, errors.New("parameter serviceName cannot be empty")
139	}
140	urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName))
141	if contentTypeID == "" {
142		return nil, errors.New("parameter contentTypeID cannot be empty")
143	}
144	urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID))
145	if contentItemID == "" {
146		return nil, errors.New("parameter contentItemID cannot be empty")
147	}
148	urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID))
149	if client.subscriptionID == "" {
150		return nil, errors.New("parameter client.subscriptionID cannot be empty")
151	}
152	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
153	req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath))
154	if err != nil {
155		return nil, err
156	}
157	req.Telemetry(telemetryInfo)
158	reqQP := req.URL.Query()
159	reqQP.Set("api-version", "2020-12-01")
160	req.URL.RawQuery = reqQP.Encode()
161	req.Header.Set("If-Match", ifMatch)
162	req.Header.Set("Accept", "application/json")
163	return req, nil
164}
165
166// deleteHandleError handles the Delete error response.
167func (client *ContentItemClient) deleteHandleError(resp *azcore.Response) error {
168	body, err := resp.Payload()
169	if err != nil {
170		return azcore.NewResponseError(err, resp.Response)
171	}
172	errType := ErrorResponse{raw: string(body)}
173	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
174		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
175	}
176	return azcore.NewResponseError(&errType, resp.Response)
177}
178
179// Get - Returns the developer portal's content item specified by its identifier.
180// If the operation fails it returns the *ErrorResponse error type.
181func (client *ContentItemClient) Get(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetOptions) (ContentItemGetResponse, error) {
182	req, err := client.getCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, options)
183	if err != nil {
184		return ContentItemGetResponse{}, err
185	}
186	resp, err := client.con.Pipeline().Do(req)
187	if err != nil {
188		return ContentItemGetResponse{}, err
189	}
190	if !resp.HasStatusCode(http.StatusOK) {
191		return ContentItemGetResponse{}, client.getHandleError(resp)
192	}
193	return client.getHandleResponse(resp)
194}
195
196// getCreateRequest creates the Get request.
197func (client *ContentItemClient) getCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetOptions) (*azcore.Request, error) {
198	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}"
199	if resourceGroupName == "" {
200		return nil, errors.New("parameter resourceGroupName cannot be empty")
201	}
202	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
203	if serviceName == "" {
204		return nil, errors.New("parameter serviceName cannot be empty")
205	}
206	urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName))
207	if contentTypeID == "" {
208		return nil, errors.New("parameter contentTypeID cannot be empty")
209	}
210	urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID))
211	if contentItemID == "" {
212		return nil, errors.New("parameter contentItemID cannot be empty")
213	}
214	urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID))
215	if client.subscriptionID == "" {
216		return nil, errors.New("parameter client.subscriptionID cannot be empty")
217	}
218	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
219	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
220	if err != nil {
221		return nil, err
222	}
223	req.Telemetry(telemetryInfo)
224	reqQP := req.URL.Query()
225	reqQP.Set("api-version", "2020-12-01")
226	req.URL.RawQuery = reqQP.Encode()
227	req.Header.Set("Accept", "application/json")
228	return req, nil
229}
230
231// getHandleResponse handles the Get response.
232func (client *ContentItemClient) getHandleResponse(resp *azcore.Response) (ContentItemGetResponse, error) {
233	result := ContentItemGetResponse{RawResponse: resp.Response}
234	if val := resp.Header.Get("ETag"); val != "" {
235		result.ETag = &val
236	}
237	if err := resp.UnmarshalAsJSON(&result.ContentItemContract); err != nil {
238		return ContentItemGetResponse{}, err
239	}
240	return result, nil
241}
242
243// getHandleError handles the Get error response.
244func (client *ContentItemClient) getHandleError(resp *azcore.Response) error {
245	body, err := resp.Payload()
246	if err != nil {
247		return azcore.NewResponseError(err, resp.Response)
248	}
249	errType := ErrorResponse{raw: string(body)}
250	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
251		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
252	}
253	return azcore.NewResponseError(&errType, resp.Response)
254}
255
256// GetEntityTag - Returns the entity state (ETag) version of the developer portal's content item specified by its identifier.
257// If the operation fails it returns the *ErrorResponse error type.
258func (client *ContentItemClient) GetEntityTag(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetEntityTagOptions) (ContentItemGetEntityTagResponse, error) {
259	req, err := client.getEntityTagCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, contentItemID, options)
260	if err != nil {
261		return ContentItemGetEntityTagResponse{}, err
262	}
263	resp, err := client.con.Pipeline().Do(req)
264	if err != nil {
265		return ContentItemGetEntityTagResponse{}, err
266	}
267	return client.getEntityTagHandleResponse(resp)
268}
269
270// getEntityTagCreateRequest creates the GetEntityTag request.
271func (client *ContentItemClient) getEntityTagCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, contentItemID string, options *ContentItemGetEntityTagOptions) (*azcore.Request, error) {
272	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems/{contentItemId}"
273	if resourceGroupName == "" {
274		return nil, errors.New("parameter resourceGroupName cannot be empty")
275	}
276	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
277	if serviceName == "" {
278		return nil, errors.New("parameter serviceName cannot be empty")
279	}
280	urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName))
281	if contentTypeID == "" {
282		return nil, errors.New("parameter contentTypeID cannot be empty")
283	}
284	urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID))
285	if contentItemID == "" {
286		return nil, errors.New("parameter contentItemID cannot be empty")
287	}
288	urlPath = strings.ReplaceAll(urlPath, "{contentItemId}", url.PathEscape(contentItemID))
289	if client.subscriptionID == "" {
290		return nil, errors.New("parameter client.subscriptionID cannot be empty")
291	}
292	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
293	req, err := azcore.NewRequest(ctx, http.MethodHead, azcore.JoinPaths(client.con.Endpoint(), urlPath))
294	if err != nil {
295		return nil, err
296	}
297	req.Telemetry(telemetryInfo)
298	reqQP := req.URL.Query()
299	reqQP.Set("api-version", "2020-12-01")
300	req.URL.RawQuery = reqQP.Encode()
301	req.Header.Set("Accept", "application/json")
302	return req, nil
303}
304
305// getEntityTagHandleResponse handles the GetEntityTag response.
306func (client *ContentItemClient) getEntityTagHandleResponse(resp *azcore.Response) (ContentItemGetEntityTagResponse, error) {
307	result := ContentItemGetEntityTagResponse{RawResponse: resp.Response}
308	if val := resp.Header.Get("ETag"); val != "" {
309		result.ETag = &val
310	}
311	if resp.StatusCode >= 200 && resp.StatusCode < 300 {
312		result.Success = true
313	}
314	return result, nil
315}
316
317// ListByService - Lists developer portal's content items specified by the provided content type.
318// If the operation fails it returns the *ErrorResponse error type.
319func (client *ContentItemClient) ListByService(resourceGroupName string, serviceName string, contentTypeID string, options *ContentItemListByServiceOptions) ContentItemListByServicePager {
320	return &contentItemListByServicePager{
321		client: client,
322		requester: func(ctx context.Context) (*azcore.Request, error) {
323			return client.listByServiceCreateRequest(ctx, resourceGroupName, serviceName, contentTypeID, options)
324		},
325		advancer: func(ctx context.Context, resp ContentItemListByServiceResponse) (*azcore.Request, error) {
326			return azcore.NewRequest(ctx, http.MethodGet, *resp.ContentItemCollection.NextLink)
327		},
328	}
329}
330
331// listByServiceCreateRequest creates the ListByService request.
332func (client *ContentItemClient) listByServiceCreateRequest(ctx context.Context, resourceGroupName string, serviceName string, contentTypeID string, options *ContentItemListByServiceOptions) (*azcore.Request, error) {
333	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/contentTypes/{contentTypeId}/contentItems"
334	if resourceGroupName == "" {
335		return nil, errors.New("parameter resourceGroupName cannot be empty")
336	}
337	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
338	if serviceName == "" {
339		return nil, errors.New("parameter serviceName cannot be empty")
340	}
341	urlPath = strings.ReplaceAll(urlPath, "{serviceName}", url.PathEscape(serviceName))
342	if contentTypeID == "" {
343		return nil, errors.New("parameter contentTypeID cannot be empty")
344	}
345	urlPath = strings.ReplaceAll(urlPath, "{contentTypeId}", url.PathEscape(contentTypeID))
346	if client.subscriptionID == "" {
347		return nil, errors.New("parameter client.subscriptionID cannot be empty")
348	}
349	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
350	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
351	if err != nil {
352		return nil, err
353	}
354	req.Telemetry(telemetryInfo)
355	reqQP := req.URL.Query()
356	reqQP.Set("api-version", "2020-12-01")
357	req.URL.RawQuery = reqQP.Encode()
358	req.Header.Set("Accept", "application/json")
359	return req, nil
360}
361
362// listByServiceHandleResponse handles the ListByService response.
363func (client *ContentItemClient) listByServiceHandleResponse(resp *azcore.Response) (ContentItemListByServiceResponse, error) {
364	result := ContentItemListByServiceResponse{RawResponse: resp.Response}
365	if err := resp.UnmarshalAsJSON(&result.ContentItemCollection); err != nil {
366		return ContentItemListByServiceResponse{}, err
367	}
368	return result, nil
369}
370
371// listByServiceHandleError handles the ListByService error response.
372func (client *ContentItemClient) listByServiceHandleError(resp *azcore.Response) error {
373	body, err := resp.Payload()
374	if err != nil {
375		return azcore.NewResponseError(err, resp.Response)
376	}
377	errType := ErrorResponse{raw: string(body)}
378	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
379		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
380	}
381	return azcore.NewResponseError(&errType, resp.Response)
382}
383