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 azartifacts
9
10import (
11	"context"
12	"errors"
13	"fmt"
14	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
15	"net/http"
16	"net/url"
17	"strconv"
18	"strings"
19	"time"
20)
21
22// PipelineClient contains the methods for the Pipeline group.
23// Don't use this type directly, use NewPipelineClient() instead.
24type PipelineClient struct {
25	con *Connection
26}
27
28// NewPipelineClient creates a new instance of PipelineClient with the specified values.
29func NewPipelineClient(con *Connection) *PipelineClient {
30	return &PipelineClient{con: con}
31}
32
33// BeginCreateOrUpdatePipeline - Creates or updates a pipeline.
34// If the operation fails it returns the *CloudError error type.
35func (client *PipelineClient) BeginCreateOrUpdatePipeline(ctx context.Context, pipelineName string, pipeline PipelineResource, options *PipelineBeginCreateOrUpdatePipelineOptions) (PipelineResourcePollerResponse, error) {
36	resp, err := client.createOrUpdatePipeline(ctx, pipelineName, pipeline, options)
37	if err != nil {
38		return PipelineResourcePollerResponse{}, err
39	}
40	result := PipelineResourcePollerResponse{
41		RawResponse: resp.Response,
42	}
43	pt, err := azcore.NewLROPoller("PipelineClient.CreateOrUpdatePipeline", resp, client.con.Pipeline(), client.createOrUpdatePipelineHandleError)
44	if err != nil {
45		return PipelineResourcePollerResponse{}, err
46	}
47	poller := &pipelineResourcePoller{
48		pt: pt,
49	}
50	result.Poller = poller
51	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (PipelineResourceResponse, error) {
52		return poller.pollUntilDone(ctx, frequency)
53	}
54	return result, nil
55}
56
57// ResumeCreateOrUpdatePipeline creates a new PipelineResourcePoller from the specified resume token.
58// token - The value must come from a previous call to PipelineResourcePoller.ResumeToken().
59func (client *PipelineClient) ResumeCreateOrUpdatePipeline(ctx context.Context, token string) (PipelineResourcePollerResponse, error) {
60	pt, err := azcore.NewLROPollerFromResumeToken("PipelineClient.CreateOrUpdatePipeline", token, client.con.Pipeline(), client.createOrUpdatePipelineHandleError)
61	if err != nil {
62		return PipelineResourcePollerResponse{}, err
63	}
64	poller := &pipelineResourcePoller{
65		pt: pt,
66	}
67	resp, err := poller.Poll(ctx)
68	if err != nil {
69		return PipelineResourcePollerResponse{}, err
70	}
71	result := PipelineResourcePollerResponse{
72		RawResponse: resp,
73	}
74	result.Poller = poller
75	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (PipelineResourceResponse, error) {
76		return poller.pollUntilDone(ctx, frequency)
77	}
78	return result, nil
79}
80
81// CreateOrUpdatePipeline - Creates or updates a pipeline.
82// If the operation fails it returns the *CloudError error type.
83func (client *PipelineClient) createOrUpdatePipeline(ctx context.Context, pipelineName string, pipeline PipelineResource, options *PipelineBeginCreateOrUpdatePipelineOptions) (*azcore.Response, error) {
84	req, err := client.createOrUpdatePipelineCreateRequest(ctx, pipelineName, pipeline, options)
85	if err != nil {
86		return nil, err
87	}
88	resp, err := client.con.Pipeline().Do(req)
89	if err != nil {
90		return nil, err
91	}
92	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) {
93		return nil, client.createOrUpdatePipelineHandleError(resp)
94	}
95	return resp, nil
96}
97
98// createOrUpdatePipelineCreateRequest creates the CreateOrUpdatePipeline request.
99func (client *PipelineClient) createOrUpdatePipelineCreateRequest(ctx context.Context, pipelineName string, pipeline PipelineResource, options *PipelineBeginCreateOrUpdatePipelineOptions) (*azcore.Request, error) {
100	urlPath := "/pipelines/{pipelineName}"
101	if pipelineName == "" {
102		return nil, errors.New("parameter pipelineName cannot be empty")
103	}
104	urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName))
105	req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath))
106	if err != nil {
107		return nil, err
108	}
109	req.Telemetry(telemetryInfo)
110	reqQP := req.URL.Query()
111	reqQP.Set("api-version", "2019-06-01-preview")
112	req.URL.RawQuery = reqQP.Encode()
113	if options != nil && options.IfMatch != nil {
114		req.Header.Set("If-Match", *options.IfMatch)
115	}
116	req.Header.Set("Accept", "application/json")
117	return req, req.MarshalAsJSON(pipeline)
118}
119
120// createOrUpdatePipelineHandleError handles the CreateOrUpdatePipeline error response.
121func (client *PipelineClient) createOrUpdatePipelineHandleError(resp *azcore.Response) error {
122	body, err := resp.Payload()
123	if err != nil {
124		return azcore.NewResponseError(err, resp.Response)
125	}
126	errType := CloudError{raw: string(body)}
127	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
128		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
129	}
130	return azcore.NewResponseError(&errType, resp.Response)
131}
132
133// CreatePipelineRun - Creates a run of a pipeline.
134// If the operation fails it returns the *CloudError error type.
135func (client *PipelineClient) CreatePipelineRun(ctx context.Context, pipelineName string, options *PipelineCreatePipelineRunOptions) (CreateRunResponseResponse, error) {
136	req, err := client.createPipelineRunCreateRequest(ctx, pipelineName, options)
137	if err != nil {
138		return CreateRunResponseResponse{}, err
139	}
140	resp, err := client.con.Pipeline().Do(req)
141	if err != nil {
142		return CreateRunResponseResponse{}, err
143	}
144	if !resp.HasStatusCode(http.StatusAccepted) {
145		return CreateRunResponseResponse{}, client.createPipelineRunHandleError(resp)
146	}
147	return client.createPipelineRunHandleResponse(resp)
148}
149
150// createPipelineRunCreateRequest creates the CreatePipelineRun request.
151func (client *PipelineClient) createPipelineRunCreateRequest(ctx context.Context, pipelineName string, options *PipelineCreatePipelineRunOptions) (*azcore.Request, error) {
152	urlPath := "/pipelines/{pipelineName}/createRun"
153	if pipelineName == "" {
154		return nil, errors.New("parameter pipelineName cannot be empty")
155	}
156	urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName))
157	req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath))
158	if err != nil {
159		return nil, err
160	}
161	req.Telemetry(telemetryInfo)
162	reqQP := req.URL.Query()
163	reqQP.Set("api-version", "2019-06-01-preview")
164	if options != nil && options.ReferencePipelineRunID != nil {
165		reqQP.Set("referencePipelineRunId", *options.ReferencePipelineRunID)
166	}
167	if options != nil && options.IsRecovery != nil {
168		reqQP.Set("isRecovery", strconv.FormatBool(*options.IsRecovery))
169	}
170	if options != nil && options.StartActivityName != nil {
171		reqQP.Set("startActivityName", *options.StartActivityName)
172	}
173	req.URL.RawQuery = reqQP.Encode()
174	req.Header.Set("Accept", "application/json")
175	if options != nil && options.Parameters != nil {
176		return req, req.MarshalAsJSON(options.Parameters)
177	}
178	return req, nil
179}
180
181// createPipelineRunHandleResponse handles the CreatePipelineRun response.
182func (client *PipelineClient) createPipelineRunHandleResponse(resp *azcore.Response) (CreateRunResponseResponse, error) {
183	var val *CreateRunResponse
184	if err := resp.UnmarshalAsJSON(&val); err != nil {
185		return CreateRunResponseResponse{}, err
186	}
187	return CreateRunResponseResponse{RawResponse: resp.Response, CreateRunResponse: val}, nil
188}
189
190// createPipelineRunHandleError handles the CreatePipelineRun error response.
191func (client *PipelineClient) createPipelineRunHandleError(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.InnerError); 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// BeginDeletePipeline - Deletes a pipeline.
204// If the operation fails it returns the *CloudError error type.
205func (client *PipelineClient) BeginDeletePipeline(ctx context.Context, pipelineName string, options *PipelineBeginDeletePipelineOptions) (HTTPPollerResponse, error) {
206	resp, err := client.deletePipeline(ctx, pipelineName, options)
207	if err != nil {
208		return HTTPPollerResponse{}, err
209	}
210	result := HTTPPollerResponse{
211		RawResponse: resp.Response,
212	}
213	pt, err := azcore.NewLROPoller("PipelineClient.DeletePipeline", resp, client.con.Pipeline(), client.deletePipelineHandleError)
214	if err != nil {
215		return HTTPPollerResponse{}, err
216	}
217	poller := &httpPoller{
218		pt: pt,
219	}
220	result.Poller = poller
221	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
222		return poller.pollUntilDone(ctx, frequency)
223	}
224	return result, nil
225}
226
227// ResumeDeletePipeline creates a new HTTPPoller from the specified resume token.
228// token - The value must come from a previous call to HTTPPoller.ResumeToken().
229func (client *PipelineClient) ResumeDeletePipeline(ctx context.Context, token string) (HTTPPollerResponse, error) {
230	pt, err := azcore.NewLROPollerFromResumeToken("PipelineClient.DeletePipeline", token, client.con.Pipeline(), client.deletePipelineHandleError)
231	if err != nil {
232		return HTTPPollerResponse{}, err
233	}
234	poller := &httpPoller{
235		pt: pt,
236	}
237	resp, err := poller.Poll(ctx)
238	if err != nil {
239		return HTTPPollerResponse{}, err
240	}
241	result := HTTPPollerResponse{
242		RawResponse: resp,
243	}
244	result.Poller = poller
245	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
246		return poller.pollUntilDone(ctx, frequency)
247	}
248	return result, nil
249}
250
251// DeletePipeline - Deletes a pipeline.
252// If the operation fails it returns the *CloudError error type.
253func (client *PipelineClient) deletePipeline(ctx context.Context, pipelineName string, options *PipelineBeginDeletePipelineOptions) (*azcore.Response, error) {
254	req, err := client.deletePipelineCreateRequest(ctx, pipelineName, options)
255	if err != nil {
256		return nil, err
257	}
258	resp, err := client.con.Pipeline().Do(req)
259	if err != nil {
260		return nil, err
261	}
262	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) {
263		return nil, client.deletePipelineHandleError(resp)
264	}
265	return resp, nil
266}
267
268// deletePipelineCreateRequest creates the DeletePipeline request.
269func (client *PipelineClient) deletePipelineCreateRequest(ctx context.Context, pipelineName string, options *PipelineBeginDeletePipelineOptions) (*azcore.Request, error) {
270	urlPath := "/pipelines/{pipelineName}"
271	if pipelineName == "" {
272		return nil, errors.New("parameter pipelineName cannot be empty")
273	}
274	urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName))
275	req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath))
276	if err != nil {
277		return nil, err
278	}
279	req.Telemetry(telemetryInfo)
280	reqQP := req.URL.Query()
281	reqQP.Set("api-version", "2019-06-01-preview")
282	req.URL.RawQuery = reqQP.Encode()
283	req.Header.Set("Accept", "application/json")
284	return req, nil
285}
286
287// deletePipelineHandleError handles the DeletePipeline error response.
288func (client *PipelineClient) deletePipelineHandleError(resp *azcore.Response) error {
289	body, err := resp.Payload()
290	if err != nil {
291		return azcore.NewResponseError(err, resp.Response)
292	}
293	errType := CloudError{raw: string(body)}
294	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
295		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
296	}
297	return azcore.NewResponseError(&errType, resp.Response)
298}
299
300// GetPipeline - Gets a pipeline.
301// If the operation fails it returns the *CloudError error type.
302func (client *PipelineClient) GetPipeline(ctx context.Context, pipelineName string, options *PipelineGetPipelineOptions) (PipelineResourceResponse, error) {
303	req, err := client.getPipelineCreateRequest(ctx, pipelineName, options)
304	if err != nil {
305		return PipelineResourceResponse{}, err
306	}
307	resp, err := client.con.Pipeline().Do(req)
308	if err != nil {
309		return PipelineResourceResponse{}, err
310	}
311	if !resp.HasStatusCode(http.StatusOK, http.StatusNotModified) {
312		return PipelineResourceResponse{}, client.getPipelineHandleError(resp)
313	}
314	return client.getPipelineHandleResponse(resp)
315}
316
317// getPipelineCreateRequest creates the GetPipeline request.
318func (client *PipelineClient) getPipelineCreateRequest(ctx context.Context, pipelineName string, options *PipelineGetPipelineOptions) (*azcore.Request, error) {
319	urlPath := "/pipelines/{pipelineName}"
320	if pipelineName == "" {
321		return nil, errors.New("parameter pipelineName cannot be empty")
322	}
323	urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName))
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	reqQP := req.URL.Query()
330	reqQP.Set("api-version", "2019-06-01-preview")
331	req.URL.RawQuery = reqQP.Encode()
332	if options != nil && options.IfNoneMatch != nil {
333		req.Header.Set("If-None-Match", *options.IfNoneMatch)
334	}
335	req.Header.Set("Accept", "application/json")
336	return req, nil
337}
338
339// getPipelineHandleResponse handles the GetPipeline response.
340func (client *PipelineClient) getPipelineHandleResponse(resp *azcore.Response) (PipelineResourceResponse, error) {
341	var val *PipelineResource
342	if err := resp.UnmarshalAsJSON(&val); err != nil {
343		return PipelineResourceResponse{}, err
344	}
345	return PipelineResourceResponse{RawResponse: resp.Response, PipelineResource: val}, nil
346}
347
348// getPipelineHandleError handles the GetPipeline error response.
349func (client *PipelineClient) getPipelineHandleError(resp *azcore.Response) error {
350	body, err := resp.Payload()
351	if err != nil {
352		return azcore.NewResponseError(err, resp.Response)
353	}
354	errType := CloudError{raw: string(body)}
355	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
356		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
357	}
358	return azcore.NewResponseError(&errType, resp.Response)
359}
360
361// GetPipelinesByWorkspace - Lists pipelines.
362// If the operation fails it returns the *CloudError error type.
363func (client *PipelineClient) GetPipelinesByWorkspace(options *PipelineGetPipelinesByWorkspaceOptions) PipelineListResponsePager {
364	return &pipelineListResponsePager{
365		pipeline: client.con.Pipeline(),
366		requester: func(ctx context.Context) (*azcore.Request, error) {
367			return client.getPipelinesByWorkspaceCreateRequest(ctx, options)
368		},
369		responder: client.getPipelinesByWorkspaceHandleResponse,
370		errorer:   client.getPipelinesByWorkspaceHandleError,
371		advancer: func(ctx context.Context, resp PipelineListResponseResponse) (*azcore.Request, error) {
372			return azcore.NewRequest(ctx, http.MethodGet, *resp.PipelineListResponse.NextLink)
373		},
374		statusCodes: []int{http.StatusOK},
375	}
376}
377
378// getPipelinesByWorkspaceCreateRequest creates the GetPipelinesByWorkspace request.
379func (client *PipelineClient) getPipelinesByWorkspaceCreateRequest(ctx context.Context, options *PipelineGetPipelinesByWorkspaceOptions) (*azcore.Request, error) {
380	urlPath := "/pipelines"
381	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
382	if err != nil {
383		return nil, err
384	}
385	req.Telemetry(telemetryInfo)
386	reqQP := req.URL.Query()
387	reqQP.Set("api-version", "2019-06-01-preview")
388	req.URL.RawQuery = reqQP.Encode()
389	req.Header.Set("Accept", "application/json")
390	return req, nil
391}
392
393// getPipelinesByWorkspaceHandleResponse handles the GetPipelinesByWorkspace response.
394func (client *PipelineClient) getPipelinesByWorkspaceHandleResponse(resp *azcore.Response) (PipelineListResponseResponse, error) {
395	var val *PipelineListResponse
396	if err := resp.UnmarshalAsJSON(&val); err != nil {
397		return PipelineListResponseResponse{}, err
398	}
399	return PipelineListResponseResponse{RawResponse: resp.Response, PipelineListResponse: val}, nil
400}
401
402// getPipelinesByWorkspaceHandleError handles the GetPipelinesByWorkspace error response.
403func (client *PipelineClient) getPipelinesByWorkspaceHandleError(resp *azcore.Response) error {
404	body, err := resp.Payload()
405	if err != nil {
406		return azcore.NewResponseError(err, resp.Response)
407	}
408	errType := CloudError{raw: string(body)}
409	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
410		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
411	}
412	return azcore.NewResponseError(&errType, resp.Response)
413}
414
415// BeginRenamePipeline - Renames a pipeline.
416// If the operation fails it returns the *CloudError error type.
417func (client *PipelineClient) BeginRenamePipeline(ctx context.Context, pipelineName string, request ArtifactRenameRequest, options *PipelineBeginRenamePipelineOptions) (HTTPPollerResponse, error) {
418	resp, err := client.renamePipeline(ctx, pipelineName, request, options)
419	if err != nil {
420		return HTTPPollerResponse{}, err
421	}
422	result := HTTPPollerResponse{
423		RawResponse: resp.Response,
424	}
425	pt, err := azcore.NewLROPoller("PipelineClient.RenamePipeline", resp, client.con.Pipeline(), client.renamePipelineHandleError)
426	if err != nil {
427		return HTTPPollerResponse{}, err
428	}
429	poller := &httpPoller{
430		pt: pt,
431	}
432	result.Poller = poller
433	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
434		return poller.pollUntilDone(ctx, frequency)
435	}
436	return result, nil
437}
438
439// ResumeRenamePipeline creates a new HTTPPoller from the specified resume token.
440// token - The value must come from a previous call to HTTPPoller.ResumeToken().
441func (client *PipelineClient) ResumeRenamePipeline(ctx context.Context, token string) (HTTPPollerResponse, error) {
442	pt, err := azcore.NewLROPollerFromResumeToken("PipelineClient.RenamePipeline", token, client.con.Pipeline(), client.renamePipelineHandleError)
443	if err != nil {
444		return HTTPPollerResponse{}, err
445	}
446	poller := &httpPoller{
447		pt: pt,
448	}
449	resp, err := poller.Poll(ctx)
450	if err != nil {
451		return HTTPPollerResponse{}, err
452	}
453	result := HTTPPollerResponse{
454		RawResponse: resp,
455	}
456	result.Poller = poller
457	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (*http.Response, error) {
458		return poller.pollUntilDone(ctx, frequency)
459	}
460	return result, nil
461}
462
463// RenamePipeline - Renames a pipeline.
464// If the operation fails it returns the *CloudError error type.
465func (client *PipelineClient) renamePipeline(ctx context.Context, pipelineName string, request ArtifactRenameRequest, options *PipelineBeginRenamePipelineOptions) (*azcore.Response, error) {
466	req, err := client.renamePipelineCreateRequest(ctx, pipelineName, request, options)
467	if err != nil {
468		return nil, err
469	}
470	resp, err := client.con.Pipeline().Do(req)
471	if err != nil {
472		return nil, err
473	}
474	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) {
475		return nil, client.renamePipelineHandleError(resp)
476	}
477	return resp, nil
478}
479
480// renamePipelineCreateRequest creates the RenamePipeline request.
481func (client *PipelineClient) renamePipelineCreateRequest(ctx context.Context, pipelineName string, request ArtifactRenameRequest, options *PipelineBeginRenamePipelineOptions) (*azcore.Request, error) {
482	urlPath := "/pipelines/{pipelineName}/rename"
483	if pipelineName == "" {
484		return nil, errors.New("parameter pipelineName cannot be empty")
485	}
486	urlPath = strings.ReplaceAll(urlPath, "{pipelineName}", url.PathEscape(pipelineName))
487	req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath))
488	if err != nil {
489		return nil, err
490	}
491	req.Telemetry(telemetryInfo)
492	reqQP := req.URL.Query()
493	reqQP.Set("api-version", "2019-06-01-preview")
494	req.URL.RawQuery = reqQP.Encode()
495	req.Header.Set("Accept", "application/json")
496	return req, req.MarshalAsJSON(request)
497}
498
499// renamePipelineHandleError handles the RenamePipeline error response.
500func (client *PipelineClient) renamePipelineHandleError(resp *azcore.Response) error {
501	body, err := resp.Payload()
502	if err != nil {
503		return azcore.NewResponseError(err, resp.Response)
504	}
505	errType := CloudError{raw: string(body)}
506	if err := resp.UnmarshalAsJSON(&errType.InnerError); err != nil {
507		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
508	}
509	return azcore.NewResponseError(&errType, resp.Response)
510}
511