1package analysisservices
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	"encoding/json"
12	"github.com/Azure/go-autorest/autorest"
13	"github.com/Azure/go-autorest/autorest/azure"
14	"github.com/Azure/go-autorest/autorest/to"
15	"github.com/Azure/go-autorest/tracing"
16	"net/http"
17)
18
19// The package's fully qualified name.
20const fqdn = "github.com/Azure/azure-sdk-for-go/services/analysisservices/mgmt/2017-08-01/analysisservices"
21
22// CheckServerNameAvailabilityParameters details of server name request body.
23type CheckServerNameAvailabilityParameters struct {
24	// Name - Name for checking availability.
25	Name *string `json:"name,omitempty"`
26	// Type - The resource type of azure analysis services.
27	Type *string `json:"type,omitempty"`
28}
29
30// CheckServerNameAvailabilityResult the checking result of server name availability.
31type CheckServerNameAvailabilityResult struct {
32	autorest.Response `json:"-"`
33	// NameAvailable - Indicator of available of the server name.
34	NameAvailable *bool `json:"nameAvailable,omitempty"`
35	// Reason - The reason of unavailability.
36	Reason *string `json:"reason,omitempty"`
37	// Message - The detailed message of the request unavailability.
38	Message *string `json:"message,omitempty"`
39}
40
41// ErrorResponse describes the format of Error response.
42type ErrorResponse struct {
43	// Code - Error code
44	Code *string `json:"code,omitempty"`
45	// Message - Error message indicating why the operation failed.
46	Message *string `json:"message,omitempty"`
47}
48
49// GatewayDetails the gateway details.
50type GatewayDetails struct {
51	// GatewayResourceID - Gateway resource to be associated with the server.
52	GatewayResourceID *string `json:"gatewayResourceId,omitempty"`
53	// GatewayObjectID - READ-ONLY; Gateway object id from in the DMTS cluster for the gateway resource.
54	GatewayObjectID *string `json:"gatewayObjectId,omitempty"`
55	// DmtsClusterURI - READ-ONLY; Uri of the DMTS cluster.
56	DmtsClusterURI *string `json:"dmtsClusterUri,omitempty"`
57}
58
59// MarshalJSON is the custom marshaler for GatewayDetails.
60func (gd GatewayDetails) MarshalJSON() ([]byte, error) {
61	objectMap := make(map[string]interface{})
62	if gd.GatewayResourceID != nil {
63		objectMap["gatewayResourceId"] = gd.GatewayResourceID
64	}
65	return json.Marshal(objectMap)
66}
67
68// GatewayError detail of gateway errors.
69type GatewayError struct {
70	// Code - Error code of list gateway.
71	Code *string `json:"code,omitempty"`
72	// Message - Error message of list gateway.
73	Message *string `json:"message,omitempty"`
74}
75
76// GatewayListStatusError status of gateway is error.
77type GatewayListStatusError struct {
78	// Error - Error of the list gateway status.
79	Error *GatewayError `json:"error,omitempty"`
80}
81
82// GatewayListStatusLive status of gateway is live.
83type GatewayListStatusLive struct {
84	autorest.Response `json:"-"`
85	// Status - Live message of list gateway. Possible values include: 'Live'
86	Status Status `json:"status,omitempty"`
87}
88
89// IPv4FirewallRule the detail of firewall rule.
90type IPv4FirewallRule struct {
91	// FirewallRuleName - The rule name.
92	FirewallRuleName *string `json:"firewallRuleName,omitempty"`
93	// RangeStart - The start range of IPv4.
94	RangeStart *string `json:"rangeStart,omitempty"`
95	// RangeEnd - The end range of IPv4.
96	RangeEnd *string `json:"rangeEnd,omitempty"`
97}
98
99// IPv4FirewallSettings an array of firewall rules.
100type IPv4FirewallSettings struct {
101	// FirewallRules - An array of firewall rules.
102	FirewallRules *[]IPv4FirewallRule `json:"firewallRules,omitempty"`
103	// EnablePowerBIService - The indicator of enabling PBI service.
104	EnablePowerBIService *bool `json:"enablePowerBIService,omitempty"`
105}
106
107// Operation a Consumption REST API operation.
108type Operation struct {
109	// Name - READ-ONLY; Operation name: {provider}/{resource}/{operation}.
110	Name *string `json:"name,omitempty"`
111	// Display - The object that represents the operation.
112	Display *OperationDisplay `json:"display,omitempty"`
113}
114
115// MarshalJSON is the custom marshaler for Operation.
116func (o Operation) MarshalJSON() ([]byte, error) {
117	objectMap := make(map[string]interface{})
118	if o.Display != nil {
119		objectMap["display"] = o.Display
120	}
121	return json.Marshal(objectMap)
122}
123
124// OperationDisplay the object that represents the operation.
125type OperationDisplay struct {
126	// Provider - READ-ONLY; Service provider: Microsoft.Consumption.
127	Provider *string `json:"provider,omitempty"`
128	// Resource - READ-ONLY; Resource on which the operation is performed: UsageDetail, etc.
129	Resource *string `json:"resource,omitempty"`
130	// Operation - READ-ONLY; Operation type: Read, write, delete, etc.
131	Operation *string `json:"operation,omitempty"`
132}
133
134// MarshalJSON is the custom marshaler for OperationDisplay.
135func (o OperationDisplay) MarshalJSON() ([]byte, error) {
136	objectMap := make(map[string]interface{})
137	return json.Marshal(objectMap)
138}
139
140// OperationListResult result of listing consumption operations. It contains a list of operations and a URL
141// link to get the next set of results.
142type OperationListResult struct {
143	autorest.Response `json:"-"`
144	// Value - READ-ONLY; List of analysis services operations supported by the Microsoft.AnalysisServices resource provider.
145	Value *[]Operation `json:"value,omitempty"`
146	// NextLink - READ-ONLY; URL to get the next set of operation list results if there are any.
147	NextLink *string `json:"nextLink,omitempty"`
148}
149
150// MarshalJSON is the custom marshaler for OperationListResult.
151func (olr OperationListResult) MarshalJSON() ([]byte, error) {
152	objectMap := make(map[string]interface{})
153	return json.Marshal(objectMap)
154}
155
156// OperationListResultIterator provides access to a complete listing of Operation values.
157type OperationListResultIterator struct {
158	i    int
159	page OperationListResultPage
160}
161
162// NextWithContext advances to the next value.  If there was an error making
163// the request the iterator does not advance and the error is returned.
164func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
165	if tracing.IsEnabled() {
166		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
167		defer func() {
168			sc := -1
169			if iter.Response().Response.Response != nil {
170				sc = iter.Response().Response.Response.StatusCode
171			}
172			tracing.EndSpan(ctx, sc, err)
173		}()
174	}
175	iter.i++
176	if iter.i < len(iter.page.Values()) {
177		return nil
178	}
179	err = iter.page.NextWithContext(ctx)
180	if err != nil {
181		iter.i--
182		return err
183	}
184	iter.i = 0
185	return nil
186}
187
188// Next advances to the next value.  If there was an error making
189// the request the iterator does not advance and the error is returned.
190// Deprecated: Use NextWithContext() instead.
191func (iter *OperationListResultIterator) Next() error {
192	return iter.NextWithContext(context.Background())
193}
194
195// NotDone returns true if the enumeration should be started or is not yet complete.
196func (iter OperationListResultIterator) NotDone() bool {
197	return iter.page.NotDone() && iter.i < len(iter.page.Values())
198}
199
200// Response returns the raw server response from the last page request.
201func (iter OperationListResultIterator) Response() OperationListResult {
202	return iter.page.Response()
203}
204
205// Value returns the current value or a zero-initialized value if the
206// iterator has advanced beyond the end of the collection.
207func (iter OperationListResultIterator) Value() Operation {
208	if !iter.page.NotDone() {
209		return Operation{}
210	}
211	return iter.page.Values()[iter.i]
212}
213
214// Creates a new instance of the OperationListResultIterator type.
215func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
216	return OperationListResultIterator{page: page}
217}
218
219// IsEmpty returns true if the ListResult contains no values.
220func (olr OperationListResult) IsEmpty() bool {
221	return olr.Value == nil || len(*olr.Value) == 0
222}
223
224// hasNextLink returns true if the NextLink is not empty.
225func (olr OperationListResult) hasNextLink() bool {
226	return olr.NextLink != nil && len(*olr.NextLink) != 0
227}
228
229// operationListResultPreparer prepares a request to retrieve the next set of results.
230// It returns nil if no more results exist.
231func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
232	if !olr.hasNextLink() {
233		return nil, nil
234	}
235	return autorest.Prepare((&http.Request{}).WithContext(ctx),
236		autorest.AsJSON(),
237		autorest.AsGet(),
238		autorest.WithBaseURL(to.String(olr.NextLink)))
239}
240
241// OperationListResultPage contains a page of Operation values.
242type OperationListResultPage struct {
243	fn  func(context.Context, OperationListResult) (OperationListResult, error)
244	olr OperationListResult
245}
246
247// NextWithContext advances to the next page of values.  If there was an error making
248// the request the page does not advance and the error is returned.
249func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
250	if tracing.IsEnabled() {
251		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
252		defer func() {
253			sc := -1
254			if page.Response().Response.Response != nil {
255				sc = page.Response().Response.Response.StatusCode
256			}
257			tracing.EndSpan(ctx, sc, err)
258		}()
259	}
260	for {
261		next, err := page.fn(ctx, page.olr)
262		if err != nil {
263			return err
264		}
265		page.olr = next
266		if !next.hasNextLink() || !next.IsEmpty() {
267			break
268		}
269	}
270	return nil
271}
272
273// Next advances to the next page of values.  If there was an error making
274// the request the page does not advance and the error is returned.
275// Deprecated: Use NextWithContext() instead.
276func (page *OperationListResultPage) Next() error {
277	return page.NextWithContext(context.Background())
278}
279
280// NotDone returns true if the page enumeration should be started or is not yet complete.
281func (page OperationListResultPage) NotDone() bool {
282	return !page.olr.IsEmpty()
283}
284
285// Response returns the raw server response from the last page request.
286func (page OperationListResultPage) Response() OperationListResult {
287	return page.olr
288}
289
290// Values returns the slice of values for the current page or nil if there are no values.
291func (page OperationListResultPage) Values() []Operation {
292	if page.olr.IsEmpty() {
293		return nil
294	}
295	return *page.olr.Value
296}
297
298// Creates a new instance of the OperationListResultPage type.
299func NewOperationListResultPage(cur OperationListResult, getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
300	return OperationListResultPage{
301		fn:  getNextPage,
302		olr: cur,
303	}
304}
305
306// OperationStatus the status of operation.
307type OperationStatus struct {
308	autorest.Response `json:"-"`
309	// ID - The operation Id.
310	ID *string `json:"id,omitempty"`
311	// Name - The operation name.
312	Name *string `json:"name,omitempty"`
313	// StartTime - The start time of the operation.
314	StartTime *string `json:"startTime,omitempty"`
315	// EndTime - The end time of the operation.
316	EndTime *string `json:"endTime,omitempty"`
317	// Status - The status of the operation.
318	Status *string `json:"status,omitempty"`
319	// Error - The error detail of the operation if any.
320	Error *ErrorResponse `json:"error,omitempty"`
321}
322
323// Resource represents an instance of an Analysis Services resource.
324type Resource struct {
325	// ID - READ-ONLY; An identifier that represents the Analysis Services resource.
326	ID *string `json:"id,omitempty"`
327	// Name - READ-ONLY; The name of the Analysis Services resource.
328	Name *string `json:"name,omitempty"`
329	// Type - READ-ONLY; The type of the Analysis Services resource.
330	Type *string `json:"type,omitempty"`
331	// Location - Location of the Analysis Services resource.
332	Location *string `json:"location,omitempty"`
333	// Sku - The SKU of the Analysis Services resource.
334	Sku *ResourceSku `json:"sku,omitempty"`
335	// Tags - Key-value pairs of additional resource provisioning properties.
336	Tags map[string]*string `json:"tags"`
337}
338
339// MarshalJSON is the custom marshaler for Resource.
340func (r Resource) MarshalJSON() ([]byte, error) {
341	objectMap := make(map[string]interface{})
342	if r.Location != nil {
343		objectMap["location"] = r.Location
344	}
345	if r.Sku != nil {
346		objectMap["sku"] = r.Sku
347	}
348	if r.Tags != nil {
349		objectMap["tags"] = r.Tags
350	}
351	return json.Marshal(objectMap)
352}
353
354// ResourceSku represents the SKU name and Azure pricing tier for Analysis Services resource.
355type ResourceSku struct {
356	// Name - Name of the SKU level.
357	Name *string `json:"name,omitempty"`
358	// Tier - The name of the Azure pricing tier to which the SKU applies. Possible values include: 'Development', 'Basic', 'Standard'
359	Tier SkuTier `json:"tier,omitempty"`
360	// Capacity - The number of instances in the read only query pool.
361	Capacity *int32 `json:"capacity,omitempty"`
362}
363
364// Server represents an instance of an Analysis Services resource.
365type Server struct {
366	autorest.Response `json:"-"`
367	// ServerProperties - Properties of the provision operation request.
368	*ServerProperties `json:"properties,omitempty"`
369	// ID - READ-ONLY; An identifier that represents the Analysis Services resource.
370	ID *string `json:"id,omitempty"`
371	// Name - READ-ONLY; The name of the Analysis Services resource.
372	Name *string `json:"name,omitempty"`
373	// Type - READ-ONLY; The type of the Analysis Services resource.
374	Type *string `json:"type,omitempty"`
375	// Location - Location of the Analysis Services resource.
376	Location *string `json:"location,omitempty"`
377	// Sku - The SKU of the Analysis Services resource.
378	Sku *ResourceSku `json:"sku,omitempty"`
379	// Tags - Key-value pairs of additional resource provisioning properties.
380	Tags map[string]*string `json:"tags"`
381}
382
383// MarshalJSON is the custom marshaler for Server.
384func (s Server) MarshalJSON() ([]byte, error) {
385	objectMap := make(map[string]interface{})
386	if s.ServerProperties != nil {
387		objectMap["properties"] = s.ServerProperties
388	}
389	if s.Location != nil {
390		objectMap["location"] = s.Location
391	}
392	if s.Sku != nil {
393		objectMap["sku"] = s.Sku
394	}
395	if s.Tags != nil {
396		objectMap["tags"] = s.Tags
397	}
398	return json.Marshal(objectMap)
399}
400
401// UnmarshalJSON is the custom unmarshaler for Server struct.
402func (s *Server) UnmarshalJSON(body []byte) error {
403	var m map[string]*json.RawMessage
404	err := json.Unmarshal(body, &m)
405	if err != nil {
406		return err
407	}
408	for k, v := range m {
409		switch k {
410		case "properties":
411			if v != nil {
412				var serverProperties ServerProperties
413				err = json.Unmarshal(*v, &serverProperties)
414				if err != nil {
415					return err
416				}
417				s.ServerProperties = &serverProperties
418			}
419		case "id":
420			if v != nil {
421				var ID string
422				err = json.Unmarshal(*v, &ID)
423				if err != nil {
424					return err
425				}
426				s.ID = &ID
427			}
428		case "name":
429			if v != nil {
430				var name string
431				err = json.Unmarshal(*v, &name)
432				if err != nil {
433					return err
434				}
435				s.Name = &name
436			}
437		case "type":
438			if v != nil {
439				var typeVar string
440				err = json.Unmarshal(*v, &typeVar)
441				if err != nil {
442					return err
443				}
444				s.Type = &typeVar
445			}
446		case "location":
447			if v != nil {
448				var location string
449				err = json.Unmarshal(*v, &location)
450				if err != nil {
451					return err
452				}
453				s.Location = &location
454			}
455		case "sku":
456			if v != nil {
457				var sku ResourceSku
458				err = json.Unmarshal(*v, &sku)
459				if err != nil {
460					return err
461				}
462				s.Sku = &sku
463			}
464		case "tags":
465			if v != nil {
466				var tags map[string]*string
467				err = json.Unmarshal(*v, &tags)
468				if err != nil {
469					return err
470				}
471				s.Tags = tags
472			}
473		}
474	}
475
476	return nil
477}
478
479// ServerAdministrators an array of administrator user identities.
480type ServerAdministrators struct {
481	// Members - An array of administrator user identities.
482	Members *[]string `json:"members,omitempty"`
483}
484
485// ServerMutableProperties an object that represents a set of mutable Analysis Services resource
486// properties.
487type ServerMutableProperties struct {
488	// AsAdministrators - A collection of AS server administrators
489	AsAdministrators *ServerAdministrators `json:"asAdministrators,omitempty"`
490	// BackupBlobContainerURI - The SAS container URI to the backup container.
491	BackupBlobContainerURI *string `json:"backupBlobContainerUri,omitempty"`
492	// GatewayDetails - The gateway details configured for the AS server.
493	GatewayDetails *GatewayDetails `json:"gatewayDetails,omitempty"`
494	// IPV4FirewallSettings - The firewall settings for the AS server.
495	IPV4FirewallSettings *IPv4FirewallSettings `json:"ipV4FirewallSettings,omitempty"`
496	// QuerypoolConnectionMode - How the read-write server's participation in the query pool is controlled.<br/>It can have the following values: <ul><li>readOnly - indicates that the read-write server is intended not to participate in query operations</li><li>all - indicates that the read-write server can participate in query operations</li></ul>Specifying readOnly when capacity is 1 results in error. Possible values include: 'All', 'ReadOnly'
497	QuerypoolConnectionMode ConnectionMode `json:"querypoolConnectionMode,omitempty"`
498}
499
500// ServerProperties properties of Analysis Services resource.
501type ServerProperties struct {
502	// State - READ-ONLY; The current state of Analysis Services resource. The state is to indicate more states outside of resource provisioning. Possible values include: 'StateDeleting', 'StateSucceeded', 'StateFailed', 'StatePaused', 'StateSuspended', 'StateProvisioning', 'StateUpdating', 'StateSuspending', 'StatePausing', 'StateResuming', 'StatePreparing', 'StateScaling'
503	State State `json:"state,omitempty"`
504	// ProvisioningState - READ-ONLY; The current deployment state of Analysis Services resource. The provisioningState is to indicate states for resource provisioning. Possible values include: 'Deleting', 'Succeeded', 'Failed', 'Paused', 'Suspended', 'Provisioning', 'Updating', 'Suspending', 'Pausing', 'Resuming', 'Preparing', 'Scaling'
505	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
506	// ServerFullName - READ-ONLY; The full name of the Analysis Services resource.
507	ServerFullName *string `json:"serverFullName,omitempty"`
508	// AsAdministrators - A collection of AS server administrators
509	AsAdministrators *ServerAdministrators `json:"asAdministrators,omitempty"`
510	// BackupBlobContainerURI - The SAS container URI to the backup container.
511	BackupBlobContainerURI *string `json:"backupBlobContainerUri,omitempty"`
512	// GatewayDetails - The gateway details configured for the AS server.
513	GatewayDetails *GatewayDetails `json:"gatewayDetails,omitempty"`
514	// IPV4FirewallSettings - The firewall settings for the AS server.
515	IPV4FirewallSettings *IPv4FirewallSettings `json:"ipV4FirewallSettings,omitempty"`
516	// QuerypoolConnectionMode - How the read-write server's participation in the query pool is controlled.<br/>It can have the following values: <ul><li>readOnly - indicates that the read-write server is intended not to participate in query operations</li><li>all - indicates that the read-write server can participate in query operations</li></ul>Specifying readOnly when capacity is 1 results in error. Possible values include: 'All', 'ReadOnly'
517	QuerypoolConnectionMode ConnectionMode `json:"querypoolConnectionMode,omitempty"`
518}
519
520// MarshalJSON is the custom marshaler for ServerProperties.
521func (sp ServerProperties) MarshalJSON() ([]byte, error) {
522	objectMap := make(map[string]interface{})
523	if sp.AsAdministrators != nil {
524		objectMap["asAdministrators"] = sp.AsAdministrators
525	}
526	if sp.BackupBlobContainerURI != nil {
527		objectMap["backupBlobContainerUri"] = sp.BackupBlobContainerURI
528	}
529	if sp.GatewayDetails != nil {
530		objectMap["gatewayDetails"] = sp.GatewayDetails
531	}
532	if sp.IPV4FirewallSettings != nil {
533		objectMap["ipV4FirewallSettings"] = sp.IPV4FirewallSettings
534	}
535	if sp.QuerypoolConnectionMode != "" {
536		objectMap["querypoolConnectionMode"] = sp.QuerypoolConnectionMode
537	}
538	return json.Marshal(objectMap)
539}
540
541// Servers an array of Analysis Services resources.
542type Servers struct {
543	autorest.Response `json:"-"`
544	// Value - An array of Analysis Services resources.
545	Value *[]Server `json:"value,omitempty"`
546}
547
548// ServersCreateFuture an abstraction for monitoring and retrieving the results of a long-running
549// operation.
550type ServersCreateFuture struct {
551	azure.FutureAPI
552	// Result returns the result of the asynchronous operation.
553	// If the operation has not completed it will return an error.
554	Result func(ServersClient) (Server, error)
555}
556
557// UnmarshalJSON is the custom unmarshaller for CreateFuture.
558func (future *ServersCreateFuture) UnmarshalJSON(body []byte) error {
559	var azFuture azure.Future
560	if err := json.Unmarshal(body, &azFuture); err != nil {
561		return err
562	}
563	future.FutureAPI = &azFuture
564	future.Result = future.result
565	return nil
566}
567
568// result is the default implementation for ServersCreateFuture.Result.
569func (future *ServersCreateFuture) result(client ServersClient) (s Server, err error) {
570	var done bool
571	done, err = future.DoneWithContext(context.Background(), client)
572	if err != nil {
573		err = autorest.NewErrorWithError(err, "analysisservices.ServersCreateFuture", "Result", future.Response(), "Polling failure")
574		return
575	}
576	if !done {
577		s.Response.Response = future.Response()
578		err = azure.NewAsyncOpIncompleteError("analysisservices.ServersCreateFuture")
579		return
580	}
581	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
582	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
583		s, err = client.CreateResponder(s.Response.Response)
584		if err != nil {
585			err = autorest.NewErrorWithError(err, "analysisservices.ServersCreateFuture", "Result", s.Response.Response, "Failure responding to request")
586		}
587	}
588	return
589}
590
591// ServersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
592// operation.
593type ServersDeleteFuture struct {
594	azure.FutureAPI
595	// Result returns the result of the asynchronous operation.
596	// If the operation has not completed it will return an error.
597	Result func(ServersClient) (autorest.Response, error)
598}
599
600// UnmarshalJSON is the custom unmarshaller for CreateFuture.
601func (future *ServersDeleteFuture) UnmarshalJSON(body []byte) error {
602	var azFuture azure.Future
603	if err := json.Unmarshal(body, &azFuture); err != nil {
604		return err
605	}
606	future.FutureAPI = &azFuture
607	future.Result = future.result
608	return nil
609}
610
611// result is the default implementation for ServersDeleteFuture.Result.
612func (future *ServersDeleteFuture) result(client ServersClient) (ar autorest.Response, err error) {
613	var done bool
614	done, err = future.DoneWithContext(context.Background(), client)
615	if err != nil {
616		err = autorest.NewErrorWithError(err, "analysisservices.ServersDeleteFuture", "Result", future.Response(), "Polling failure")
617		return
618	}
619	if !done {
620		ar.Response = future.Response()
621		err = azure.NewAsyncOpIncompleteError("analysisservices.ServersDeleteFuture")
622		return
623	}
624	ar.Response = future.Response()
625	return
626}
627
628// ServersResumeFuture an abstraction for monitoring and retrieving the results of a long-running
629// operation.
630type ServersResumeFuture struct {
631	azure.FutureAPI
632	// Result returns the result of the asynchronous operation.
633	// If the operation has not completed it will return an error.
634	Result func(ServersClient) (autorest.Response, error)
635}
636
637// UnmarshalJSON is the custom unmarshaller for CreateFuture.
638func (future *ServersResumeFuture) UnmarshalJSON(body []byte) error {
639	var azFuture azure.Future
640	if err := json.Unmarshal(body, &azFuture); err != nil {
641		return err
642	}
643	future.FutureAPI = &azFuture
644	future.Result = future.result
645	return nil
646}
647
648// result is the default implementation for ServersResumeFuture.Result.
649func (future *ServersResumeFuture) result(client ServersClient) (ar autorest.Response, err error) {
650	var done bool
651	done, err = future.DoneWithContext(context.Background(), client)
652	if err != nil {
653		err = autorest.NewErrorWithError(err, "analysisservices.ServersResumeFuture", "Result", future.Response(), "Polling failure")
654		return
655	}
656	if !done {
657		ar.Response = future.Response()
658		err = azure.NewAsyncOpIncompleteError("analysisservices.ServersResumeFuture")
659		return
660	}
661	ar.Response = future.Response()
662	return
663}
664
665// ServersSuspendFuture an abstraction for monitoring and retrieving the results of a long-running
666// operation.
667type ServersSuspendFuture struct {
668	azure.FutureAPI
669	// Result returns the result of the asynchronous operation.
670	// If the operation has not completed it will return an error.
671	Result func(ServersClient) (autorest.Response, error)
672}
673
674// UnmarshalJSON is the custom unmarshaller for CreateFuture.
675func (future *ServersSuspendFuture) UnmarshalJSON(body []byte) error {
676	var azFuture azure.Future
677	if err := json.Unmarshal(body, &azFuture); err != nil {
678		return err
679	}
680	future.FutureAPI = &azFuture
681	future.Result = future.result
682	return nil
683}
684
685// result is the default implementation for ServersSuspendFuture.Result.
686func (future *ServersSuspendFuture) result(client ServersClient) (ar autorest.Response, err error) {
687	var done bool
688	done, err = future.DoneWithContext(context.Background(), client)
689	if err != nil {
690		err = autorest.NewErrorWithError(err, "analysisservices.ServersSuspendFuture", "Result", future.Response(), "Polling failure")
691		return
692	}
693	if !done {
694		ar.Response = future.Response()
695		err = azure.NewAsyncOpIncompleteError("analysisservices.ServersSuspendFuture")
696		return
697	}
698	ar.Response = future.Response()
699	return
700}
701
702// ServersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
703// operation.
704type ServersUpdateFuture struct {
705	azure.FutureAPI
706	// Result returns the result of the asynchronous operation.
707	// If the operation has not completed it will return an error.
708	Result func(ServersClient) (Server, error)
709}
710
711// UnmarshalJSON is the custom unmarshaller for CreateFuture.
712func (future *ServersUpdateFuture) UnmarshalJSON(body []byte) error {
713	var azFuture azure.Future
714	if err := json.Unmarshal(body, &azFuture); err != nil {
715		return err
716	}
717	future.FutureAPI = &azFuture
718	future.Result = future.result
719	return nil
720}
721
722// result is the default implementation for ServersUpdateFuture.Result.
723func (future *ServersUpdateFuture) result(client ServersClient) (s Server, err error) {
724	var done bool
725	done, err = future.DoneWithContext(context.Background(), client)
726	if err != nil {
727		err = autorest.NewErrorWithError(err, "analysisservices.ServersUpdateFuture", "Result", future.Response(), "Polling failure")
728		return
729	}
730	if !done {
731		s.Response.Response = future.Response()
732		err = azure.NewAsyncOpIncompleteError("analysisservices.ServersUpdateFuture")
733		return
734	}
735	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
736	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
737		s, err = client.UpdateResponder(s.Response.Response)
738		if err != nil {
739			err = autorest.NewErrorWithError(err, "analysisservices.ServersUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
740		}
741	}
742	return
743}
744
745// ServerUpdateParameters provision request specification
746type ServerUpdateParameters struct {
747	// Sku - The SKU of the Analysis Services resource.
748	Sku *ResourceSku `json:"sku,omitempty"`
749	// Tags - Key-value pairs of additional provisioning properties.
750	Tags map[string]*string `json:"tags"`
751	// ServerMutableProperties - Properties of the provision operation request.
752	*ServerMutableProperties `json:"properties,omitempty"`
753}
754
755// MarshalJSON is the custom marshaler for ServerUpdateParameters.
756func (sup ServerUpdateParameters) MarshalJSON() ([]byte, error) {
757	objectMap := make(map[string]interface{})
758	if sup.Sku != nil {
759		objectMap["sku"] = sup.Sku
760	}
761	if sup.Tags != nil {
762		objectMap["tags"] = sup.Tags
763	}
764	if sup.ServerMutableProperties != nil {
765		objectMap["properties"] = sup.ServerMutableProperties
766	}
767	return json.Marshal(objectMap)
768}
769
770// UnmarshalJSON is the custom unmarshaler for ServerUpdateParameters struct.
771func (sup *ServerUpdateParameters) UnmarshalJSON(body []byte) error {
772	var m map[string]*json.RawMessage
773	err := json.Unmarshal(body, &m)
774	if err != nil {
775		return err
776	}
777	for k, v := range m {
778		switch k {
779		case "sku":
780			if v != nil {
781				var sku ResourceSku
782				err = json.Unmarshal(*v, &sku)
783				if err != nil {
784					return err
785				}
786				sup.Sku = &sku
787			}
788		case "tags":
789			if v != nil {
790				var tags map[string]*string
791				err = json.Unmarshal(*v, &tags)
792				if err != nil {
793					return err
794				}
795				sup.Tags = tags
796			}
797		case "properties":
798			if v != nil {
799				var serverMutableProperties ServerMutableProperties
800				err = json.Unmarshal(*v, &serverMutableProperties)
801				if err != nil {
802					return err
803				}
804				sup.ServerMutableProperties = &serverMutableProperties
805			}
806		}
807	}
808
809	return nil
810}
811
812// SkuDetailsForExistingResource an object that represents SKU details for existing resources.
813type SkuDetailsForExistingResource struct {
814	// Sku - The SKU in SKU details for existing resources.
815	Sku *ResourceSku `json:"sku,omitempty"`
816}
817
818// SkuEnumerationForExistingResourceResult an object that represents enumerating SKUs for existing
819// resources.
820type SkuEnumerationForExistingResourceResult struct {
821	autorest.Response `json:"-"`
822	// Value - The collection of available SKUs for existing resources.
823	Value *[]SkuDetailsForExistingResource `json:"value,omitempty"`
824}
825
826// SkuEnumerationForNewResourceResult an object that represents enumerating SKUs for new resources.
827type SkuEnumerationForNewResourceResult struct {
828	autorest.Response `json:"-"`
829	// Value - The collection of available SKUs for new resources.
830	Value *[]ResourceSku `json:"value,omitempty"`
831}
832