1package digitaltwins
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//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/autorest/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// Client is the azure Digital Twins Client for managing DigitalTwinsInstance
19type Client struct {
20	BaseClient
21}
22
23// NewClient creates an instance of the Client client.
24func NewClient(subscriptionID string) Client {
25	return NewClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewClientWithBaseURI creates an instance of the Client client using a custom endpoint.  Use this when interacting
29// with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewClientWithBaseURI(baseURI string, subscriptionID string) Client {
31	return Client{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// CheckNameAvailability check if a DigitalTwinsInstance name is available.
35// Parameters:
36// location - location of DigitalTwinsInstance.
37// digitalTwinsInstanceCheckName - set the name parameter in the DigitalTwinsInstanceCheckName structure to the
38// name of the DigitalTwinsInstance to check.
39func (client Client) CheckNameAvailability(ctx context.Context, location string, digitalTwinsInstanceCheckName CheckNameRequest) (result CheckNameResult, err error) {
40	if tracing.IsEnabled() {
41		ctx = tracing.StartSpan(ctx, fqdn+"/Client.CheckNameAvailability")
42		defer func() {
43			sc := -1
44			if result.Response.Response != nil {
45				sc = result.Response.Response.StatusCode
46			}
47			tracing.EndSpan(ctx, sc, err)
48		}()
49	}
50	if err := validation.Validate([]validation.Validation{
51		{TargetValue: location,
52			Constraints: []validation.Constraint{{Target: "location", Name: validation.MinLength, Rule: 3, Chain: nil}}},
53		{TargetValue: digitalTwinsInstanceCheckName,
54			Constraints: []validation.Constraint{{Target: "digitalTwinsInstanceCheckName.Name", Name: validation.Null, Rule: true, Chain: nil},
55				{Target: "digitalTwinsInstanceCheckName.Type", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
56		return result, validation.NewError("digitaltwins.Client", "CheckNameAvailability", err.Error())
57	}
58
59	req, err := client.CheckNameAvailabilityPreparer(ctx, location, digitalTwinsInstanceCheckName)
60	if err != nil {
61		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "CheckNameAvailability", nil, "Failure preparing request")
62		return
63	}
64
65	resp, err := client.CheckNameAvailabilitySender(req)
66	if err != nil {
67		result.Response = autorest.Response{Response: resp}
68		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "CheckNameAvailability", resp, "Failure sending request")
69		return
70	}
71
72	result, err = client.CheckNameAvailabilityResponder(resp)
73	if err != nil {
74		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "CheckNameAvailability", resp, "Failure responding to request")
75		return
76	}
77
78	return
79}
80
81// CheckNameAvailabilityPreparer prepares the CheckNameAvailability request.
82func (client Client) CheckNameAvailabilityPreparer(ctx context.Context, location string, digitalTwinsInstanceCheckName CheckNameRequest) (*http.Request, error) {
83	pathParameters := map[string]interface{}{
84		"location":       autorest.Encode("path", location),
85		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
86	}
87
88	const APIVersion = "2020-03-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.AsPost(),
96		autorest.WithBaseURL(client.BaseURI),
97		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.DigitalTwins/locations/{location}/checkNameAvailability", pathParameters),
98		autorest.WithJSON(digitalTwinsInstanceCheckName),
99		autorest.WithQueryParameters(queryParameters))
100	return preparer.Prepare((&http.Request{}).WithContext(ctx))
101}
102
103// CheckNameAvailabilitySender sends the CheckNameAvailability request. The method will close the
104// http.Response Body if it receives an error.
105func (client Client) CheckNameAvailabilitySender(req *http.Request) (*http.Response, error) {
106	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
107}
108
109// CheckNameAvailabilityResponder handles the response to the CheckNameAvailability request. The method always
110// closes the http.Response Body.
111func (client Client) CheckNameAvailabilityResponder(resp *http.Response) (result CheckNameResult, err error) {
112	err = autorest.Respond(
113		resp,
114		azure.WithErrorUnlessStatusCode(http.StatusOK),
115		autorest.ByUnmarshallingJSON(&result),
116		autorest.ByClosing())
117	result.Response = autorest.Response{Response: resp}
118	return
119}
120
121// CreateOrUpdate create or update the metadata of a DigitalTwinsInstance. The usual pattern to modify a property is to
122// retrieve the DigitalTwinsInstance and security metadata, and then combine them with the modified values in a new
123// body to update the DigitalTwinsInstance.
124// Parameters:
125// resourceGroupName - the name of the resource group that contains the DigitalTwinsInstance.
126// resourceName - the name of the DigitalTwinsInstance.
127// digitalTwinsCreate - the DigitalTwinsInstance and security metadata.
128func (client Client) CreateOrUpdate(ctx context.Context, resourceGroupName string, resourceName string, digitalTwinsCreate Description) (result CreateOrUpdateFuture, err error) {
129	if tracing.IsEnabled() {
130		ctx = tracing.StartSpan(ctx, fqdn+"/Client.CreateOrUpdate")
131		defer func() {
132			sc := -1
133			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
134				sc = result.FutureAPI.Response().StatusCode
135			}
136			tracing.EndSpan(ctx, sc, err)
137		}()
138	}
139	if err := validation.Validate([]validation.Validation{
140		{TargetValue: resourceGroupName,
141			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 64, Chain: nil},
142				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil}}},
143		{TargetValue: resourceName,
144			Constraints: []validation.Constraint{{Target: "resourceName", Name: validation.MaxLength, Rule: 64, Chain: nil},
145				{Target: "resourceName", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
146		return result, validation.NewError("digitaltwins.Client", "CreateOrUpdate", err.Error())
147	}
148
149	req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, resourceName, digitalTwinsCreate)
150	if err != nil {
151		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "CreateOrUpdate", nil, "Failure preparing request")
152		return
153	}
154
155	result, err = client.CreateOrUpdateSender(req)
156	if err != nil {
157		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "CreateOrUpdate", nil, "Failure sending request")
158		return
159	}
160
161	return
162}
163
164// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
165func (client Client) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, resourceName string, digitalTwinsCreate Description) (*http.Request, error) {
166	pathParameters := map[string]interface{}{
167		"resourceGroupName": autorest.Encode("path", resourceGroupName),
168		"resourceName":      autorest.Encode("path", resourceName),
169		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
170	}
171
172	const APIVersion = "2020-03-01-preview"
173	queryParameters := map[string]interface{}{
174		"api-version": APIVersion,
175	}
176
177	preparer := autorest.CreatePreparer(
178		autorest.AsContentType("application/json; charset=utf-8"),
179		autorest.AsPut(),
180		autorest.WithBaseURL(client.BaseURI),
181		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DigitalTwins/digitalTwinsInstances/{resourceName}", pathParameters),
182		autorest.WithJSON(digitalTwinsCreate),
183		autorest.WithQueryParameters(queryParameters))
184	return preparer.Prepare((&http.Request{}).WithContext(ctx))
185}
186
187// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
188// http.Response Body if it receives an error.
189func (client Client) CreateOrUpdateSender(req *http.Request) (future CreateOrUpdateFuture, err error) {
190	var resp *http.Response
191	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
192	if err != nil {
193		return
194	}
195	var azf azure.Future
196	azf, err = azure.NewFutureFromResponse(resp)
197	future.FutureAPI = &azf
198	future.Result = future.result
199	return
200}
201
202// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
203// closes the http.Response Body.
204func (client Client) CreateOrUpdateResponder(resp *http.Response) (result Description, err error) {
205	err = autorest.Respond(
206		resp,
207		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
208		autorest.ByUnmarshallingJSON(&result),
209		autorest.ByClosing())
210	result.Response = autorest.Response{Response: resp}
211	return
212}
213
214// Delete delete a DigitalTwinsInstance.
215// Parameters:
216// resourceGroupName - the name of the resource group that contains the DigitalTwinsInstance.
217// resourceName - the name of the DigitalTwinsInstance.
218func (client Client) Delete(ctx context.Context, resourceGroupName string, resourceName string) (result DeleteFuture, err error) {
219	if tracing.IsEnabled() {
220		ctx = tracing.StartSpan(ctx, fqdn+"/Client.Delete")
221		defer func() {
222			sc := -1
223			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
224				sc = result.FutureAPI.Response().StatusCode
225			}
226			tracing.EndSpan(ctx, sc, err)
227		}()
228	}
229	if err := validation.Validate([]validation.Validation{
230		{TargetValue: resourceGroupName,
231			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 64, Chain: nil},
232				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil}}},
233		{TargetValue: resourceName,
234			Constraints: []validation.Constraint{{Target: "resourceName", Name: validation.MaxLength, Rule: 64, Chain: nil},
235				{Target: "resourceName", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
236		return result, validation.NewError("digitaltwins.Client", "Delete", err.Error())
237	}
238
239	req, err := client.DeletePreparer(ctx, resourceGroupName, resourceName)
240	if err != nil {
241		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "Delete", nil, "Failure preparing request")
242		return
243	}
244
245	result, err = client.DeleteSender(req)
246	if err != nil {
247		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "Delete", nil, "Failure sending request")
248		return
249	}
250
251	return
252}
253
254// DeletePreparer prepares the Delete request.
255func (client Client) DeletePreparer(ctx context.Context, resourceGroupName string, resourceName string) (*http.Request, error) {
256	pathParameters := map[string]interface{}{
257		"resourceGroupName": autorest.Encode("path", resourceGroupName),
258		"resourceName":      autorest.Encode("path", resourceName),
259		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
260	}
261
262	const APIVersion = "2020-03-01-preview"
263	queryParameters := map[string]interface{}{
264		"api-version": APIVersion,
265	}
266
267	preparer := autorest.CreatePreparer(
268		autorest.AsDelete(),
269		autorest.WithBaseURL(client.BaseURI),
270		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DigitalTwins/digitalTwinsInstances/{resourceName}", pathParameters),
271		autorest.WithQueryParameters(queryParameters))
272	return preparer.Prepare((&http.Request{}).WithContext(ctx))
273}
274
275// DeleteSender sends the Delete request. The method will close the
276// http.Response Body if it receives an error.
277func (client Client) DeleteSender(req *http.Request) (future DeleteFuture, err error) {
278	var resp *http.Response
279	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
280	if err != nil {
281		return
282	}
283	var azf azure.Future
284	azf, err = azure.NewFutureFromResponse(resp)
285	future.FutureAPI = &azf
286	future.Result = future.result
287	return
288}
289
290// DeleteResponder handles the response to the Delete request. The method always
291// closes the http.Response Body.
292func (client Client) DeleteResponder(resp *http.Response) (result Description, err error) {
293	err = autorest.Respond(
294		resp,
295		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
296		autorest.ByUnmarshallingJSON(&result),
297		autorest.ByClosing())
298	result.Response = autorest.Response{Response: resp}
299	return
300}
301
302// Get get DigitalTwinsInstances resource.
303// Parameters:
304// resourceGroupName - the name of the resource group that contains the DigitalTwinsInstance.
305// resourceName - the name of the DigitalTwinsInstance.
306func (client Client) Get(ctx context.Context, resourceGroupName string, resourceName string) (result Description, err error) {
307	if tracing.IsEnabled() {
308		ctx = tracing.StartSpan(ctx, fqdn+"/Client.Get")
309		defer func() {
310			sc := -1
311			if result.Response.Response != nil {
312				sc = result.Response.Response.StatusCode
313			}
314			tracing.EndSpan(ctx, sc, err)
315		}()
316	}
317	if err := validation.Validate([]validation.Validation{
318		{TargetValue: resourceGroupName,
319			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 64, Chain: nil},
320				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil}}},
321		{TargetValue: resourceName,
322			Constraints: []validation.Constraint{{Target: "resourceName", Name: validation.MaxLength, Rule: 64, Chain: nil},
323				{Target: "resourceName", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
324		return result, validation.NewError("digitaltwins.Client", "Get", err.Error())
325	}
326
327	req, err := client.GetPreparer(ctx, resourceGroupName, resourceName)
328	if err != nil {
329		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "Get", nil, "Failure preparing request")
330		return
331	}
332
333	resp, err := client.GetSender(req)
334	if err != nil {
335		result.Response = autorest.Response{Response: resp}
336		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "Get", resp, "Failure sending request")
337		return
338	}
339
340	result, err = client.GetResponder(resp)
341	if err != nil {
342		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "Get", resp, "Failure responding to request")
343		return
344	}
345
346	return
347}
348
349// GetPreparer prepares the Get request.
350func (client Client) GetPreparer(ctx context.Context, resourceGroupName string, resourceName string) (*http.Request, error) {
351	pathParameters := map[string]interface{}{
352		"resourceGroupName": autorest.Encode("path", resourceGroupName),
353		"resourceName":      autorest.Encode("path", resourceName),
354		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
355	}
356
357	const APIVersion = "2020-03-01-preview"
358	queryParameters := map[string]interface{}{
359		"api-version": APIVersion,
360	}
361
362	preparer := autorest.CreatePreparer(
363		autorest.AsGet(),
364		autorest.WithBaseURL(client.BaseURI),
365		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DigitalTwins/digitalTwinsInstances/{resourceName}", pathParameters),
366		autorest.WithQueryParameters(queryParameters))
367	return preparer.Prepare((&http.Request{}).WithContext(ctx))
368}
369
370// GetSender sends the Get request. The method will close the
371// http.Response Body if it receives an error.
372func (client Client) GetSender(req *http.Request) (*http.Response, error) {
373	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
374}
375
376// GetResponder handles the response to the Get request. The method always
377// closes the http.Response Body.
378func (client Client) GetResponder(resp *http.Response) (result Description, err error) {
379	err = autorest.Respond(
380		resp,
381		azure.WithErrorUnlessStatusCode(http.StatusOK),
382		autorest.ByUnmarshallingJSON(&result),
383		autorest.ByClosing())
384	result.Response = autorest.Response{Response: resp}
385	return
386}
387
388// List get all the DigitalTwinsInstances in a subscription.
389func (client Client) List(ctx context.Context) (result DescriptionListResultPage, err error) {
390	if tracing.IsEnabled() {
391		ctx = tracing.StartSpan(ctx, fqdn+"/Client.List")
392		defer func() {
393			sc := -1
394			if result.dlr.Response.Response != nil {
395				sc = result.dlr.Response.Response.StatusCode
396			}
397			tracing.EndSpan(ctx, sc, err)
398		}()
399	}
400	result.fn = client.listNextResults
401	req, err := client.ListPreparer(ctx)
402	if err != nil {
403		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "List", nil, "Failure preparing request")
404		return
405	}
406
407	resp, err := client.ListSender(req)
408	if err != nil {
409		result.dlr.Response = autorest.Response{Response: resp}
410		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "List", resp, "Failure sending request")
411		return
412	}
413
414	result.dlr, err = client.ListResponder(resp)
415	if err != nil {
416		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "List", resp, "Failure responding to request")
417		return
418	}
419	if result.dlr.hasNextLink() && result.dlr.IsEmpty() {
420		err = result.NextWithContext(ctx)
421		return
422	}
423
424	return
425}
426
427// ListPreparer prepares the List request.
428func (client Client) ListPreparer(ctx context.Context) (*http.Request, error) {
429	pathParameters := map[string]interface{}{
430		"subscriptionId": autorest.Encode("path", client.SubscriptionID),
431	}
432
433	const APIVersion = "2020-03-01-preview"
434	queryParameters := map[string]interface{}{
435		"api-version": APIVersion,
436	}
437
438	preparer := autorest.CreatePreparer(
439		autorest.AsGet(),
440		autorest.WithBaseURL(client.BaseURI),
441		autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.DigitalTwins/digitalTwinsInstances", pathParameters),
442		autorest.WithQueryParameters(queryParameters))
443	return preparer.Prepare((&http.Request{}).WithContext(ctx))
444}
445
446// ListSender sends the List request. The method will close the
447// http.Response Body if it receives an error.
448func (client Client) ListSender(req *http.Request) (*http.Response, error) {
449	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
450}
451
452// ListResponder handles the response to the List request. The method always
453// closes the http.Response Body.
454func (client Client) ListResponder(resp *http.Response) (result DescriptionListResult, err error) {
455	err = autorest.Respond(
456		resp,
457		azure.WithErrorUnlessStatusCode(http.StatusOK),
458		autorest.ByUnmarshallingJSON(&result),
459		autorest.ByClosing())
460	result.Response = autorest.Response{Response: resp}
461	return
462}
463
464// listNextResults retrieves the next set of results, if any.
465func (client Client) listNextResults(ctx context.Context, lastResults DescriptionListResult) (result DescriptionListResult, err error) {
466	req, err := lastResults.descriptionListResultPreparer(ctx)
467	if err != nil {
468		return result, autorest.NewErrorWithError(err, "digitaltwins.Client", "listNextResults", nil, "Failure preparing next results request")
469	}
470	if req == nil {
471		return
472	}
473	resp, err := client.ListSender(req)
474	if err != nil {
475		result.Response = autorest.Response{Response: resp}
476		return result, autorest.NewErrorWithError(err, "digitaltwins.Client", "listNextResults", resp, "Failure sending next results request")
477	}
478	result, err = client.ListResponder(resp)
479	if err != nil {
480		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "listNextResults", resp, "Failure responding to next results request")
481	}
482	return
483}
484
485// ListComplete enumerates all values, automatically crossing page boundaries as required.
486func (client Client) ListComplete(ctx context.Context) (result DescriptionListResultIterator, err error) {
487	if tracing.IsEnabled() {
488		ctx = tracing.StartSpan(ctx, fqdn+"/Client.List")
489		defer func() {
490			sc := -1
491			if result.Response().Response.Response != nil {
492				sc = result.page.Response().Response.Response.StatusCode
493			}
494			tracing.EndSpan(ctx, sc, err)
495		}()
496	}
497	result.page, err = client.List(ctx)
498	return
499}
500
501// ListByResourceGroup get all the DigitalTwinsInstances in a resource group.
502// Parameters:
503// resourceGroupName - the name of the resource group that contains the DigitalTwinsInstance.
504func (client Client) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result DescriptionListResultPage, err error) {
505	if tracing.IsEnabled() {
506		ctx = tracing.StartSpan(ctx, fqdn+"/Client.ListByResourceGroup")
507		defer func() {
508			sc := -1
509			if result.dlr.Response.Response != nil {
510				sc = result.dlr.Response.Response.StatusCode
511			}
512			tracing.EndSpan(ctx, sc, err)
513		}()
514	}
515	if err := validation.Validate([]validation.Validation{
516		{TargetValue: resourceGroupName,
517			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 64, Chain: nil},
518				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
519		return result, validation.NewError("digitaltwins.Client", "ListByResourceGroup", err.Error())
520	}
521
522	result.fn = client.listByResourceGroupNextResults
523	req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName)
524	if err != nil {
525		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "ListByResourceGroup", nil, "Failure preparing request")
526		return
527	}
528
529	resp, err := client.ListByResourceGroupSender(req)
530	if err != nil {
531		result.dlr.Response = autorest.Response{Response: resp}
532		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "ListByResourceGroup", resp, "Failure sending request")
533		return
534	}
535
536	result.dlr, err = client.ListByResourceGroupResponder(resp)
537	if err != nil {
538		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "ListByResourceGroup", resp, "Failure responding to request")
539		return
540	}
541	if result.dlr.hasNextLink() && result.dlr.IsEmpty() {
542		err = result.NextWithContext(ctx)
543		return
544	}
545
546	return
547}
548
549// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
550func (client Client) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) {
551	pathParameters := map[string]interface{}{
552		"resourceGroupName": autorest.Encode("path", resourceGroupName),
553		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
554	}
555
556	const APIVersion = "2020-03-01-preview"
557	queryParameters := map[string]interface{}{
558		"api-version": APIVersion,
559	}
560
561	preparer := autorest.CreatePreparer(
562		autorest.AsGet(),
563		autorest.WithBaseURL(client.BaseURI),
564		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DigitalTwins/digitalTwinsInstances", pathParameters),
565		autorest.WithQueryParameters(queryParameters))
566	return preparer.Prepare((&http.Request{}).WithContext(ctx))
567}
568
569// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
570// http.Response Body if it receives an error.
571func (client Client) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
572	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
573}
574
575// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
576// closes the http.Response Body.
577func (client Client) ListByResourceGroupResponder(resp *http.Response) (result DescriptionListResult, err error) {
578	err = autorest.Respond(
579		resp,
580		azure.WithErrorUnlessStatusCode(http.StatusOK),
581		autorest.ByUnmarshallingJSON(&result),
582		autorest.ByClosing())
583	result.Response = autorest.Response{Response: resp}
584	return
585}
586
587// listByResourceGroupNextResults retrieves the next set of results, if any.
588func (client Client) listByResourceGroupNextResults(ctx context.Context, lastResults DescriptionListResult) (result DescriptionListResult, err error) {
589	req, err := lastResults.descriptionListResultPreparer(ctx)
590	if err != nil {
591		return result, autorest.NewErrorWithError(err, "digitaltwins.Client", "listByResourceGroupNextResults", nil, "Failure preparing next results request")
592	}
593	if req == nil {
594		return
595	}
596	resp, err := client.ListByResourceGroupSender(req)
597	if err != nil {
598		result.Response = autorest.Response{Response: resp}
599		return result, autorest.NewErrorWithError(err, "digitaltwins.Client", "listByResourceGroupNextResults", resp, "Failure sending next results request")
600	}
601	result, err = client.ListByResourceGroupResponder(resp)
602	if err != nil {
603		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "listByResourceGroupNextResults", resp, "Failure responding to next results request")
604	}
605	return
606}
607
608// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required.
609func (client Client) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result DescriptionListResultIterator, err error) {
610	if tracing.IsEnabled() {
611		ctx = tracing.StartSpan(ctx, fqdn+"/Client.ListByResourceGroup")
612		defer func() {
613			sc := -1
614			if result.Response().Response.Response != nil {
615				sc = result.page.Response().Response.Response.StatusCode
616			}
617			tracing.EndSpan(ctx, sc, err)
618		}()
619	}
620	result.page, err = client.ListByResourceGroup(ctx, resourceGroupName)
621	return
622}
623
624// Update update metadata of DigitalTwinsInstance.
625// Parameters:
626// resourceGroupName - the name of the resource group that contains the DigitalTwinsInstance.
627// resourceName - the name of the DigitalTwinsInstance.
628// digitalTwinsPatchDescription - the DigitalTwinsInstance and security metadata.
629func (client Client) Update(ctx context.Context, resourceGroupName string, resourceName string, digitalTwinsPatchDescription PatchDescription) (result UpdateFuture, err error) {
630	if tracing.IsEnabled() {
631		ctx = tracing.StartSpan(ctx, fqdn+"/Client.Update")
632		defer func() {
633			sc := -1
634			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
635				sc = result.FutureAPI.Response().StatusCode
636			}
637			tracing.EndSpan(ctx, sc, err)
638		}()
639	}
640	if err := validation.Validate([]validation.Validation{
641		{TargetValue: resourceGroupName,
642			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 64, Chain: nil},
643				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil}}},
644		{TargetValue: resourceName,
645			Constraints: []validation.Constraint{{Target: "resourceName", Name: validation.MaxLength, Rule: 64, Chain: nil},
646				{Target: "resourceName", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
647		return result, validation.NewError("digitaltwins.Client", "Update", err.Error())
648	}
649
650	req, err := client.UpdatePreparer(ctx, resourceGroupName, resourceName, digitalTwinsPatchDescription)
651	if err != nil {
652		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "Update", nil, "Failure preparing request")
653		return
654	}
655
656	result, err = client.UpdateSender(req)
657	if err != nil {
658		err = autorest.NewErrorWithError(err, "digitaltwins.Client", "Update", nil, "Failure sending request")
659		return
660	}
661
662	return
663}
664
665// UpdatePreparer prepares the Update request.
666func (client Client) UpdatePreparer(ctx context.Context, resourceGroupName string, resourceName string, digitalTwinsPatchDescription PatchDescription) (*http.Request, error) {
667	pathParameters := map[string]interface{}{
668		"resourceGroupName": autorest.Encode("path", resourceGroupName),
669		"resourceName":      autorest.Encode("path", resourceName),
670		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
671	}
672
673	const APIVersion = "2020-03-01-preview"
674	queryParameters := map[string]interface{}{
675		"api-version": APIVersion,
676	}
677
678	preparer := autorest.CreatePreparer(
679		autorest.AsContentType("application/json; charset=utf-8"),
680		autorest.AsPatch(),
681		autorest.WithBaseURL(client.BaseURI),
682		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DigitalTwins/digitalTwinsInstances/{resourceName}", pathParameters),
683		autorest.WithJSON(digitalTwinsPatchDescription),
684		autorest.WithQueryParameters(queryParameters))
685	return preparer.Prepare((&http.Request{}).WithContext(ctx))
686}
687
688// UpdateSender sends the Update request. The method will close the
689// http.Response Body if it receives an error.
690func (client Client) UpdateSender(req *http.Request) (future UpdateFuture, err error) {
691	var resp *http.Response
692	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
693	if err != nil {
694		return
695	}
696	var azf azure.Future
697	azf, err = azure.NewFutureFromResponse(resp)
698	future.FutureAPI = &azf
699	future.Result = future.result
700	return
701}
702
703// UpdateResponder handles the response to the Update request. The method always
704// closes the http.Response Body.
705func (client Client) UpdateResponder(resp *http.Response) (result Description, err error) {
706	err = autorest.Respond(
707		resp,
708		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
709		autorest.ByUnmarshallingJSON(&result),
710		autorest.ByClosing())
711	result.Response = autorest.Response{Response: resp}
712	return
713}
714