1package hybridnetwork
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/autorest/validation"
25	"github.com/Azure/go-autorest/tracing"
26	"net/http"
27)
28
29// VendorsClient is the client for the Vendors methods of the Hybridnetwork service.
30type VendorsClient struct {
31	BaseClient
32}
33
34// NewVendorsClient creates an instance of the VendorsClient client.
35func NewVendorsClient(subscriptionID string) VendorsClient {
36	return NewVendorsClientWithBaseURI(DefaultBaseURI, subscriptionID)
37}
38
39// NewVendorsClientWithBaseURI creates an instance of the VendorsClient client using a custom endpoint.  Use this when
40// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
41func NewVendorsClientWithBaseURI(baseURI string, subscriptionID string) VendorsClient {
42	return VendorsClient{NewWithBaseURI(baseURI, subscriptionID)}
43}
44
45// CreateOrUpdate creates or updates a vendor.
46// Parameters:
47// vendorName - the name of the vendor.
48// parameters - parameters supplied to the create vendor operation.
49func (client VendorsClient) CreateOrUpdate(ctx context.Context, vendorName string, parameters *Vendor) (result VendorsCreateOrUpdateFuture, err error) {
50	if tracing.IsEnabled() {
51		ctx = tracing.StartSpan(ctx, fqdn+"/VendorsClient.CreateOrUpdate")
52		defer func() {
53			sc := -1
54			if result.Response() != nil {
55				sc = result.Response().StatusCode
56			}
57			tracing.EndSpan(ctx, sc, err)
58		}()
59	}
60	if err := validation.Validate([]validation.Validation{
61		{TargetValue: client.SubscriptionID,
62			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
63		return result, validation.NewError("hybridnetwork.VendorsClient", "CreateOrUpdate", err.Error())
64	}
65
66	req, err := client.CreateOrUpdatePreparer(ctx, vendorName, parameters)
67	if err != nil {
68		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "CreateOrUpdate", nil, "Failure preparing request")
69		return
70	}
71
72	result, err = client.CreateOrUpdateSender(req)
73	if err != nil {
74		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "CreateOrUpdate", nil, "Failure sending request")
75		return
76	}
77
78	return
79}
80
81// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
82func (client VendorsClient) CreateOrUpdatePreparer(ctx context.Context, vendorName string, parameters *Vendor) (*http.Request, error) {
83	pathParameters := map[string]interface{}{
84		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
85		"vendorName":     autorest.Encode("path", vendorName),
86	}
87
88	const APIVersion = "2020-01-01-preview"
89	queryParameters := map[string]interface{}{
90		"api-version": APIVersion,
91	}
92
93	preparer := autorest.CreatePreparer(
94		autorest.AsContentType("application/json; charset=utf-8"),
95		autorest.AsPut(),
96		autorest.WithBaseURL(client.BaseURI),
97		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.HybridNetwork/vendors/{vendorName}", pathParameters),
98		autorest.WithQueryParameters(queryParameters))
99	if parameters != nil {
100		preparer = autorest.DecoratePreparer(preparer,
101			autorest.WithJSON(parameters))
102	}
103	return preparer.Prepare((&http.Request{}).WithContext(ctx))
104}
105
106// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
107// http.Response Body if it receives an error.
108func (client VendorsClient) CreateOrUpdateSender(req *http.Request) (future VendorsCreateOrUpdateFuture, err error) {
109	var resp *http.Response
110	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
111	if err != nil {
112		return
113	}
114	var azf azure.Future
115	azf, err = azure.NewFutureFromResponse(resp)
116	future.FutureAPI = &azf
117	future.Result = func(client VendorsClient) (vVar Vendor, err error) {
118		var done bool
119		done, err = future.DoneWithContext(context.Background(), client)
120		if err != nil {
121			err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
122			return
123		}
124		if !done {
125			err = azure.NewAsyncOpIncompleteError("hybridnetwork.VendorsCreateOrUpdateFuture")
126			return
127		}
128		sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
129		if vVar.Response.Response, err = future.GetResult(sender); err == nil && vVar.Response.Response.StatusCode != http.StatusNoContent {
130			vVar, err = client.CreateOrUpdateResponder(vVar.Response.Response)
131			if err != nil {
132				err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsCreateOrUpdateFuture", "Result", vVar.Response.Response, "Failure responding to request")
133			}
134		}
135		return
136	}
137	return
138}
139
140// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
141// closes the http.Response Body.
142func (client VendorsClient) CreateOrUpdateResponder(resp *http.Response) (result Vendor, err error) {
143	err = autorest.Respond(
144		resp,
145		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
146		autorest.ByUnmarshallingJSON(&result),
147		autorest.ByClosing())
148	result.Response = autorest.Response{Response: resp}
149	return
150}
151
152// Delete deletes the specified vendor.
153// Parameters:
154// vendorName - the name of the vendor.
155func (client VendorsClient) Delete(ctx context.Context, vendorName string) (result VendorsDeleteFuture, err error) {
156	if tracing.IsEnabled() {
157		ctx = tracing.StartSpan(ctx, fqdn+"/VendorsClient.Delete")
158		defer func() {
159			sc := -1
160			if result.Response() != nil {
161				sc = result.Response().StatusCode
162			}
163			tracing.EndSpan(ctx, sc, err)
164		}()
165	}
166	if err := validation.Validate([]validation.Validation{
167		{TargetValue: client.SubscriptionID,
168			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
169		return result, validation.NewError("hybridnetwork.VendorsClient", "Delete", err.Error())
170	}
171
172	req, err := client.DeletePreparer(ctx, vendorName)
173	if err != nil {
174		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "Delete", nil, "Failure preparing request")
175		return
176	}
177
178	result, err = client.DeleteSender(req)
179	if err != nil {
180		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "Delete", nil, "Failure sending request")
181		return
182	}
183
184	return
185}
186
187// DeletePreparer prepares the Delete request.
188func (client VendorsClient) DeletePreparer(ctx context.Context, vendorName string) (*http.Request, error) {
189	pathParameters := map[string]interface{}{
190		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
191		"vendorName":     autorest.Encode("path", vendorName),
192	}
193
194	const APIVersion = "2020-01-01-preview"
195	queryParameters := map[string]interface{}{
196		"api-version": APIVersion,
197	}
198
199	preparer := autorest.CreatePreparer(
200		autorest.AsDelete(),
201		autorest.WithBaseURL(client.BaseURI),
202		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.HybridNetwork/vendors/{vendorName}", pathParameters),
203		autorest.WithQueryParameters(queryParameters))
204	return preparer.Prepare((&http.Request{}).WithContext(ctx))
205}
206
207// DeleteSender sends the Delete request. The method will close the
208// http.Response Body if it receives an error.
209func (client VendorsClient) DeleteSender(req *http.Request) (future VendorsDeleteFuture, err error) {
210	var resp *http.Response
211	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
212	if err != nil {
213		return
214	}
215	var azf azure.Future
216	azf, err = azure.NewFutureFromResponse(resp)
217	future.FutureAPI = &azf
218	future.Result = func(client VendorsClient) (ar autorest.Response, err error) {
219		var done bool
220		done, err = future.DoneWithContext(context.Background(), client)
221		if err != nil {
222			err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsDeleteFuture", "Result", future.Response(), "Polling failure")
223			return
224		}
225		if !done {
226			err = azure.NewAsyncOpIncompleteError("hybridnetwork.VendorsDeleteFuture")
227			return
228		}
229		ar.Response = future.Response()
230		return
231	}
232	return
233}
234
235// DeleteResponder handles the response to the Delete request. The method always
236// closes the http.Response Body.
237func (client VendorsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
238	err = autorest.Respond(
239		resp,
240		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
241		autorest.ByClosing())
242	result.Response = resp
243	return
244}
245
246// Get gets information about the specified vendor.
247// Parameters:
248// vendorName - the name of the vendor.
249func (client VendorsClient) Get(ctx context.Context, vendorName string) (result Vendor, err error) {
250	if tracing.IsEnabled() {
251		ctx = tracing.StartSpan(ctx, fqdn+"/VendorsClient.Get")
252		defer func() {
253			sc := -1
254			if result.Response.Response != nil {
255				sc = result.Response.Response.StatusCode
256			}
257			tracing.EndSpan(ctx, sc, err)
258		}()
259	}
260	if err := validation.Validate([]validation.Validation{
261		{TargetValue: client.SubscriptionID,
262			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
263		return result, validation.NewError("hybridnetwork.VendorsClient", "Get", err.Error())
264	}
265
266	req, err := client.GetPreparer(ctx, vendorName)
267	if err != nil {
268		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "Get", nil, "Failure preparing request")
269		return
270	}
271
272	resp, err := client.GetSender(req)
273	if err != nil {
274		result.Response = autorest.Response{Response: resp}
275		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "Get", resp, "Failure sending request")
276		return
277	}
278
279	result, err = client.GetResponder(resp)
280	if err != nil {
281		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "Get", resp, "Failure responding to request")
282		return
283	}
284
285	return
286}
287
288// GetPreparer prepares the Get request.
289func (client VendorsClient) GetPreparer(ctx context.Context, vendorName string) (*http.Request, error) {
290	pathParameters := map[string]interface{}{
291		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
292		"vendorName":     autorest.Encode("path", vendorName),
293	}
294
295	const APIVersion = "2020-01-01-preview"
296	queryParameters := map[string]interface{}{
297		"api-version": APIVersion,
298	}
299
300	preparer := autorest.CreatePreparer(
301		autorest.AsGet(),
302		autorest.WithBaseURL(client.BaseURI),
303		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.HybridNetwork/vendors/{vendorName}", pathParameters),
304		autorest.WithQueryParameters(queryParameters))
305	return preparer.Prepare((&http.Request{}).WithContext(ctx))
306}
307
308// GetSender sends the Get request. The method will close the
309// http.Response Body if it receives an error.
310func (client VendorsClient) GetSender(req *http.Request) (*http.Response, error) {
311	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
312}
313
314// GetResponder handles the response to the Get request. The method always
315// closes the http.Response Body.
316func (client VendorsClient) GetResponder(resp *http.Response) (result Vendor, err error) {
317	err = autorest.Respond(
318		resp,
319		azure.WithErrorUnlessStatusCode(http.StatusOK),
320		autorest.ByUnmarshallingJSON(&result),
321		autorest.ByClosing())
322	result.Response = autorest.Response{Response: resp}
323	return
324}
325
326// ListBySubscription lists all the vendors in a subscription.
327func (client VendorsClient) ListBySubscription(ctx context.Context) (result VendorListResultPage, err error) {
328	if tracing.IsEnabled() {
329		ctx = tracing.StartSpan(ctx, fqdn+"/VendorsClient.ListBySubscription")
330		defer func() {
331			sc := -1
332			if result.vlr.Response.Response != nil {
333				sc = result.vlr.Response.Response.StatusCode
334			}
335			tracing.EndSpan(ctx, sc, err)
336		}()
337	}
338	if err := validation.Validate([]validation.Validation{
339		{TargetValue: client.SubscriptionID,
340			Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
341		return result, validation.NewError("hybridnetwork.VendorsClient", "ListBySubscription", err.Error())
342	}
343
344	result.fn = client.listBySubscriptionNextResults
345	req, err := client.ListBySubscriptionPreparer(ctx)
346	if err != nil {
347		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "ListBySubscription", nil, "Failure preparing request")
348		return
349	}
350
351	resp, err := client.ListBySubscriptionSender(req)
352	if err != nil {
353		result.vlr.Response = autorest.Response{Response: resp}
354		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "ListBySubscription", resp, "Failure sending request")
355		return
356	}
357
358	result.vlr, err = client.ListBySubscriptionResponder(resp)
359	if err != nil {
360		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "ListBySubscription", resp, "Failure responding to request")
361		return
362	}
363	if result.vlr.hasNextLink() && result.vlr.IsEmpty() {
364		err = result.NextWithContext(ctx)
365		return
366	}
367
368	return
369}
370
371// ListBySubscriptionPreparer prepares the ListBySubscription request.
372func (client VendorsClient) ListBySubscriptionPreparer(ctx context.Context) (*http.Request, error) {
373	pathParameters := map[string]interface{}{
374		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
375	}
376
377	const APIVersion = "2020-01-01-preview"
378	queryParameters := map[string]interface{}{
379		"api-version": APIVersion,
380	}
381
382	preparer := autorest.CreatePreparer(
383		autorest.AsGet(),
384		autorest.WithBaseURL(client.BaseURI),
385		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.HybridNetwork/vendors", pathParameters),
386		autorest.WithQueryParameters(queryParameters))
387	return preparer.Prepare((&http.Request{}).WithContext(ctx))
388}
389
390// ListBySubscriptionSender sends the ListBySubscription request. The method will close the
391// http.Response Body if it receives an error.
392func (client VendorsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) {
393	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
394}
395
396// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always
397// closes the http.Response Body.
398func (client VendorsClient) ListBySubscriptionResponder(resp *http.Response) (result VendorListResult, err error) {
399	err = autorest.Respond(
400		resp,
401		azure.WithErrorUnlessStatusCode(http.StatusOK),
402		autorest.ByUnmarshallingJSON(&result),
403		autorest.ByClosing())
404	result.Response = autorest.Response{Response: resp}
405	return
406}
407
408// listBySubscriptionNextResults retrieves the next set of results, if any.
409func (client VendorsClient) listBySubscriptionNextResults(ctx context.Context, lastResults VendorListResult) (result VendorListResult, err error) {
410	req, err := lastResults.vendorListResultPreparer(ctx)
411	if err != nil {
412		return result, autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request")
413	}
414	if req == nil {
415		return
416	}
417	resp, err := client.ListBySubscriptionSender(req)
418	if err != nil {
419		result.Response = autorest.Response{Response: resp}
420		return result, autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request")
421	}
422	result, err = client.ListBySubscriptionResponder(resp)
423	if err != nil {
424		err = autorest.NewErrorWithError(err, "hybridnetwork.VendorsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request")
425	}
426	return
427}
428
429// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required.
430func (client VendorsClient) ListBySubscriptionComplete(ctx context.Context) (result VendorListResultIterator, err error) {
431	if tracing.IsEnabled() {
432		ctx = tracing.StartSpan(ctx, fqdn+"/VendorsClient.ListBySubscription")
433		defer func() {
434			sc := -1
435			if result.Response().Response.Response != nil {
436				sc = result.page.Response().Response.Response.StatusCode
437			}
438			tracing.EndSpan(ctx, sc, err)
439		}()
440	}
441	result.page, err = client.ListBySubscription(ctx)
442	return
443}
444